atkhayar-spree-dev-api 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +5 -0
  4. data/LICENSE +26 -0
  5. data/Rakefile +29 -0
  6. data/app/controllers/concerns/spree/api/v2/caching.rb +37 -0
  7. data/app/controllers/concerns/spree/api/v2/coupon_codes_helper.rb +29 -0
  8. data/app/controllers/concerns/spree/api/v2/number_resource.rb +11 -0
  9. data/app/controllers/concerns/spree/api/v2/platform/nested_set_reposition_concern.rb +37 -0
  10. data/app/controllers/concerns/spree/api/v2/platform/promotion_calculator_params.rb +17 -0
  11. data/app/controllers/concerns/spree/api/v2/platform/promotion_rule_params.rb +16 -0
  12. data/app/controllers/concerns/spree/api/v2/product_list_includes.rb +25 -0
  13. data/app/controllers/concerns/spree/api/v2/storefront/metadata_controller_concern.rb +18 -0
  14. data/app/controllers/concerns/spree/api/v2/storefront/order_concern.rb +52 -0
  15. data/app/controllers/spree/api/v2/base_controller.rb +171 -0
  16. data/app/controllers/spree/api/v2/platform/addresses_controller.rb +19 -0
  17. data/app/controllers/spree/api/v2/platform/adjustments_controller.rb +19 -0
  18. data/app/controllers/spree/api/v2/platform/classifications_controller.rb +22 -0
  19. data/app/controllers/spree/api/v2/platform/cms_pages_controller.rb +19 -0
  20. data/app/controllers/spree/api/v2/platform/cms_sections_controller.rb +29 -0
  21. data/app/controllers/spree/api/v2/platform/countries_controller.rb +19 -0
  22. data/app/controllers/spree/api/v2/platform/digital_links_controller.rb +25 -0
  23. data/app/controllers/spree/api/v2/platform/digitals_controller.rb +19 -0
  24. data/app/controllers/spree/api/v2/platform/firebase_controller.rb +76 -0
  25. data/app/controllers/spree/api/v2/platform/images_controller.rb +20 -0
  26. data/app/controllers/spree/api/v2/platform/line_items_controller.rb +59 -0
  27. data/app/controllers/spree/api/v2/platform/menu_items_controller.rb +21 -0
  28. data/app/controllers/spree/api/v2/platform/menus_controller.rb +19 -0
  29. data/app/controllers/spree/api/v2/platform/option_types_controller.rb +15 -0
  30. data/app/controllers/spree/api/v2/platform/option_values_controller.rb +19 -0
  31. data/app/controllers/spree/api/v2/platform/orders_controller.rb +163 -0
  32. data/app/controllers/spree/api/v2/platform/payment_methods_controller.rb +27 -0
  33. data/app/controllers/spree/api/v2/platform/payments_controller.rb +17 -0
  34. data/app/controllers/spree/api/v2/platform/products_controller.rb +37 -0
  35. data/app/controllers/spree/api/v2/platform/promotion_actions_controller.rb +30 -0
  36. data/app/controllers/spree/api/v2/platform/promotion_categories_controller.rb +19 -0
  37. data/app/controllers/spree/api/v2/platform/promotion_rules_controller.rb +25 -0
  38. data/app/controllers/spree/api/v2/platform/promotions_controller.rb +31 -0
  39. data/app/controllers/spree/api/v2/platform/resource_controller.rb +146 -0
  40. data/app/controllers/spree/api/v2/platform/roles_controller.rb +15 -0
  41. data/app/controllers/spree/api/v2/platform/shipments_controller.rb +143 -0
  42. data/app/controllers/spree/api/v2/platform/shipping_categories_controller.rb +15 -0
  43. data/app/controllers/spree/api/v2/platform/shipping_methods_controller.rb +24 -0
  44. data/app/controllers/spree/api/v2/platform/states_controller.rb +19 -0
  45. data/app/controllers/spree/api/v2/platform/stock_items_controller.rb +19 -0
  46. data/app/controllers/spree/api/v2/platform/stock_locations_controller.rb +19 -0
  47. data/app/controllers/spree/api/v2/platform/store_credit_categories_controller.rb +15 -0
  48. data/app/controllers/spree/api/v2/platform/store_credit_types_controller.rb +15 -0
  49. data/app/controllers/spree/api/v2/platform/store_credits_controller.rb +19 -0
  50. data/app/controllers/spree/api/v2/platform/stores_controller.rb +19 -0
  51. data/app/controllers/spree/api/v2/platform/tax_categories_controller.rb +19 -0
  52. data/app/controllers/spree/api/v2/platform/tax_rates_controller.rb +23 -0
  53. data/app/controllers/spree/api/v2/platform/taxonomies_controller.rb +19 -0
  54. data/app/controllers/spree/api/v2/platform/taxons_controller.rb +55 -0
  55. data/app/controllers/spree/api/v2/platform/users_controller.rb +32 -0
  56. data/app/controllers/spree/api/v2/platform/users_resource_controller.rb +144 -0
  57. data/app/controllers/spree/api/v2/platform/variants_controller.rb +19 -0
  58. data/app/controllers/spree/api/v2/platform/webhooks/events_controller.rb +21 -0
  59. data/app/controllers/spree/api/v2/platform/webhooks/subscribers_controller.rb +21 -0
  60. data/app/controllers/spree/api/v2/platform/wished_items_controller.rb +19 -0
  61. data/app/controllers/spree/api/v2/platform/wishlists_controller.rb +19 -0
  62. data/app/controllers/spree/api/v2/platform/zones_controller.rb +19 -0
  63. data/app/controllers/spree/api/v2/resource_controller.rb +76 -0
  64. data/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb +77 -0
  65. data/app/controllers/spree/api/v2/storefront/account/credit_cards_controller.rb +52 -0
  66. data/app/controllers/spree/api/v2/storefront/account/orders_controller.rb +50 -0
  67. data/app/controllers/spree/api/v2/storefront/account_controller.rb +52 -0
  68. data/app/controllers/spree/api/v2/storefront/cart_controller.rb +245 -0
  69. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +160 -0
  70. data/app/controllers/spree/api/v2/storefront/cms_pages_controller.rb +41 -0
  71. data/app/controllers/spree/api/v2/storefront/countries_controller.rb +57 -0
  72. data/app/controllers/spree/api/v2/storefront/digitals_controller.rb +58 -0
  73. data/app/controllers/spree/api/v2/storefront/menus_controller.rb +35 -0
  74. data/app/controllers/spree/api/v2/storefront/order_status_controller.rb +34 -0
  75. data/app/controllers/spree/api/v2/storefront/products_controller.rb +61 -0
  76. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +27 -0
  77. data/app/controllers/spree/api/v2/storefront/taxons_controller.rb +50 -0
  78. data/app/controllers/spree/api/v2/storefront/wishlists_controller.rb +171 -0
  79. data/app/helpers/spree/api/v2/collection_options_helpers.rb +46 -0
  80. data/app/helpers/spree/api/v2/display_money_helper.rb +43 -0
  81. data/app/helpers/spree/api/v2/store_media_serializer_images_concern.rb +35 -0
  82. data/app/jobs/spree/webhooks/subscribers/make_request_job.rb +17 -0
  83. data/app/models/concerns/spree/user_api_authentication.rb +19 -0
  84. data/app/models/concerns/spree/user_api_methods.rb +7 -0
  85. data/app/models/concerns/spree/webhooks/has_webhooks.rb +84 -0
  86. data/app/models/spree/api/webhooks/order_decorator.rb +43 -0
  87. data/app/models/spree/api/webhooks/payment_decorator.rb +26 -0
  88. data/app/models/spree/api/webhooks/product_decorator.rb +46 -0
  89. data/app/models/spree/api/webhooks/shipment_decorator.rb +21 -0
  90. data/app/models/spree/api/webhooks/stock_item_decorator.rb +43 -0
  91. data/app/models/spree/api/webhooks/stock_movement_decorator.rb +52 -0
  92. data/app/models/spree/api/webhooks/variant_decorator.rb +26 -0
  93. data/app/models/spree/oauth_access_grant.rb +7 -0
  94. data/app/models/spree/oauth_access_token.rb +7 -0
  95. data/app/models/spree/oauth_application.rb +15 -0
  96. data/app/models/spree/webhooks/base.rb +11 -0
  97. data/app/models/spree/webhooks/event.rb +12 -0
  98. data/app/models/spree/webhooks/subscriber.rb +61 -0
  99. data/app/presenters/spree/api/products/filters_presenter.rb +39 -0
  100. data/app/serializers/concerns/spree/api/v2/image_transformation_concern.rb +15 -0
  101. data/app/serializers/concerns/spree/api/v2/resource_serializer_concern.rb +34 -0
  102. data/app/serializers/concerns/spree/api/v2/taxon_image_transformation_concern.rb +15 -0
  103. data/app/serializers/spree/api/v2/base_serializer.rb +39 -0
  104. data/app/serializers/spree/api/v2/platform/address_serializer.rb +15 -0
  105. data/app/serializers/spree/api/v2/platform/adjustment_serializer.rb +20 -0
  106. data/app/serializers/spree/api/v2/platform/asset_serializer.rb +13 -0
  107. data/app/serializers/spree/api/v2/platform/base_serializer.rb +10 -0
  108. data/app/serializers/spree/api/v2/platform/calculator_serializer.rb +17 -0
  109. data/app/serializers/spree/api/v2/platform/classification_serializer.rb +14 -0
  110. data/app/serializers/spree/api/v2/platform/cms_page_serializer.rb +13 -0
  111. data/app/serializers/spree/api/v2/platform/cms_section_image_one_serializer.rb +9 -0
  112. data/app/serializers/spree/api/v2/platform/cms_section_image_three_serializer.rb +9 -0
  113. data/app/serializers/spree/api/v2/platform/cms_section_image_two_serializer.rb +9 -0
  114. data/app/serializers/spree/api/v2/platform/cms_section_serializer.rb +18 -0
  115. data/app/serializers/spree/api/v2/platform/country_serializer.rb +13 -0
  116. data/app/serializers/spree/api/v2/platform/credit_card_serializer.rb +14 -0
  117. data/app/serializers/spree/api/v2/platform/customer_return_serializer.rb +17 -0
  118. data/app/serializers/spree/api/v2/platform/digital_link_serializer.rb +16 -0
  119. data/app/serializers/spree/api/v2/platform/digital_serializer.rb +30 -0
  120. data/app/serializers/spree/api/v2/platform/feature_page_serializer.rb +11 -0
  121. data/app/serializers/spree/api/v2/platform/hero_image_serializer.rb +10 -0
  122. data/app/serializers/spree/api/v2/platform/homepage_serializer.rb +11 -0
  123. data/app/serializers/spree/api/v2/platform/icon_serializer.rb +16 -0
  124. data/app/serializers/spree/api/v2/platform/image_gallery_serializer.rb +10 -0
  125. data/app/serializers/spree/api/v2/platform/image_serializer.rb +17 -0
  126. data/app/serializers/spree/api/v2/platform/inventory_unit_serializer.rb +19 -0
  127. data/app/serializers/spree/api/v2/platform/line_item_serializer.rb +19 -0
  128. data/app/serializers/spree/api/v2/platform/log_entry_serializer.rb +13 -0
  129. data/app/serializers/spree/api/v2/platform/menu_item_serializer.rb +45 -0
  130. data/app/serializers/spree/api/v2/platform/menu_serializer.rb +13 -0
  131. data/app/serializers/spree/api/v2/platform/option_type_serializer.rb +13 -0
  132. data/app/serializers/spree/api/v2/platform/option_value_serializer.rb +13 -0
  133. data/app/serializers/spree/api/v2/platform/order_promotion_serializer.rb +14 -0
  134. data/app/serializers/spree/api/v2/platform/order_serializer.rb +31 -0
  135. data/app/serializers/spree/api/v2/platform/payment_capture_event_serializer.rb +13 -0
  136. data/app/serializers/spree/api/v2/platform/payment_method_serializer.rb +18 -0
  137. data/app/serializers/spree/api/v2/platform/payment_serializer.rb +21 -0
  138. data/app/serializers/spree/api/v2/platform/price_serializer.rb +19 -0
  139. data/app/serializers/spree/api/v2/platform/product_property_serializer.rb +11 -0
  140. data/app/serializers/spree/api/v2/platform/product_serializer.rb +82 -0
  141. data/app/serializers/spree/api/v2/platform/promotion_action_line_item_serializer.rb +14 -0
  142. data/app/serializers/spree/api/v2/platform/promotion_action_serializer.rb +19 -0
  143. data/app/serializers/spree/api/v2/platform/promotion_category_serializer.rb +13 -0
  144. data/app/serializers/spree/api/v2/platform/promotion_rule_serializer.rb +21 -0
  145. data/app/serializers/spree/api/v2/platform/promotion_serializer.rb +17 -0
  146. data/app/serializers/spree/api/v2/platform/property_serializer.rb +11 -0
  147. data/app/serializers/spree/api/v2/platform/prototype_serializer.rb +15 -0
  148. data/app/serializers/spree/api/v2/platform/refund_reason_serializer.rb +11 -0
  149. data/app/serializers/spree/api/v2/platform/refund_serializer.rb +16 -0
  150. data/app/serializers/spree/api/v2/platform/reimbursement_credit_serializer.rb +10 -0
  151. data/app/serializers/spree/api/v2/platform/reimbursement_serializer.rb +18 -0
  152. data/app/serializers/spree/api/v2/platform/reimbursement_type_serializer.rb +11 -0
  153. data/app/serializers/spree/api/v2/platform/return_authorization_reason_serializer.rb +11 -0
  154. data/app/serializers/spree/api/v2/platform/return_authorization_serializer.rb +17 -0
  155. data/app/serializers/spree/api/v2/platform/return_item_serializer.rb +16 -0
  156. data/app/serializers/spree/api/v2/platform/role_serializer.rb +11 -0
  157. data/app/serializers/spree/api/v2/platform/shipment_serializer.rb +22 -0
  158. data/app/serializers/spree/api/v2/platform/shipping_category_serializer.rb +11 -0
  159. data/app/serializers/spree/api/v2/platform/shipping_method_serializer.rb +16 -0
  160. data/app/serializers/spree/api/v2/platform/shipping_rate_serializer.rb +15 -0
  161. data/app/serializers/spree/api/v2/platform/side_by_side_image_serializer.rb +10 -0
  162. data/app/serializers/spree/api/v2/platform/standard_page_serializer.rb +11 -0
  163. data/app/serializers/spree/api/v2/platform/state_change_serializer.rb +13 -0
  164. data/app/serializers/spree/api/v2/platform/state_serializer.rb +13 -0
  165. data/app/serializers/spree/api/v2/platform/stock_item_serializer.rb +18 -0
  166. data/app/serializers/spree/api/v2/platform/stock_location_serializer.rb +14 -0
  167. data/app/serializers/spree/api/v2/platform/stock_movement_serializer.rb +11 -0
  168. data/app/serializers/spree/api/v2/platform/stock_transfer_serializer.rb +15 -0
  169. data/app/serializers/spree/api/v2/platform/store_credit_category_serializer.rb +12 -0
  170. data/app/serializers/spree/api/v2/platform/store_credit_event_serializer.rb +14 -0
  171. data/app/serializers/spree/api/v2/platform/store_credit_serializer.rb +18 -0
  172. data/app/serializers/spree/api/v2/platform/store_credit_type_serializer.rb +12 -0
  173. data/app/serializers/spree/api/v2/platform/store_serializer.rb +15 -0
  174. data/app/serializers/spree/api/v2/platform/tax_category_serializer.rb +13 -0
  175. data/app/serializers/spree/api/v2/platform/tax_rate_serializer.rb +14 -0
  176. data/app/serializers/spree/api/v2/platform/taxon_image_serializer.rb +15 -0
  177. data/app/serializers/spree/api/v2/platform/taxon_serializer.rb +38 -0
  178. data/app/serializers/spree/api/v2/platform/taxonomy_serializer.rb +14 -0
  179. data/app/serializers/spree/api/v2/platform/user_serializer.rb +39 -0
  180. data/app/serializers/spree/api/v2/platform/variant_serializer.rb +58 -0
  181. data/app/serializers/spree/api/v2/platform/webhooks/event_serializer.rb +15 -0
  182. data/app/serializers/spree/api/v2/platform/webhooks/subscriber_serializer.rb +13 -0
  183. data/app/serializers/spree/api/v2/platform/wished_item_serializer.rb +29 -0
  184. data/app/serializers/spree/api/v2/platform/wishlist_serializer.rb +19 -0
  185. data/app/serializers/spree/api/v2/platform/zone_member_serializer.rb +13 -0
  186. data/app/serializers/spree/api/v2/platform/zone_serializer.rb +13 -0
  187. data/app/serializers/spree/v2/storefront/address_serializer.rb +20 -0
  188. data/app/serializers/spree/v2/storefront/base_serializer.rb +10 -0
  189. data/app/serializers/spree/v2/storefront/cart_serializer.rb +36 -0
  190. data/app/serializers/spree/v2/storefront/cms_page_serializer.rb +14 -0
  191. data/app/serializers/spree/v2/storefront/cms_section_serializer.rb +32 -0
  192. data/app/serializers/spree/v2/storefront/country_serializer.rb +24 -0
  193. data/app/serializers/spree/v2/storefront/credit_card_serializer.rb +13 -0
  194. data/app/serializers/spree/v2/storefront/digital_link_serializer.rb +11 -0
  195. data/app/serializers/spree/v2/storefront/estimated_shipping_rate_serializer.rb +29 -0
  196. data/app/serializers/spree/v2/storefront/icon_serializer.rb +14 -0
  197. data/app/serializers/spree/v2/storefront/image_serializer.rb +13 -0
  198. data/app/serializers/spree/v2/storefront/line_item_serializer.rb +20 -0
  199. data/app/serializers/spree/v2/storefront/menu_item_serializer.rb +43 -0
  200. data/app/serializers/spree/v2/storefront/menu_serializer.rb +13 -0
  201. data/app/serializers/spree/v2/storefront/option_type_serializer.rb +13 -0
  202. data/app/serializers/spree/v2/storefront/option_value_serializer.rb +13 -0
  203. data/app/serializers/spree/v2/storefront/order_serializer.rb +9 -0
  204. data/app/serializers/spree/v2/storefront/payment_method_serializer.rb +15 -0
  205. data/app/serializers/spree/v2/storefront/payment_serializer.rb +15 -0
  206. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +19 -0
  207. data/app/serializers/spree/v2/storefront/product_serializer.rb +76 -0
  208. data/app/serializers/spree/v2/storefront/promotion_serializer.rb +12 -0
  209. data/app/serializers/spree/v2/storefront/shipment_serializer.rb +24 -0
  210. data/app/serializers/spree/v2/storefront/shipping_rate_serializer.rb +16 -0
  211. data/app/serializers/spree/v2/storefront/state_serializer.rb +11 -0
  212. data/app/serializers/spree/v2/storefront/stock_location_serializer.rb +11 -0
  213. data/app/serializers/spree/v2/storefront/store_credit_category_serializer.rb +11 -0
  214. data/app/serializers/spree/v2/storefront/store_credit_event_serializer.rb +15 -0
  215. data/app/serializers/spree/v2/storefront/store_credit_serializer.rb +17 -0
  216. data/app/serializers/spree/v2/storefront/store_credit_type_serializer.rb +11 -0
  217. data/app/serializers/spree/v2/storefront/store_serializer.rb +20 -0
  218. data/app/serializers/spree/v2/storefront/taxon_image_serializer.rb +13 -0
  219. data/app/serializers/spree/v2/storefront/taxon_serializer.rb +37 -0
  220. data/app/serializers/spree/v2/storefront/taxonomy_serializer.rb +11 -0
  221. data/app/serializers/spree/v2/storefront/user_serializer.rb +31 -0
  222. data/app/serializers/spree/v2/storefront/variant_serializer.rb +49 -0
  223. data/app/serializers/spree/v2/storefront/wished_item_serializer.rb +29 -0
  224. data/app/serializers/spree/v2/storefront/wishlist_serializer.rb +17 -0
  225. data/app/services/spree/api/error_handler.rb +40 -0
  226. data/app/services/spree/webhooks/subscribers/handle_request.rb +73 -0
  227. data/app/services/spree/webhooks/subscribers/make_request.rb +82 -0
  228. data/app/services/spree/webhooks/subscribers/queue_requests.rb +23 -0
  229. data/app/services/spree/webhooks.rb +13 -0
  230. data/config/i18n-tasks.yml +40 -0
  231. data/config/initializers/doorkeeper.rb +48 -0
  232. data/config/initializers/json_api_mime_types.rb +8 -0
  233. data/config/initializers/user_class_extensions.rb +7 -0
  234. data/config/locales/en.yml +38 -0
  235. data/config/routes.rb +214 -0
  236. data/db/migrate/20100107141738_add_api_key_to_spree_users.rb +7 -0
  237. data/db/migrate/20120411123334_resize_api_key_field.rb +7 -0
  238. data/db/migrate/20120530054546_rename_api_key_to_spree_api_key.rb +7 -0
  239. data/db/migrate/20131017162334_add_index_to_user_spree_api_key.rb +7 -0
  240. data/db/migrate/20180320110726_create_doorkeeper_tables.rb +69 -0
  241. data/db/migrate/20210727102516_change_integer_id_columns_type.rb +9 -0
  242. data/db/migrate/20210902162826_create_spree_webhooks_tables.rb +16 -0
  243. data/db/migrate/20210919183228_enable_polymorphic_resource_owner.rb +21 -0
  244. data/db/migrate/20211025162826_create_spree_webhooks_events.rb +14 -0
  245. data/docs/oauth/index.yml +233 -0
  246. data/docs/v2/platform/index.yaml +21111 -0
  247. data/docs/v2/storefront/index.yaml +16504 -0
  248. data/lib/spree/api/configuration.rb +11 -0
  249. data/lib/spree/api/dependencies.rb +165 -0
  250. data/lib/spree/api/engine.rb +34 -0
  251. data/lib/spree/api/testing_support/caching.rb +10 -0
  252. data/lib/spree/api/testing_support/factories/oauth_application_factory.rb +6 -0
  253. data/lib/spree/api/testing_support/factories/webhook_event_factory.rb +27 -0
  254. data/lib/spree/api/testing_support/factories/webhook_subscriber_factory.rb +13 -0
  255. data/lib/spree/api/testing_support/factories.rb +3 -0
  256. data/lib/spree/api/testing_support/jobs.rb +18 -0
  257. data/lib/spree/api/testing_support/matchers/webhooks.rb +67 -0
  258. data/lib/spree/api/testing_support/serializers.rb +25 -0
  259. data/lib/spree/api/testing_support/spree_webhooks.rb +9 -0
  260. data/lib/spree/api/testing_support/v2/base.rb +13 -0
  261. data/lib/spree/api/testing_support/v2/current_order.rb +112 -0
  262. data/lib/spree/api/testing_support/v2/platform_contexts.rb +273 -0
  263. data/lib/spree/api/testing_support/v2/serializers_params.rb +16 -0
  264. data/lib/spree/api.rb +8 -0
  265. data/lib/spree_api.rb +3 -0
  266. data/script/rails +9 -0
  267. data/spec/fixtures/files/icon_256x256.jpg +0 -0
  268. data/spec/fixtures/thinking-cat.jpg +0 -0
  269. data/spree_api.gemspec +35 -0
  270. metadata +427 -0
