spree_api 5.3.4 → 5.4.0.beta

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 (332) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +71 -33
  3. data/Rakefile +25 -0
  4. data/app/controllers/concerns/spree/api/v3/api_key_authentication.rb +51 -0
  5. data/app/controllers/concerns/spree/api/v3/error_handler.rb +255 -0
  6. data/app/controllers/concerns/spree/api/v3/http_caching.rb +90 -0
  7. data/app/controllers/concerns/spree/api/v3/jwt_authentication.rb +95 -0
  8. data/app/controllers/concerns/spree/api/v3/locale_and_currency.rb +73 -0
  9. data/app/controllers/concerns/spree/api/v3/order_concern.rb +51 -0
  10. data/app/controllers/concerns/spree/api/v3/resource_serializer.rb +41 -0
  11. data/app/controllers/spree/api/v3/base_controller.rb +42 -0
  12. data/app/controllers/spree/api/v3/resource_controller.rb +210 -0
  13. data/app/controllers/spree/api/v3/store/auth_controller.rb +140 -0
  14. data/app/controllers/spree/api/v3/store/base_controller.rb +12 -0
  15. data/app/controllers/spree/api/v3/store/cart_controller.rb +82 -0
  16. data/app/controllers/spree/api/v3/store/countries_controller.rb +31 -0
  17. data/app/controllers/spree/api/v3/store/currencies_controller.rb +18 -0
  18. data/app/controllers/spree/api/v3/store/customer/account_controller.rb +38 -0
  19. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +85 -0
  20. data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +31 -0
  21. data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +36 -0
  22. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +35 -0
  23. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +83 -0
  24. data/app/controllers/spree/api/v3/store/digitals_controller.rb +37 -0
  25. data/app/controllers/spree/api/v3/store/locales_controller.rb +24 -0
  26. data/app/controllers/spree/api/v3/store/orders/coupon_codes_controller.rb +68 -0
  27. data/app/controllers/spree/api/v3/store/orders/line_items_controller.rb +87 -0
  28. data/app/controllers/spree/api/v3/store/orders/payment_methods_controller.rb +43 -0
  29. data/app/controllers/spree/api/v3/store/orders/payment_sessions_controller.rb +96 -0
  30. data/app/controllers/spree/api/v3/store/orders/payments_controller.rb +45 -0
  31. data/app/controllers/spree/api/v3/store/orders/shipments_controller.rb +53 -0
  32. data/app/controllers/spree/api/v3/store/orders/store_credits_controller.rb +42 -0
  33. data/app/controllers/spree/api/v3/store/orders_controller.rb +125 -0
  34. data/app/controllers/spree/api/v3/store/products/filters_controller.rb +38 -0
  35. data/app/controllers/spree/api/v3/store/products_controller.rb +74 -0
  36. data/app/controllers/spree/api/v3/store/resource_controller.rb +12 -0
  37. data/app/controllers/spree/api/v3/store/stores_controller.rb +26 -0
  38. data/app/controllers/spree/api/v3/store/taxonomies_controller.rb +19 -0
  39. data/app/controllers/spree/api/v3/store/taxons/products_controller.rb +37 -0
  40. data/app/controllers/spree/api/v3/store/taxons_controller.rb +34 -0
  41. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +33 -0
  42. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +41 -0
  43. data/app/serializers/spree/api/v3/address_serializer.rb +22 -0
  44. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +43 -0
  45. data/app/serializers/spree/api/v3/admin/metafield_serializer.rb +15 -0
  46. data/app/serializers/spree/api/v3/admin/order_serializer.rb +39 -0
  47. data/app/serializers/spree/api/v3/admin/price_serializer.rb +21 -0
  48. data/app/serializers/spree/api/v3/admin/product_serializer.rb +47 -0
  49. data/app/serializers/spree/api/v3/admin/taxon_serializer.rb +20 -0
  50. data/app/serializers/spree/api/v3/admin/taxonomy_serializer.rb +15 -0
  51. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +44 -0
  52. data/app/serializers/spree/api/v3/asset_serializer.rb +20 -0
  53. data/app/serializers/spree/api/v3/base_serializer.rb +98 -0
  54. data/app/serializers/spree/api/v3/country_serializer.rb +35 -0
  55. data/app/serializers/spree/api/v3/credit_card_serializer.rb +12 -0
  56. data/app/serializers/spree/api/v3/currency_serializer.rb +14 -0
  57. data/app/serializers/spree/api/v3/customer_return_serializer.rb +17 -0
  58. data/app/serializers/spree/api/v3/customer_serializer.rb +19 -0
  59. data/app/serializers/spree/api/v3/digital_link_serializer.rb +30 -0
  60. data/app/serializers/spree/api/v3/digital_serializer.rb +17 -0
  61. data/app/serializers/spree/api/v3/export_serializer.rb +19 -0
  62. data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +28 -0
  63. data/app/serializers/spree/api/v3/gift_card_serializer.rb +78 -0
  64. data/app/serializers/spree/api/v3/image_serializer.rb +43 -0
  65. data/app/serializers/spree/api/v3/import_row_serializer.rb +24 -0
  66. data/app/serializers/spree/api/v3/import_serializer.rb +32 -0
  67. data/app/serializers/spree/api/v3/invitation_serializer.rb +47 -0
  68. data/app/serializers/spree/api/v3/line_item_serializer.rb +48 -0
  69. data/app/serializers/spree/api/v3/locale_serializer.rb +14 -0
  70. data/app/serializers/spree/{v2/storefront → api/v3}/metafield_serializer.rb +5 -3
  71. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +27 -0
  72. data/app/serializers/spree/api/v3/option_type_serializer.rb +11 -0
  73. data/app/serializers/spree/api/v3/option_value_serializer.rb +24 -0
  74. data/app/serializers/spree/api/v3/order_promotion_serializer.rb +16 -0
  75. data/app/serializers/spree/api/v3/order_serializer.rb +39 -0
  76. data/app/serializers/spree/api/v3/payment_method_serializer.rb +15 -0
  77. data/app/serializers/spree/api/v3/payment_serializer.rb +54 -0
  78. data/app/serializers/spree/api/v3/payment_session_serializer.rb +32 -0
  79. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +33 -0
  80. data/app/serializers/spree/api/v3/payment_source_serializer.rb +18 -0
  81. data/app/serializers/spree/api/v3/post_category_serializer.rb +13 -0
  82. data/app/serializers/spree/api/v3/post_serializer.rb +25 -0
  83. data/app/serializers/spree/api/v3/price_serializer.rb +34 -0
  84. data/app/serializers/spree/api/v3/product_serializer.rb +108 -0
  85. data/app/serializers/spree/api/v3/promotion_serializer.rb +28 -0
  86. data/app/serializers/spree/api/v3/refund_serializer.rb +31 -0
  87. data/app/serializers/spree/api/v3/reimbursement_serializer.rb +28 -0
  88. data/app/serializers/spree/api/v3/report_serializer.rb +29 -0
  89. data/app/serializers/spree/api/v3/return_authorization_serializer.rb +31 -0
  90. data/app/serializers/spree/api/v3/return_item_serializer.rb +53 -0
  91. data/app/serializers/spree/api/v3/shipment_serializer.rb +19 -0
  92. data/app/serializers/spree/api/v3/shipping_method_serializer.rb +11 -0
  93. data/app/serializers/spree/api/v3/shipping_rate_serializer.rb +26 -0
  94. data/app/serializers/spree/api/v3/state_serializer.rb +14 -0
  95. data/app/serializers/spree/api/v3/stock_item_serializer.rb +23 -0
  96. data/app/serializers/spree/api/v3/stock_location_serializer.rb +18 -0
  97. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +24 -0
  98. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +25 -0
  99. data/app/serializers/spree/api/v3/store_credit_serializer.rb +37 -0
  100. data/app/serializers/spree/api/v3/store_serializer.rb +38 -0
  101. data/app/serializers/spree/api/v3/taxon_serializer.rb +78 -0
  102. data/app/serializers/spree/api/v3/taxonomy_serializer.rb +33 -0
  103. data/app/serializers/spree/api/v3/variant_serializer.rb +86 -0
  104. data/app/serializers/spree/api/v3/wished_item_serializer.rb +22 -0
  105. data/app/serializers/spree/api/v3/wishlist_serializer.rb +25 -0
  106. data/app/services/spree/api/v3/filters_aggregator.rb +156 -0
  107. data/app/services/spree/api/v3/orders/update.rb +103 -0
  108. data/config/initializers/alba.rb +5 -0
  109. data/config/initializers/pagy.rb +10 -0
  110. data/config/initializers/typelizer.rb +25 -0
  111. data/config/locales/en.yml +1 -0
  112. data/config/routes.rb +63 -196
  113. data/lib/spree/api/dependencies.rb +68 -0
  114. data/lib/spree/api/engine.rb +0 -5
  115. data/lib/spree/api/openapi/schema_helper.rb +177 -0
  116. data/lib/spree/api/testing_support/factories.rb +1 -3
  117. data/lib/spree/api/testing_support/v3/base.rb +118 -0
  118. data/lib/spree/api.rb +7 -4
  119. metadata +131 -264
  120. data/LICENSE.md +0 -57
  121. data/app/controllers/concerns/spree/api/v2/caching.rb +0 -40
  122. data/app/controllers/concerns/spree/api/v2/coupon_codes_helper.rb +0 -29
  123. data/app/controllers/concerns/spree/api/v2/number_resource.rb +0 -11
  124. data/app/controllers/concerns/spree/api/v2/platform/nested_set_reposition_concern.rb +0 -37
  125. data/app/controllers/concerns/spree/api/v2/platform/promotion_calculator_params.rb +0 -17
  126. data/app/controllers/concerns/spree/api/v2/platform/promotion_rule_params.rb +0 -16
  127. data/app/controllers/concerns/spree/api/v2/product_list_includes.rb +0 -21
  128. data/app/controllers/concerns/spree/api/v2/storefront/metadata_controller_concern.rb +0 -18
  129. data/app/controllers/concerns/spree/api/v2/storefront/order_concern.rb +0 -49
  130. data/app/controllers/spree/api/v2/base_controller.rb +0 -233
  131. data/app/controllers/spree/api/v2/data_feeds/google_controller.rb +0 -24
  132. data/app/controllers/spree/api/v2/platform/addresses_controller.rb +0 -23
  133. data/app/controllers/spree/api/v2/platform/adjustments_controller.rb +0 -23
  134. data/app/controllers/spree/api/v2/platform/classifications_controller.rb +0 -26
  135. data/app/controllers/spree/api/v2/platform/countries_controller.rb +0 -23
  136. data/app/controllers/spree/api/v2/platform/data_feeds_controller.rb +0 -19
  137. data/app/controllers/spree/api/v2/platform/digital_links_controller.rb +0 -29
  138. data/app/controllers/spree/api/v2/platform/digitals_controller.rb +0 -23
  139. data/app/controllers/spree/api/v2/platform/gift_cards_controller.rb +0 -23
  140. data/app/controllers/spree/api/v2/platform/line_items_controller.rb +0 -63
  141. data/app/controllers/spree/api/v2/platform/option_types_controller.rb +0 -19
  142. data/app/controllers/spree/api/v2/platform/option_values_controller.rb +0 -23
  143. data/app/controllers/spree/api/v2/platform/orders_controller.rb +0 -167
  144. data/app/controllers/spree/api/v2/platform/payment_methods_controller.rb +0 -31
  145. data/app/controllers/spree/api/v2/platform/payments_controller.rb +0 -21
  146. data/app/controllers/spree/api/v2/platform/products_controller.rb +0 -41
  147. data/app/controllers/spree/api/v2/platform/promotion_actions_controller.rb +0 -34
  148. data/app/controllers/spree/api/v2/platform/promotion_categories_controller.rb +0 -23
  149. data/app/controllers/spree/api/v2/platform/promotion_rules_controller.rb +0 -29
  150. data/app/controllers/spree/api/v2/platform/promotions_controller.rb +0 -35
  151. data/app/controllers/spree/api/v2/platform/resource_controller.rb +0 -154
  152. data/app/controllers/spree/api/v2/platform/roles_controller.rb +0 -19
  153. data/app/controllers/spree/api/v2/platform/shipments_controller.rb +0 -147
  154. data/app/controllers/spree/api/v2/platform/shipping_categories_controller.rb +0 -19
  155. data/app/controllers/spree/api/v2/platform/shipping_methods_controller.rb +0 -28
  156. data/app/controllers/spree/api/v2/platform/states_controller.rb +0 -23
  157. data/app/controllers/spree/api/v2/platform/stock_items_controller.rb +0 -23
  158. data/app/controllers/spree/api/v2/platform/stock_locations_controller.rb +0 -23
  159. data/app/controllers/spree/api/v2/platform/store_credit_categories_controller.rb +0 -19
  160. data/app/controllers/spree/api/v2/platform/store_credit_types_controller.rb +0 -19
  161. data/app/controllers/spree/api/v2/platform/store_credits_controller.rb +0 -23
  162. data/app/controllers/spree/api/v2/platform/tax_categories_controller.rb +0 -23
  163. data/app/controllers/spree/api/v2/platform/tax_rates_controller.rb +0 -27
  164. data/app/controllers/spree/api/v2/platform/taxonomies_controller.rb +0 -23
  165. data/app/controllers/spree/api/v2/platform/taxons_controller.rb +0 -59
  166. data/app/controllers/spree/api/v2/platform/users_controller.rb +0 -37
  167. data/app/controllers/spree/api/v2/platform/variants_controller.rb +0 -23
  168. data/app/controllers/spree/api/v2/platform/wished_items_controller.rb +0 -23
  169. data/app/controllers/spree/api/v2/platform/wishlists_controller.rb +0 -23
  170. data/app/controllers/spree/api/v2/platform/zones_controller.rb +0 -23
  171. data/app/controllers/spree/api/v2/resource_controller.rb +0 -79
  172. data/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb +0 -77
  173. data/app/controllers/spree/api/v2/storefront/account/credit_cards_controller.rb +0 -52
  174. data/app/controllers/spree/api/v2/storefront/account/orders_controller.rb +0 -50
  175. data/app/controllers/spree/api/v2/storefront/account_controller.rb +0 -52
  176. data/app/controllers/spree/api/v2/storefront/cart_controller.rb +0 -246
  177. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +0 -183
  178. data/app/controllers/spree/api/v2/storefront/countries_controller.rb +0 -57
  179. data/app/controllers/spree/api/v2/storefront/digitals_controller.rb +0 -58
  180. data/app/controllers/spree/api/v2/storefront/order_status_controller.rb +0 -34
  181. data/app/controllers/spree/api/v2/storefront/policies_controller.rb +0 -31
  182. data/app/controllers/spree/api/v2/storefront/post_categories_controller.rb +0 -35
  183. data/app/controllers/spree/api/v2/storefront/posts_controller.rb +0 -51
  184. data/app/controllers/spree/api/v2/storefront/products_controller.rb +0 -66
  185. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +0 -27
  186. data/app/controllers/spree/api/v2/storefront/taxons_controller.rb +0 -51
  187. data/app/controllers/spree/api/v2/storefront/variants_controller.rb +0 -41
  188. data/app/controllers/spree/api/v2/storefront/wishlists_controller.rb +0 -214
  189. data/app/helpers/spree/api/v2/collection_options_helpers.rb +0 -46
  190. data/app/helpers/spree/api/v2/display_money_helper.rb +0 -63
  191. data/app/helpers/spree/api/v2/store_media_serializer_images_concern.rb +0 -30
  192. data/app/models/concerns/spree/user_api_authentication.rb +0 -19
  193. data/app/models/concerns/spree/user_api_methods.rb +0 -7
  194. data/app/models/spree/oauth_access_grant.rb +0 -7
  195. data/app/models/spree/oauth_access_token.rb +0 -7
  196. data/app/models/spree/oauth_application.rb +0 -22
  197. data/app/paginators/spree/api/paginate.rb +0 -68
  198. data/app/presenters/spree/api/products/filters_presenter.rb +0 -39
  199. data/app/serializers/concerns/spree/api/v2/image_transformation_concern.rb +0 -15
  200. data/app/serializers/concerns/spree/api/v2/public_metafields_concern.rb +0 -15
  201. data/app/serializers/concerns/spree/api/v2/resource_serializer_concern.rb +0 -42
  202. data/app/serializers/concerns/spree/api/v2/taxon_image_transformation_concern.rb +0 -15
  203. data/app/serializers/spree/api/v2/base_serializer.rb +0 -43
  204. data/app/serializers/spree/api/v2/platform/address_serializer.rb +0 -15
  205. data/app/serializers/spree/api/v2/platform/adjustment_serializer.rb +0 -20
  206. data/app/serializers/spree/api/v2/platform/admin_user_serializer.rb +0 -11
  207. data/app/serializers/spree/api/v2/platform/asset_serializer.rb +0 -13
  208. data/app/serializers/spree/api/v2/platform/base_serializer.rb +0 -10
  209. data/app/serializers/spree/api/v2/platform/calculator_serializer.rb +0 -17
  210. data/app/serializers/spree/api/v2/platform/classification_serializer.rb +0 -14
  211. data/app/serializers/spree/api/v2/platform/country_serializer.rb +0 -13
  212. data/app/serializers/spree/api/v2/platform/credit_card_serializer.rb +0 -14
  213. data/app/serializers/spree/api/v2/platform/customer_return_serializer.rb +0 -17
  214. data/app/serializers/spree/api/v2/platform/data_feed_serializer.rb +0 -13
  215. data/app/serializers/spree/api/v2/platform/digital_link_serializer.rb +0 -16
  216. data/app/serializers/spree/api/v2/platform/digital_serializer.rb +0 -29
  217. data/app/serializers/spree/api/v2/platform/gift_card_serializer.rb +0 -17
  218. data/app/serializers/spree/api/v2/platform/image_serializer.rb +0 -17
  219. data/app/serializers/spree/api/v2/platform/inventory_unit_serializer.rb +0 -19
  220. data/app/serializers/spree/api/v2/platform/line_item_serializer.rb +0 -19
  221. data/app/serializers/spree/api/v2/platform/log_entry_serializer.rb +0 -13
  222. data/app/serializers/spree/api/v2/platform/metafield_serializer.rb +0 -21
  223. data/app/serializers/spree/api/v2/platform/option_type_serializer.rb +0 -13
  224. data/app/serializers/spree/api/v2/platform/option_value_serializer.rb +0 -13
  225. data/app/serializers/spree/api/v2/platform/order_promotion_serializer.rb +0 -14
  226. data/app/serializers/spree/api/v2/platform/order_serializer.rb +0 -31
  227. data/app/serializers/spree/api/v2/platform/payment_capture_event_serializer.rb +0 -13
  228. data/app/serializers/spree/api/v2/platform/payment_method_serializer.rb +0 -18
  229. data/app/serializers/spree/api/v2/platform/payment_serializer.rb +0 -22
  230. data/app/serializers/spree/api/v2/platform/payment_source_serializer.rb +0 -12
  231. data/app/serializers/spree/api/v2/platform/price_serializer.rb +0 -19
  232. data/app/serializers/spree/api/v2/platform/product_property_serializer.rb +0 -11
  233. data/app/serializers/spree/api/v2/platform/product_serializer.rb +0 -90
  234. data/app/serializers/spree/api/v2/platform/promotion_action_line_item_serializer.rb +0 -14
  235. data/app/serializers/spree/api/v2/platform/promotion_action_serializer.rb +0 -19
  236. data/app/serializers/spree/api/v2/platform/promotion_category_serializer.rb +0 -13
  237. data/app/serializers/spree/api/v2/platform/promotion_rule_serializer.rb +0 -21
  238. data/app/serializers/spree/api/v2/platform/promotion_serializer.rb +0 -17
  239. data/app/serializers/spree/api/v2/platform/property_serializer.rb +0 -11
  240. data/app/serializers/spree/api/v2/platform/prototype_serializer.rb +0 -15
  241. data/app/serializers/spree/api/v2/platform/refund_reason_serializer.rb +0 -11
  242. data/app/serializers/spree/api/v2/platform/refund_serializer.rb +0 -17
  243. data/app/serializers/spree/api/v2/platform/reimbursement_credit_serializer.rb +0 -10
  244. data/app/serializers/spree/api/v2/platform/reimbursement_serializer.rb +0 -19
  245. data/app/serializers/spree/api/v2/platform/reimbursement_type_serializer.rb +0 -11
  246. data/app/serializers/spree/api/v2/platform/return_authorization_reason_serializer.rb +0 -11
  247. data/app/serializers/spree/api/v2/platform/return_authorization_serializer.rb +0 -17
  248. data/app/serializers/spree/api/v2/platform/return_item_serializer.rb +0 -16
  249. data/app/serializers/spree/api/v2/platform/role_serializer.rb +0 -11
  250. data/app/serializers/spree/api/v2/platform/shipment_serializer.rb +0 -22
  251. data/app/serializers/spree/api/v2/platform/shipping_category_serializer.rb +0 -11
  252. data/app/serializers/spree/api/v2/platform/shipping_method_serializer.rb +0 -16
  253. data/app/serializers/spree/api/v2/platform/shipping_rate_serializer.rb +0 -15
  254. data/app/serializers/spree/api/v2/platform/state_change_serializer.rb +0 -13
  255. data/app/serializers/spree/api/v2/platform/state_serializer.rb +0 -13
  256. data/app/serializers/spree/api/v2/platform/stock_item_serializer.rb +0 -18
  257. data/app/serializers/spree/api/v2/platform/stock_location_serializer.rb +0 -14
  258. data/app/serializers/spree/api/v2/platform/stock_movement_serializer.rb +0 -11
  259. data/app/serializers/spree/api/v2/platform/stock_transfer_serializer.rb +0 -15
  260. data/app/serializers/spree/api/v2/platform/store_credit_category_serializer.rb +0 -12
  261. data/app/serializers/spree/api/v2/platform/store_credit_event_serializer.rb +0 -14
  262. data/app/serializers/spree/api/v2/platform/store_credit_serializer.rb +0 -18
  263. data/app/serializers/spree/api/v2/platform/store_credit_type_serializer.rb +0 -12
  264. data/app/serializers/spree/api/v2/platform/store_serializer.rb +0 -14
  265. data/app/serializers/spree/api/v2/platform/tax_category_serializer.rb +0 -13
  266. data/app/serializers/spree/api/v2/platform/tax_rate_serializer.rb +0 -14
  267. data/app/serializers/spree/api/v2/platform/taxon_image_serializer.rb +0 -15
  268. data/app/serializers/spree/api/v2/platform/taxon_serializer.rb +0 -47
  269. data/app/serializers/spree/api/v2/platform/taxonomy_serializer.rb +0 -14
  270. data/app/serializers/spree/api/v2/platform/user_serializer.rb +0 -37
  271. data/app/serializers/spree/api/v2/platform/variant_serializer.rb +0 -66
  272. data/app/serializers/spree/api/v2/platform/wished_item_serializer.rb +0 -29
  273. data/app/serializers/spree/api/v2/platform/wishlist_serializer.rb +0 -19
  274. data/app/serializers/spree/api/v2/platform/zone_member_serializer.rb +0 -13
  275. data/app/serializers/spree/api/v2/platform/zone_serializer.rb +0 -13
  276. data/app/serializers/spree/v2/storefront/address_serializer.rb +0 -22
  277. data/app/serializers/spree/v2/storefront/base_serializer.rb +0 -10
  278. data/app/serializers/spree/v2/storefront/cart_serializer.rb +0 -67
  279. data/app/serializers/spree/v2/storefront/country_serializer.rb +0 -24
  280. data/app/serializers/spree/v2/storefront/credit_card_serializer.rb +0 -15
  281. data/app/serializers/spree/v2/storefront/digital_link_serializer.rb +0 -11
  282. data/app/serializers/spree/v2/storefront/estimated_shipping_rate_serializer.rb +0 -35
  283. data/app/serializers/spree/v2/storefront/gift_card_serializer.rb +0 -16
  284. data/app/serializers/spree/v2/storefront/image_serializer.rb +0 -13
  285. data/app/serializers/spree/v2/storefront/line_item_serializer.rb +0 -23
  286. data/app/serializers/spree/v2/storefront/option_type_serializer.rb +0 -15
  287. data/app/serializers/spree/v2/storefront/option_value_serializer.rb +0 -13
  288. data/app/serializers/spree/v2/storefront/order_promotion_serializer.rb +0 -14
  289. data/app/serializers/spree/v2/storefront/order_serializer.rb +0 -11
  290. data/app/serializers/spree/v2/storefront/payment_method_serializer.rb +0 -17
  291. data/app/serializers/spree/v2/storefront/payment_serializer.rb +0 -20
  292. data/app/serializers/spree/v2/storefront/payment_source_serializer.rb +0 -12
  293. data/app/serializers/spree/v2/storefront/policy_serializer.rb +0 -19
  294. data/app/serializers/spree/v2/storefront/post_category_serializer.rb +0 -23
  295. data/app/serializers/spree/v2/storefront/post_serializer.rb +0 -51
  296. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +0 -19
  297. data/app/serializers/spree/v2/storefront/product_serializer.rb +0 -92
  298. data/app/serializers/spree/v2/storefront/shipment_serializer.rb +0 -26
  299. data/app/serializers/spree/v2/storefront/shipping_category_serializer.rb +0 -10
  300. data/app/serializers/spree/v2/storefront/shipping_method_serializer.rb +0 -12
  301. data/app/serializers/spree/v2/storefront/shipping_rate_serializer.rb +0 -26
  302. data/app/serializers/spree/v2/storefront/state_serializer.rb +0 -11
  303. data/app/serializers/spree/v2/storefront/stock_location_serializer.rb +0 -11
  304. data/app/serializers/spree/v2/storefront/store_credit_category_serializer.rb +0 -11
  305. data/app/serializers/spree/v2/storefront/store_credit_event_serializer.rb +0 -15
  306. data/app/serializers/spree/v2/storefront/store_credit_serializer.rb +0 -19
  307. data/app/serializers/spree/v2/storefront/store_credit_type_serializer.rb +0 -11
  308. data/app/serializers/spree/v2/storefront/store_serializer.rb +0 -18
  309. data/app/serializers/spree/v2/storefront/taxon_image_serializer.rb +0 -13
  310. data/app/serializers/spree/v2/storefront/taxon_serializer.rb +0 -55
  311. data/app/serializers/spree/v2/storefront/taxonomy_serializer.rb +0 -13
  312. data/app/serializers/spree/v2/storefront/user_serializer.rb +0 -33
  313. data/app/serializers/spree/v2/storefront/variant_serializer.rb +0 -58
  314. data/app/serializers/spree/v2/storefront/wished_item_serializer.rb +0 -29
  315. data/app/serializers/spree/v2/storefront/wishlist_serializer.rb +0 -17
  316. data/config/initializers/doorkeeper.rb +0 -50
  317. data/config/initializers/json_api_mime_types.rb +0 -8
  318. data/config/initializers/user_class_extensions.rb +0 -7
  319. data/db/migrate/20100107141738_add_api_key_to_spree_users.rb +0 -7
  320. data/db/migrate/20120411123334_resize_api_key_field.rb +0 -7
  321. data/db/migrate/20120530054546_rename_api_key_to_spree_api_key.rb +0 -7
  322. data/db/migrate/20131017162334_add_index_to_user_spree_api_key.rb +0 -7
  323. data/db/migrate/20180320110726_create_doorkeeper_tables.rb +0 -69
  324. data/db/migrate/20210727102516_change_integer_id_columns_type.rb +0 -9
  325. data/db/migrate/20210919183228_enable_polymorphic_resource_owner.rb +0 -21
  326. data/lib/generators/spree/api/install/install_generator.rb +0 -24
  327. data/lib/spree/api/testing_support/factories/oauth_application_factory.rb +0 -6
  328. data/lib/spree/api/testing_support/serializers.rb +0 -15
  329. data/lib/spree/api/testing_support/v2/base.rb +0 -13
  330. data/lib/spree/api/testing_support/v2/current_order.rb +0 -116
  331. data/lib/spree/api/testing_support/v2/platform_contexts.rb +0 -272
  332. data/lib/spree/api/testing_support/v2/serializers_params.rb +0 -16
