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,144 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class UsersResourceController < ::Spree::Api::V2::ResourceController
6
+ # doorkeeper scopes usage: https://github.com/doorkeeper-gem/doorkeeper/wiki/Using-Scopes
7
+ before_action :validate_token_client
8
+
9
+ # optional authorization if using a user token instead of app token
10
+ before_action :authorize_spree_user
11
+
12
+ # index and show actions are defined in Spree::Api::V2::ResourceController
13
+ def create
14
+ resource = model_class.new(permitted_resource_params)
15
+ ensure_current_store(resource)
16
+ if resource.save
17
+ render_serialized_payload(201) { serialize_resource(resource) }
18
+ else
19
+ render_error_payload(resource.errors)
20
+ end
21
+ end
22
+
23
+ def update
24
+ resource.assign_attributes(permitted_resource_params)
25
+ ensure_current_store(resource)
26
+
27
+ if resource.save
28
+ render_serialized_payload { serialize_resource(resource) }
29
+ else
30
+ render_error_payload(resource.errors)
31
+ end
32
+ end
33
+
34
+ def destroy
35
+ if resource.destroy
36
+ head 204
37
+ else
38
+ render_error_payload(resource.errors)
39
+ end
40
+ end
41
+
42
+ protected
43
+
44
+ def resource_serializer
45
+ serializer_base_name = model_class.to_s.sub('Spree::', '')
46
+ "Spree::Api::V2::Platform::#{serializer_base_name}Serializer".constantize
47
+ end
48
+
49
+ def collection_serializer
50
+ resource_serializer
51
+ end
52
+
53
+ # overwriting to utilize ransack gem for filtering
54
+ # https://github.com/activerecord-hackery/ransack#search-matchers
55
+ def collection
56
+ @collection ||= scope.ransack(params[:filter]).result
57
+ end
58
+
59
+ # overwriting to skip cancancan check if API is consumed by an application
60
+ def scope
61
+ return super if spree_current_user.present?
62
+
63
+ super(skip_cancancan: true)
64
+ end
65
+
66
+ # We're overwriting this method because the original one calls `dookreeper_authorize`
67
+ # which breaks our application authorizations defined on top of this controller
68
+ def spree_current_user
69
+ return nil unless doorkeeper_token
70
+ return nil if doorkeeper_token.resource_owner_id.nil?
71
+ return @spree_current_user if @spree_current_user
72
+
73
+ @spree_current_user ||= doorkeeper_token.resource_owner
74
+ end
75
+
76
+ def access_denied(exception)
77
+ access_denied_401(exception)
78
+ end
79
+
80
+ def validate_token_client
81
+ return if doorkeeper_token.nil?
82
+
83
+ #raise Doorkeeper::Errors::DoorkeeperError if doorkeeper_token.application.nil?
84
+ end
85
+
86
+ # if using a user oAuth token we need to check CanCanCan abilities
87
+ # defined in https://github.com/spree/spree/blob/master/core/app/models/spree/ability.rb
88
+ def authorize_spree_user
89
+ return if spree_current_user.nil?
90
+
91
+ case action_name
92
+ when 'create'
93
+ spree_authorize! :create, model_class
94
+ when 'destroy'
95
+ spree_authorize! :destroy, resource
96
+ when 'index'
97
+ spree_authorize! :read, model_class
98
+ when 'show'
99
+ spree_authorize! :read, resource
100
+ else
101
+ spree_authorize! :update, resource
102
+ end
103
+ end
104
+
105
+ def model_param_name
106
+ model_class.to_s.demodulize.underscore
107
+ end
108
+
109
+ def spree_permitted_attributes
110
+ store_ids = if model_class.method_defined?(:stores)
111
+ [{ store_ids: [] }]
112
+ else
113
+ []
114
+ end
115
+
116
+ model_class.json_api_permitted_attributes + store_ids + metadata_params
117
+ end
118
+
119
+ def metadata_params
120
+ if model_class.include?(Metadata)
121
+ [{ public_metadata: {}, private_metadata: {} }]
122
+ else
123
+ []
124
+ end
125
+ end
126
+
127
+ def permitted_resource_params
128
+ # params.require(model_param_name).permit(spree_permitted_attributes)
129
+ params.require(model_param_name).permit(spree_permitted_attributes)
130
+ end
131
+
132
+ def allowed_sort_attributes
133
+ (super << spree_permitted_attributes).uniq.compact
134
+ end
135
+
136
+ def write_request?
137
+ %w[put patch post delete].include?(request.request_method.downcase)
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class VariantsController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::Variant
10
+ end
11
+
12
+ def spree_permitted_attributes
13
+ super + [:price, :currency, option_value_ids:[]]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ module Webhooks
6
+ class EventsController < ResourceController
7
+ private
8
+
9
+ def model_class
10
+ Spree::Webhooks::Event
11
+ end
12
+
13
+ def scope_includes
14
+ %i[subscriber]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ module Webhooks
6
+ class SubscribersController < ResourceController
7
+ private
8
+
9
+ def model_class
10
+ Spree::Webhooks::Subscriber
11
+ end
12
+
13
+ def spree_permitted_attributes
14
+ super + [{ subscriptions: [] }]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class WishedItemsController < ResourceController
6
+ private
7
+
8
+ def scope_includes
9
+ [:variant]
10
+ end
11
+
12
+ def model_class
13
+ Spree::WishedItem
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 WishlistsController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::Wishlist
10
+ end
11
+
12
+ def scope_includes
13
+ [:wished_items]
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 ZonesController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::Zone
10
+ end
11
+
12
+ def scope_includes
13
+ [:zone_members]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,76 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ class ResourceController < ::Spree::Api::V2::BaseController
5
+ include Spree::Api::V2::CollectionOptionsHelpers
6
+ include Spree::Api::V2::Caching
7
+
8
+ def index
9
+ render_serialized_payload do
10
+ Rails.cache.fetch(collection_cache_key(paginated_collection), collection_cache_opts) do
11
+ serialize_collection(paginated_collection)
12
+ end
13
+ end
14
+ end
15
+
16
+ def show
17
+ render_serialized_payload { serialize_resource(resource) }
18
+ end
19
+
20
+ protected
21
+
22
+ def sorted_collection
23
+ @sorted_collection ||= collection_sorter.new(collection, params, allowed_sort_attributes).call
24
+ end
25
+
26
+ def allowed_sort_attributes
27
+ default_sort_attributes
28
+ end
29
+
30
+ def default_sort_attributes
31
+ [:id, :name, :slug, :number, :position, :updated_at, :created_at, :deleted_at]
32
+ end
33
+
34
+ def scope(skip_cancancan: false)
35
+ base_scope = model_class.for_store(current_store)
36
+ base_scope = base_scope.accessible_by(current_ability, :show) unless skip_cancancan
37
+ base_scope = base_scope.includes(scope_includes) if scope_includes.any? && action_name == 'index'
38
+ base_scope
39
+ end
40
+
41
+ def scope_includes
42
+ []
43
+ end
44
+
45
+ def resource
46
+ @resource ||= if defined?(resource_finder)
47
+ resource_finder.new(scope: scope, params: finder_params).execute
48
+ else
49
+ scope.find(params[:id])
50
+ end
51
+ end
52
+
53
+ def collection
54
+ @collection ||= if defined?(collection_finder)
55
+ collection_finder.new(scope: scope, params: finder_params).execute
56
+ else
57
+ scope
58
+ end
59
+ end
60
+
61
+ def finder_params
62
+ params.merge(
63
+ store: current_store,
64
+ locale: current_locale,
65
+ currency: current_currency,
66
+ user: spree_current_user
67
+ )
68
+ end
69
+
70
+ def collection_sorter
71
+ Spree::Api::Dependencies.storefront_collection_sorter.constantize
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,77 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ module Account
6
+ class AddressesController < ::Spree::Api::V2::ResourceController
7
+ include Spree::BaseHelper
8
+
9
+ before_action :require_spree_current_user
10
+
11
+ def create
12
+ spree_authorize! :create, model_class
13
+
14
+ result = create_service.call(user: spree_current_user, address_params: address_params)
15
+ render_result(result)
16
+ end
17
+
18
+ def update
19
+ spree_authorize! :update, resource
20
+
21
+ result = update_service.call(address: resource, address_params: address_params)
22
+ render_result(result)
23
+ end
24
+
25
+ def destroy
26
+ spree_authorize! :destroy, resource
27
+
28
+ if resource.destroy
29
+ head 204
30
+ else
31
+ render_error_payload(resource.errors)
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def collection
38
+ collection_finder.new(scope: scope, params: finder_params).execute
39
+ end
40
+
41
+ def scope
42
+ super.where(user: spree_current_user, country: available_countries).not_deleted
43
+ end
44
+
45
+ def model_class
46
+ Spree::Address
47
+ end
48
+
49
+ def collection_finder
50
+ Spree::Api::Dependencies.storefront_address_finder.constantize
51
+ end
52
+
53
+ def collection_serializer
54
+ Spree::Api::Dependencies.storefront_address_serializer.constantize
55
+ end
56
+
57
+ def resource_serializer
58
+ Spree::Api::Dependencies.storefront_address_serializer.constantize
59
+ end
60
+
61
+ def create_service
62
+ Spree::Api::Dependencies.storefront_address_create_service.constantize
63
+ end
64
+
65
+ def update_service
66
+ Spree::Api::Dependencies.storefront_address_update_service.constantize
67
+ end
68
+
69
+ def address_params
70
+ params.require(:address).permit(permitted_address_attributes)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,52 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ module Account
6
+ class CreditCardsController < ::Spree::Api::V2::ResourceController
7
+ before_action :require_spree_current_user
8
+
9
+ def destroy
10
+ spree_authorize! :destroy, resource, resource
11
+
12
+ destroy_service.call(card: resource)
13
+ end
14
+
15
+ private
16
+
17
+ def resource
18
+ params[:id].eql?('default') ? scope.default.first! : scope.find(params[:id])
19
+ end
20
+
21
+ def model_class
22
+ Spree::CreditCard
23
+ end
24
+
25
+ def scope
26
+ super.not_expired.not_removed.where(
27
+ user: spree_current_user,
28
+ payment_method: current_store.payment_methods.available_on_front_end
29
+ )
30
+ end
31
+
32
+ def collection_serializer
33
+ Spree::Api::Dependencies.storefront_credit_card_serializer.constantize
34
+ end
35
+
36
+ def collection_finder
37
+ Spree::Api::Dependencies.storefront_credit_card_finder.constantize
38
+ end
39
+
40
+ def resource_serializer
41
+ Spree::Api::Dependencies.storefront_credit_card_serializer.constantize
42
+ end
43
+
44
+ def destroy_service
45
+ Spree::Api::Dependencies.storefront_credit_cards_destroy_service.constantize
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,50 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ module Account
6
+ class OrdersController < ::Spree::Api::V2::ResourceController
7
+ before_action :require_spree_current_user
8
+
9
+ private
10
+
11
+ def collection
12
+ collection_finder.new(user: spree_current_user, store: current_store).execute
13
+ end
14
+
15
+ def resource
16
+ resource = resource_finder.new(user: spree_current_user, number: params[:id], store: current_store).execute.take
17
+ raise ActiveRecord::RecordNotFound if resource.nil?
18
+
19
+ resource
20
+ end
21
+
22
+ def allowed_sort_attributes
23
+ super << :completed_at
24
+ end
25
+
26
+ def collection_serializer
27
+ Spree::Api::Dependencies.storefront_order_serializer.constantize
28
+ end
29
+
30
+ def resource_serializer
31
+ Spree::Api::Dependencies.storefront_order_serializer.constantize
32
+ end
33
+
34
+ def collection_finder
35
+ Spree::Api::Dependencies.storefront_completed_order_finder.constantize
36
+ end
37
+
38
+ def resource_finder
39
+ Spree::Api::Dependencies.storefront_completed_order_finder.constantize
40
+ end
41
+
42
+ def model_class
43
+ Spree::Order
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,52 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class AccountController < ::Spree::Api::V2::ResourceController
6
+ before_action :require_spree_current_user, except: :create
7
+
8
+ def create
9
+ result = create_service.call(user_params: user_create_params)
10
+ render_result(result)
11
+ end
12
+
13
+ def update
14
+ spree_authorize! :update, spree_current_user
15
+ result = update_service.call(user: spree_current_user, user_params: user_update_params)
16
+ render_result(result)
17
+ end
18
+
19
+ private
20
+
21
+ def resource
22
+ spree_current_user
23
+ end
24
+
25
+ def resource_serializer
26
+ Spree::Api::Dependencies.storefront_user_serializer.constantize
27
+ end
28
+
29
+ def model_class
30
+ Spree.user_class
31
+ end
32
+
33
+ def create_service
34
+ Spree::Api::Dependencies.storefront_account_create_service.constantize
35
+ end
36
+
37
+ def update_service
38
+ Spree::Api::Dependencies.storefront_account_update_service.constantize
39
+ end
40
+
41
+ def user_create_params
42
+ user_update_params.except(:bill_address_id, :ship_address_id)
43
+ end
44
+
45
+ def user_update_params
46
+ params.require(:user).permit(permitted_user_attributes)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end