@@ -0,0 +1,146 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class ResourceController < ::Spree::Api::V2::ResourceController
6
+ # doorkeeper scopes usage: https://github.com/doorkeeper-gem/doorkeeper/wiki/Using-Scopes
7
+ before_action :validate_token_client
8
+ before_action -> { doorkeeper_authorize! :read, :admin }
9
+ before_action -> { doorkeeper_authorize! :write, :admin }, if: :write_request?
10
+
11
+ # optional authorization if using a user token instead of app token
12
+ before_action :authorize_spree_user
13
+
14
+ # index and show actions are defined in Spree::Api::V2::ResourceController
15
+
16
+ def create
17
+ resource = model_class.new(permitted_resource_params)
18
+ ensure_current_store(resource)
19
+
20
+ if resource.save
21
+ render_serialized_payload(201) { serialize_resource(resource) }
22
+ else
23
+ render_error_payload(resource.errors)
24
+ end
25
+ end
26
+
27
+ def update
28
+ resource.assign_attributes(permitted_resource_params)
29
+ ensure_current_store(resource)
30
+
31
+ if resource.save
32
+ render_serialized_payload { serialize_resource(resource) }
33
+ else
34
+ render_error_payload(resource.errors)
35
+ end
36
+ end
37
+
38
+ def destroy
39
+ if resource.destroy
40
+ head 204
41
+ else
42
+ render_error_payload(resource.errors)
43
+ end
44
+ end
45
+
46
+ protected
47
+
48
+ def resource_serializer
49
+ serializer_base_name = model_class.to_s.sub('Spree::', '')
50
+ "Spree::Api::V2::Platform::#{serializer_base_name}Serializer".constantize
51
+ end
52
+
53
+ def collection_serializer
54
+ resource_serializer
55
+ end
56
+
57
+ # overwriting to utilize ransack gem for filtering
58
+ # https://github.com/activerecord-hackery/ransack#search-matchers
59
+ def collection
60
+ @collection ||= scope.ransack(params[:filter]).result
61
+ end
62
+
63
+ # overwriting to skip cancancan check if API is consumed by an application
64
+ def scope
65
+ return super if spree_current_user.present?
66
+
67
+ super(skip_cancancan: true)
68
+ end
69
+
70
+ # We're overwriting this method because the original one calls `dookreeper_authorize`
71
+ # which breaks our application authorizations defined on top of this controller
72
+ def spree_current_user
73
+ return nil unless doorkeeper_token
74
+ return nil if doorkeeper_token.resource_owner_id.nil?
75
+ return @spree_current_user if @spree_current_user
76
+
77
+ @spree_current_user ||= doorkeeper_token.resource_owner
78
+ end
79
+
80
+ def access_denied(exception)
81
+ access_denied_401(exception)
82
+ end
83
+
84
+ def validate_token_client
85
+ return if doorkeeper_token.nil?
86
+
87
+ #raise Doorkeeper::Errors::DoorkeeperError if doorkeeper_token.application.nil?
88
+ end
89
+
90
+ # if using a user oAuth token we need to check CanCanCan abilities
91
+ # defined in https://github.com/spree/spree/blob/master/core/app/models/spree/ability.rb
92
+ def authorize_spree_user
93
+ return if spree_current_user.nil?
94
+
95
+ case action_name
96
+ when 'create'
97
+ spree_authorize! :create, model_class
98
+ when 'destroy'
99
+ spree_authorize! :destroy, resource
100
+ when 'index'
101
+ spree_authorize! :read, model_class
102
+ when 'show'
103
+ spree_authorize! :read, resource
104
+ else
105
+ spree_authorize! :update, resource
106
+ end
107
+ end
108
+
109
+ def model_param_name
110
+ model_class.to_s.demodulize.underscore
111
+ end
112
+
113
+ def spree_permitted_attributes
114
+ store_ids = if model_class.method_defined?(:stores)
115
+ [{ store_ids: [] }]
116
+ else
117
+ []
118
+ end
119
+
120
+ model_class.json_api_permitted_attributes + store_ids + metadata_params
121
+ end
122
+
123
+ def metadata_params
124
+ if model_class.include?(Metadata)
125
+ [{ public_metadata: {}, private_metadata: {} }]
126
+ else
127
+ []
128
+ end
129
+ end
130
+
131
+ def permitted_resource_params
132
+ params.require(model_param_name).permit(spree_permitted_attributes)
133
+ end
134
+
135
+ def allowed_sort_attributes
136
+ (super << spree_permitted_attributes).uniq.compact
137
+ end
138
+
139
+ def write_request?
140
+ %w[put patch post delete].include?(request.request_method.downcase)
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class RolesController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::Role
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,143 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class ShipmentsController < ResourceController
6
+ include NumberResource
7
+
8
+ before_action :load_variant, only: %i[transfer_to_location transfer_to_shipment]
9
+
10
+ SHIPMENT_STATES = %w[ready ship cancel resume pend]
11
+
12
+ def create
13
+ # FIXME: support saving metadata
14
+ result = create_service.call(
15
+ store: current_store,
16
+ shipment_attributes: params.require(:shipment).permit(
17
+ :order_id, :stock_location_id, :variant_id, :quantity
18
+ )
19
+ )
20
+ render_result(result, 201)
21
+ end
22
+
23
+ def update
24
+ result = update_service.call(shipment: resource, shipment_attributes: permitted_resource_params)
25
+ render_result(result)
26
+ end
27
+
28
+ SHIPMENT_STATES.each do |state|
29
+ define_method state do
30
+ result = change_state_service.call(shipment: resource, state: state)
31
+ render_result(result)
32
+ end
33
+ end
34
+
35
+ def add_item
36
+ result = add_item_service.call(
37
+ shipment: resource,
38
+ variant_id: params.dig(:shipment, :variant_id),
39
+ quantity: params.dig(:shipment, :quantity)
40
+ )
41
+ render_result(result)
42
+ end
43
+
44
+ def remove_item
45
+ result = remove_item_service.call(
46
+ shipment: resource,
47
+ variant_id: params.dig(:shipment, :variant_id),
48
+ quantity: params.dig(:shipment, :quantity)
49
+ )
50
+
51
+ if result.success?
52
+ if result.value == :shipment_deleted
53
+ head 204
54
+ else
55
+ render_serialized_payload { serialize_resource(result.value) }
56
+ end
57
+ else
58
+ render_error_payload(result.error)
59
+ end
60
+ end
61
+
62
+ def transfer_to_location
63
+ stock_location = Spree::StockLocation.find(params.dig(:shipment, :stock_location_id))
64
+ quantity = params.dig(:shipment, :quantity)&.to_i || 1
65
+
66
+ unless quantity > 0
67
+ render_error_payload("#{I18n.t('spree.api.shipment_transfer_errors_occurred')} \n #{I18n.t('spree.api.negative_quantity')}")
68
+ return
69
+ end
70
+
71
+ transfer = resource.transfer_to_location(@variant, quantity, stock_location)
72
+ if transfer.valid? && transfer.run!
73
+ render json: { message: I18n.t('spree.api.shipment_transfer_success') }, status: 201
74
+ else
75
+ render_error_payload(transfer.errors)
76
+ end
77
+ end
78
+
79
+ def transfer_to_shipment
80
+ target_shipment = Spree::Shipment.find_by!(number: params.dig(:shipment, :target_shipment_number))
81
+ quantity = params.dig(:shipment, :quantity)&.to_i || 1
82
+
83
+ error =
84
+ if quantity < 0 && target_shipment == resource
85
+ "#{I18n.t('spree.api.negative_quantity')}, \n#{I18n.t('spree.api.wrong_shipment_target')}"
86
+ elsif target_shipment == resource
87
+ I18n.t('spree.api.wrong_shipment_target')
88
+ elsif quantity < 0
89
+ I18n.t('spree.api.negative_quantity')
90
+ end
91
+
92
+ if error
93
+ render_error_payload("#{I18n.t('spree.api.shipment_transfer_errors_occurred')} \n#{error}")
94
+ else
95
+ transfer = resource.transfer_to_shipment(@variant, quantity, target_shipment)
96
+ if transfer.valid? && transfer.run!
97
+ render json: { message: I18n.t('spree.api.shipment_transfer_success') }, status: 201
98
+ else
99
+ render_error_payload(transfer.errors)
100
+ end
101
+ end
102
+ end
103
+
104
+ private
105
+
106
+ def model_class
107
+ Spree::Shipment
108
+ end
109
+
110
+ def load_variant
111
+ @variant = current_store.variants.find_by(id: params.dig(:shipment, :variant_id))
112
+ end
113
+
114
+ def spree_permitted_attributes
115
+ Spree::Shipment.json_api_permitted_attributes + [
116
+ :selected_shipping_rate_id
117
+ ]
118
+ end
119
+
120
+ def create_service
121
+ Spree::Api::Dependencies.platform_shipment_create_service.constantize
122
+ end
123
+
124
+ def update_service
125
+ Spree::Api::Dependencies.platform_shipment_update_service.constantize
126
+ end
127
+
128
+ def change_state_service
129
+ Spree::Api::Dependencies.platform_shipment_change_state_service.constantize
130
+ end
131
+
132
+ def add_item_service
133
+ Spree::Api::Dependencies.platform_shipment_add_item_service.constantize
134
+ end
135
+
136
+ def remove_item_service
137
+ Spree::Api::Dependencies.platform_shipment_remove_item_service.constantize
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class ShippingCategoriesController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::ShippingCategory
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class ShippingMethodsController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::ShippingMethod
10
+ end
11
+
12
+ def spree_permitted_attributes
13
+ super + [
14
+ {
15
+ shipping_category_ids: [],
16
+ calculator_attributes: {}
17
+ }
18
+ ]
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class StatesController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::State
10
+ end
11
+
12
+ def scope_includes
13
+ [:country]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class StockItemsController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::StockItem
10
+ end
11
+
12
+ def scope_includes
13
+ [:variant, :stock_location]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class StockLocationsController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::StockLocation
10
+ end
11
+
12
+ def scope_includes
13
+ [:country]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class StoreCreditCategoriesController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::StoreCreditCategory
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class StoreCreditTypesController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::StoreCreditType
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class StoreCreditsController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::StoreCredit
10
+ end
11
+
12
+ def scope_includes
13
+ [:user, :created_by, :category, :credit_type]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class StoresController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::Store
10
+ end
11
+
12
+ def spree_permitted_attributes
13
+ super + [:digital_asset_authorized_clicks, :limit_digital_download_count,:digital_asset_authorized_days,:limit_digital_download_days, :digital_asset_link_expire_time,:supported_currencies,:supported_locales]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class TaxCategoriesController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::TaxCategory
10
+ end
11
+
12
+ def scope_includes
13
+ [:tax_rates]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class TaxRatesController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::TaxRate
10
+ end
11
+
12
+ def scope_includes
13
+ [:zone, :tax_category]
14
+ end
15
+
16
+ def spree_permitted_attributes
17
+ super + [calculator_attributes: Spree::Calculator.json_api_permitted_attributes]
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class TaxonomiesController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::Taxonomy
10
+ end
11
+
12
+ def scope_includes
13
+ [:taxons, :root]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,55 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class TaxonsController < ResourceController
6
+ include ::Spree::Api::V2::Platform::NestedSetRepositionConcern
7
+
8
+ private
9
+
10
+ def successful_reposition_actions
11
+ reload_taxon_and_set_new_permalink(resource)
12
+ update_permalinks_on_child_taxons
13
+
14
+ render_serialized_payload { serialize_resource(resource) }
15
+ end
16
+
17
+ def reload_taxon_and_set_new_permalink(taxon)
18
+ taxon.reload
19
+ taxon.set_permalink
20
+ taxon.save!
21
+ end
22
+
23
+ def update_permalinks_on_child_taxons
24
+ resource.descendants.each do |taxon|
25
+ reload_taxon_and_set_new_permalink(taxon)
26
+ end
27
+ end
28
+
29
+ def model_class
30
+ Spree::Taxon
31
+ end
32
+
33
+ def scope_includes
34
+ node_includes = %i[icon parent taxonomy]
35
+
36
+ {
37
+ parent: node_includes,
38
+ children: node_includes,
39
+ taxonomy: [root: node_includes],
40
+ icon: [attachment_attachment: :blob]
41
+ }
42
+ end
43
+
44
+ def serializer_params
45
+ super.merge(include_products: action_name == 'show')
46
+ end
47
+
48
+ def spree_permitted_attributes
49
+ super + [:new_parent_id, :new_position_idx]
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,32 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class UsersController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree.user_class
10
+ end
11
+
12
+ def resource_serializer
13
+ Spree::Api::V2::Platform::UserSerializer
14
+ end
15
+
16
+ def scope_includes
17
+ [:ship_address, :bill_address]
18
+ end
19
+
20
+ # we need to define this here as developers can configure their own `user_class`
21
+ def model_param_name
22
+ 'user'
23
+ end
24
+
25
+ def spree_permitted_attributes
26
+ super + [:password, :password_confirmation, spree_role_ids:[], vendor_ids:[]]
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end