@@ -0,0 +1,43 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Orders
6
+ class PaymentMethodsController < Store::BaseController
7
+ include Spree::Api::V3::OrderConcern
8
+
9
+ before_action :set_parent
10
+
11
+ # GET /api/v3/store/orders/:order_id/payment_methods
12
+ # Returns available payment methods for the current order
13
+ def index
14
+ payment_methods = @parent.collect_frontend_payment_methods
15
+ render json: {
16
+ data: serialize_collection(payment_methods),
17
+ meta: { count: payment_methods.size }
18
+ }
19
+ end
20
+
21
+ protected
22
+
23
+ def serializer_class
24
+ Spree.api.payment_method_serializer
25
+ end
26
+
27
+ def serialize_collection(collection)
28
+ collection.map { |item| serializer_class.new(item, params: serializer_params).to_h }
29
+ end
30
+
31
+ def serializer_params
32
+ {
33
+ currency: current_currency,
34
+ store: current_store,
35
+ user: current_user
36
+ }
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,96 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Orders
6
+ class PaymentSessionsController < ResourceController
7
+ include Spree::Api::V3::OrderConcern
8
+
9
+ skip_before_action :set_resource
10
+ before_action :authorize_order_access!
11
+ before_action :set_payment_session, only: [:show, :update, :complete]
12
+
13
+ # POST /api/v3/store/orders/:order_id/payment_sessions
14
+ def create
15
+ payment_method = current_store.payment_methods.find_by_prefix_id!(permitted_params[:payment_method_id])
16
+
17
+ @payment_session = payment_method.create_payment_session(
18
+ order: @parent,
19
+ amount: permitted_params[:amount],
20
+ external_data: permitted_params[:external_data] || {}
21
+ )
22
+
23
+ if @payment_session.persisted?
24
+ render json: serialize_resource(@payment_session), status: :created
25
+ else
26
+ render_errors(@payment_session.errors)
27
+ end
28
+ end
29
+
30
+ # GET /api/v3/store/orders/:order_id/payment_sessions/:id
31
+ def show
32
+ render json: serialize_resource(@payment_session)
33
+ end
34
+
35
+ # PATCH /api/v3/store/orders/:order_id/payment_sessions/:id
36
+ def update
37
+ @payment_session.payment_method.update_payment_session(
38
+ payment_session: @payment_session,
39
+ amount: permitted_params[:amount],
40
+ external_data: permitted_params[:external_data] || {}
41
+ )
42
+
43
+ if @payment_session.errors.empty?
44
+ render json: serialize_resource(@payment_session.reload)
45
+ else
46
+ render_errors(@payment_session.errors)
47
+ end
48
+ end
49
+
50
+ # PATCH /api/v3/store/orders/:order_id/payment_sessions/:id/complete
51
+ def complete
52
+ @payment_session.payment_method.complete_payment_session(
53
+ payment_session: @payment_session,
54
+ params: complete_params
55
+ )
56
+
57
+ if @payment_session.errors.empty?
58
+ render json: serialize_resource(@payment_session.reload)
59
+ else
60
+ render_errors(@payment_session.errors)
61
+ end
62
+ end
63
+
64
+ protected
65
+
66
+ def parent_association
67
+ :payment_sessions
68
+ end
69
+
70
+ def model_class
71
+ Spree::PaymentSession
72
+ end
73
+
74
+ def serializer_class
75
+ Spree.api.payment_session_serializer
76
+ end
77
+
78
+ def permitted_params
79
+ params.permit(Spree::PermittedAttributes.payment_session_attributes)
80
+ end
81
+
82
+ def complete_params
83
+ params.permit(:session_result, { external_data: {} })
84
+ end
85
+
86
+ private
87
+
88
+ def set_payment_session
89
+ @payment_session = @parent.payment_sessions.find_by_prefix_id!(params[:id])
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,45 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Orders
6
+ class PaymentsController < Store::BaseController
7
+ include Spree::Api::V3::OrderConcern
8
+ include Spree::Api::V3::ResourceSerializer
9
+
10
+ before_action :set_parent
11
+ before_action :set_payment, only: [:show]
12
+
13
+ # GET /api/v3/store/orders/:order_id/payments
14
+ def index
15
+ payments = @parent.payments.includes(:payment_method)
16
+ render json: {
17
+ data: serialize_payments(payments),
18
+ meta: {}
19
+ }
20
+ end
21
+
22
+ # GET /api/v3/store/orders/:order_id/payments/:id
23
+ def show
24
+ render json: serialize_resource(@payment)
25
+ end
26
+
27
+ private
28
+
29
+ def set_payment
30
+ @payment = @parent.payments.find_by_prefix_id!(params[:id])
31
+ end
32
+
33
+ def serializer_class
34
+ Spree.api.payment_serializer
35
+ end
36
+
37
+ def serialize_payments(payments)
38
+ payments.map { |p| serializer_class.new(p, params: serializer_params).to_h }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,53 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Orders
6
+ class ShipmentsController < ResourceController
7
+ include Spree::Api::V3::OrderConcern
8
+
9
+ before_action :authorize_order_access!
10
+ skip_before_action :set_resource
11
+ before_action :set_shipment, only: [:show, :update]
12
+
13
+ # PATCH /api/v3/store/orders/:order_id/shipments/:id
14
+ def update
15
+ if permitted_params[:selected_shipping_rate_id].present?
16
+ shipping_rate = @resource.shipping_rates.find_by_prefix_id!(permitted_params[:selected_shipping_rate_id])
17
+ @resource.selected_shipping_rate_id = shipping_rate.id
18
+ @resource.save!
19
+ end
20
+
21
+ render_order
22
+ end
23
+
24
+ protected
25
+
26
+ def parent_association
27
+ :shipments
28
+ end
29
+
30
+ def model_class
31
+ Spree::Shipment
32
+ end
33
+
34
+ def serializer_class
35
+ Spree.api.shipment_serializer
36
+ end
37
+
38
+ def permitted_params
39
+ params.permit(:selected_shipping_rate_id)
40
+ end
41
+
42
+ private
43
+
44
+ # Find shipment without additional authorization - order access already verified
45
+ def set_shipment
46
+ @resource = scope.find_by_prefix_id!(params[:id])
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,42 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Orders
6
+ class StoreCreditsController < Store::BaseController
7
+ include Spree::Api::V3::OrderConcern
8
+
9
+ before_action :require_authentication!
10
+ before_action :set_parent
11
+ before_action :authorize_order_access!
12
+
13
+ # POST /api/v3/store/orders/:order_id/store_credits
14
+ def create
15
+ result = Spree.checkout_add_store_credit_service.call(
16
+ order: @parent,
17
+ amount: params[:amount].try(:to_f)
18
+ )
19
+
20
+ if result.success?
21
+ render_order
22
+ else
23
+ render_service_error(result.error)
24
+ end
25
+ end
26
+
27
+ # DELETE /api/v3/store/orders/:order_id/store_credits
28
+ def destroy
29
+ result = Spree.checkout_remove_store_credit_service.call(order: @parent)
30
+
31
+ if result.success?
32
+ render_order
33
+ else
34
+ render_service_error(result.error)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,125 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class OrdersController < ResourceController
6
+ include Spree::Api::V3::OrderConcern
7
+
8
+ # Skip base controller's set_resource and define our own complete list
9
+ skip_before_action :set_resource
10
+ before_action :set_resource, only: [:show, :update, :next, :advance, :complete]
11
+
12
+ # PATCH /api/v3/store/orders/:id
13
+ #
14
+ # Accepts flat parameters:
15
+ # {
16
+ # "email": "customer@example.com",
17
+ # "currency": "EUR",
18
+ # "ship_address": { "firstname": "John", "country_iso": "US", ... },
19
+ # "bill_address": { "firstname": "John", "country_iso": "US", ... }
20
+ # }
21
+ #
22
+ def update
23
+ result = Spree::Api::V3::Orders::Update.call(
24
+ order: @order,
25
+ params: order_params
26
+ )
27
+
28
+ if result.success?
29
+ render json: serialize_resource(@order.reload)
30
+ else
31
+ render_service_error(result.error, code: ERROR_CODES[:validation_error])
32
+ end
33
+ end
34
+
35
+ # PATCH /api/v3/store/orders/:id/next
36
+ def next
37
+ result = Spree.checkout_next_service.call(order: @order)
38
+
39
+ if result.success?
40
+ render json: serialize_resource(@order)
41
+ else
42
+ render_service_error(result.error, code: ERROR_CODES[:order_cannot_transition])
43
+ end
44
+ end
45
+
46
+ # PATCH /api/v3/store/orders/:id/advance
47
+ def advance
48
+ result = Spree.checkout_advance_service.call(order: @order)
49
+
50
+ if result.success?
51
+ render json: serialize_resource(@order)
52
+ else
53
+ render_service_error(result.error, code: ERROR_CODES[:order_cannot_transition])
54
+ end
55
+ end
56
+
57
+ # PATCH /api/v3/store/orders/:id/complete
58
+ def complete
59
+ result = Spree.checkout_complete_service.call(order: @order)
60
+
61
+ if result.success?
62
+ render json: serialize_resource(@order)
63
+ else
64
+ render_service_error(result.error, code: ERROR_CODES[:order_already_completed])
65
+ end
66
+ end
67
+
68
+ protected
69
+
70
+ # Override scope to avoid accessible_by (Order permissions use blocks)
71
+ def scope
72
+ order_scope
73
+ end
74
+
75
+ # Override set_resource to scope lookup by user or order token (IDOR prevention)
76
+ def set_resource
77
+ @order = order_scope.find_by_prefix_id!(params[:id])
78
+ @resource = @order
79
+ authorize_resource!(@order)
80
+ end
81
+
82
+ # override authorize_resource! to pass the order token
83
+ # Maps custom checkout actions to appropriate permissions
84
+ def authorize_resource!(resource = @resource, action = action_name.to_sym)
85
+ mapped_action = case action
86
+ when :next, :advance, :complete
87
+ :update # Checkout actions require update (non-completed order)
88
+ else
89
+ action
90
+ end
91
+ authorize!(mapped_action, resource, order_token)
92
+ end
93
+
94
+ def model_class
95
+ Spree::Order
96
+ end
97
+
98
+ def serializer_class
99
+ Spree.api.order_serializer
100
+ end
101
+
102
+ def order_params
103
+ params.permit(
104
+ :email,
105
+ :currency,
106
+ :special_instructions,
107
+ :ship_address_id,
108
+ :bill_address_id,
109
+ ship_address: address_params,
110
+ bill_address: address_params
111
+ )
112
+ end
113
+
114
+ def address_params
115
+ [
116
+ :id, :firstname, :lastname, :address1, :address2,
117
+ :city, :zipcode, :phone, :company,
118
+ :country_iso, :state_abbr, :state_name
119
+ ]
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,38 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Products
6
+ class FiltersController < Store::BaseController
7
+ def index
8
+ aggregator = Spree::Api::V3::FiltersAggregator.new(
9
+ scope: filters_scope,
10
+ currency: current_currency,
11
+ taxon: taxon
12
+ )
13
+ render json: aggregator.call
14
+ end
15
+
16
+ private
17
+
18
+ # Build scope from taxon and/or ransack params
19
+ # @return [ActiveRecord::Relation]
20
+ def filters_scope
21
+ scope = current_store.products.active(current_currency)
22
+ scope = scope.in_taxon(taxon) if taxon.present?
23
+ scope = scope.ransack(params[:q]).result if params[:q].present?
24
+ scope.accessible_by(current_ability, :show)
25
+ end
26
+
27
+ # Fetches taxon from params
28
+ # @param [String] taxon_id
29
+ # @return [Spree::Taxon]
30
+ def taxon
31
+ @taxon ||= params[:taxon_id].present? ? current_store.taxons.find_by_param(params[:taxon_id]) : nil
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,74 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class ProductsController < ResourceController
6
+ SORT_OPTIONS = {
7
+ 'price-low-to-high' => :ascend_by_price,
8
+ 'price-high-to-low' => :descend_by_price
9
+ }.freeze
10
+
11
+ protected
12
+
13
+ def model_class
14
+ Spree::Product
15
+ end
16
+
17
+ def serializer_class
18
+ Spree.api.product_serializer
19
+ end
20
+
21
+ # Find product by slug or prefixed ID with i18n scope for SEO-friendly URLs
22
+ # Falls back to default locale if product is not found in the current locale
23
+ # @return [Spree::Product]
24
+ def find_resource
25
+ id = params[:id]
26
+ if id.to_s.start_with?('prod_')
27
+ scope.find_by_prefix_id!(id)
28
+ else
29
+ find_with_fallback_default_locale { scope.i18n.find_by!(slug: id) }
30
+ end
31
+ end
32
+
33
+ def scope
34
+ super.active(Spree::Current.currency)
35
+ end
36
+
37
+ # these scopes are not automatically picked by ar_lazy_preload gem and we need to explicitly include them
38
+ def scope_includes
39
+ [
40
+ thumbnail: [attachment_attachment: :blob],
41
+ master: [:prices],
42
+ variants: [:prices]
43
+ ]
44
+ end
45
+
46
+ # Disable distinct when using custom sort scopes that add computed columns
47
+ def collection_distinct?
48
+ !custom_sort_requested?
49
+ end
50
+
51
+ # Apply custom sorting scopes for price/best-selling
52
+ def apply_collection_sort(collection)
53
+ sort_by = params.dig(:q, :sort_by) || params[:sort_by]
54
+ return collection unless sort_by.present?
55
+
56
+ return collection.distinct(false).reorder(nil).by_best_selling if sort_by == 'best-selling'
57
+
58
+ scope_method = SORT_OPTIONS[sort_by]
59
+ return collection.reorder(nil).send(scope_method) if scope_method.present?
60
+
61
+ collection
62
+ end
63
+
64
+ private
65
+
66
+ def custom_sort_requested?
67
+ sort_by = params.dig(:q, :sort_by) || params[:sort_by]
68
+ SORT_OPTIONS.key?(sort_by)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,12 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class ResourceController < Spree::Api::V3::ResourceController
6
+ # Require publishable API key for all Store API requests
7
+ before_action :authenticate_api_key!
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,26 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class StoresController < ResourceController
6
+ skip_before_action :set_resource
7
+
8
+ # GET /api/v3/store/store
9
+ def show
10
+ render json: serialize_resource(current_store)
11
+ end
12
+
13
+ protected
14
+
15
+ def model_class
16
+ Spree::Store
17
+ end
18
+
19
+ def serializer_class
20
+ Spree.api.store_serializer
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class TaxonomiesController < ResourceController
6
+ protected
7
+
8
+ def model_class
9
+ Spree::Taxonomy
10
+ end
11
+
12
+ def serializer_class
13
+ Spree.api.taxonomy_serializer
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,37 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Taxons
6
+ class ProductsController < Store::ProductsController
7
+ before_action :set_taxon
8
+
9
+ protected
10
+
11
+ def set_taxon
12
+ @taxon = find_taxon
13
+ end
14
+
15
+ def scope
16
+ super.in_taxon(@taxon)
17
+ end
18
+
19
+ private
20
+
21
+ def find_taxon
22
+ id = params[:taxon_id]
23
+ taxon_scope = Spree::Taxon.for_store(current_store).accessible_by(current_ability, :show)
24
+ taxon_scope = taxon_scope.i18n if Spree::Taxon.include?(Spree::TranslatableResource)
25
+
26
+ if id.to_s.start_with?('txn_')
27
+ taxon_scope.find_by_prefix_id!(id)
28
+ else
29
+ find_with_fallback_default_locale { taxon_scope.i18n.find_by!(permalink: id) }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,34 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class TaxonsController < ResourceController
6
+ protected
7
+
8
+ def model_class
9
+ Spree::Taxon
10
+ end
11
+
12
+ def serializer_class
13
+ Spree.api.taxon_serializer
14
+ end
15
+
16
+ # Find taxon by permalink or prefixed ID with i18n scope for SEO-friendly URLs
17
+ # Falls back to default locale if taxon is not found in the current locale
18
+ def find_resource
19
+ id = params[:id]
20
+ if id.to_s.start_with?('txn_')
21
+ scope.find_by_prefix_id!(id)
22
+ else
23
+ find_with_fallback_default_locale { scope.i18n.find_by!(permalink: id) }
24
+ end
25
+ end
26
+
27
+ def collection_includes
28
+ [:taxonomy]
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class WishlistItemsController < ResourceController
6
+ prepend_before_action :require_authentication!
7
+
8
+ protected
9
+
10
+ def set_parent
11
+ @parent = current_user.wishlists.find_by_prefix_id!(params[:wishlist_id])
12
+ end
13
+
14
+ def parent_association
15
+ :wished_items
16
+ end
17
+
18
+ def model_class
19
+ Spree::WishedItem
20
+ end
21
+
22
+ def serializer_class
23
+ Spree.api.wished_item_serializer
24
+ end
25
+
26
+ def permitted_params
27
+ params.permit(Spree::PermittedAttributes.wished_item_attributes)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end