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,82 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class CartController < Store::BaseController
6
+ include Spree::Api::V3::OrderConcern
7
+
8
+ before_action :require_authentication!, only: [:associate]
9
+
10
+ # POST /api/v3/store/cart
11
+ # Creates a new shopping cart (order)
12
+ # Can be created by guests or authenticated customers
13
+ def create
14
+ @cart = Spree::Order.create!(
15
+ store: current_store,
16
+ currency: current_currency,
17
+ user: current_user # nil for guests
18
+ )
19
+
20
+ render json: serialize_resource(@cart), status: :created
21
+ end
22
+
23
+ # GET /api/v3/store/cart
24
+ # Returns current incomplete order (cart)
25
+ # Returns 404 if no cart exists - use POST /cart to create one
26
+ # Authorize via order_token param or JWT Bearer token
27
+ def show
28
+ @cart = find_cart
29
+
30
+ render json: serialize_resource(@cart)
31
+ end
32
+
33
+ # PATCH /api/v3/store/cart/associate
34
+ # Associates a guest cart with the currently authenticated user
35
+ # Requires: JWT authentication + order token (header or param)
36
+ def associate
37
+ @cart = find_cart_by_token
38
+
39
+ result = Spree.cart_associate_service.call(guest_order: @cart, user: current_user, guest_only: true)
40
+
41
+ if result.success?
42
+ render json: serialize_resource(@cart)
43
+ else
44
+ render_service_error(result.error.to_s)
45
+ end
46
+ end
47
+
48
+ protected
49
+
50
+ def serializer_class
51
+ Spree.api.order_serializer
52
+ end
53
+
54
+ private
55
+
56
+ # Find incomplete cart by order token for associate action
57
+ # Only finds guest carts (no user) or carts already owned by current user (idempotent)
58
+ def find_cart_by_token
59
+ current_store.orders.incomplete.where(user: [ nil, current_user ]).find_by!(token: order_token)
60
+ end
61
+
62
+ def find_cart
63
+ scope = current_store.orders.incomplete
64
+
65
+ # Try order_token first (guest checkout)
66
+ if order_token.present?
67
+ return scope.find_by!(token: order_token)
68
+ end
69
+
70
+ # Then try JWT authenticated user
71
+ if current_user.present?
72
+ cart = scope.where(user: current_user).order(created_at: :desc).first
73
+ return cart if cart
74
+ end
75
+
76
+ raise ActiveRecord::RecordNotFound.new(nil, 'Spree::Order')
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,31 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class CountriesController < Store::BaseController
6
+ # GET /api/v3/store/countries
7
+ def index
8
+ countries = current_store.countries_from_markets
9
+
10
+ render json: {
11
+ data: countries.map { |country| serialize_country(country) }
12
+ }
13
+ end
14
+
15
+ # GET /api/v3/store/countries/:id
16
+ def show
17
+ country = current_store.countries_from_markets.find_by!(iso: params[:id].upcase)
18
+
19
+ render json: serialize_country(country)
20
+ end
21
+
22
+ private
23
+
24
+ def serialize_country(country)
25
+ Spree.api.country_serializer.new(country, params: serializer_params).to_h
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class CurrenciesController < Store::BaseController
6
+ # GET /api/v3/store/currencies
7
+ def index
8
+ currencies = current_store.supported_currencies_list
9
+
10
+ render json: {
11
+ data: currencies.map { |currency| Spree.api.currency_serializer.new(currency).to_h }
12
+ }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,38 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Customer
6
+ class AccountController < Store::BaseController
7
+ prepend_before_action :require_authentication!
8
+
9
+ # GET /api/v3/store/customer
10
+ def show
11
+ render json: serialize_resource(current_user)
12
+ end
13
+
14
+ # PATCH /api/v3/store/customer
15
+ def update
16
+ if current_user.update(permitted_params)
17
+ render json: serialize_resource(current_user)
18
+ else
19
+ render_errors(current_user.errors)
20
+ end
21
+ end
22
+
23
+ protected
24
+
25
+ def serializer_class
26
+ Spree.api.customer_serializer
27
+ end
28
+
29
+ def permitted_params
30
+ params.permit(:email, :password, :password_confirmation, :first_name, :last_name,
31
+ :accepts_email_marketing, :phone)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,85 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Customer
6
+ class AddressesController < ResourceController
7
+ prepend_before_action :require_authentication!
8
+ before_action :set_resource, only: [:show, :update, :destroy, :mark_as_default]
9
+
10
+ # POST /api/v3/store/customer/addresses
11
+ def create
12
+ result = Spree.address_create_service.call(
13
+ address_params: permitted_params,
14
+ user: current_user
15
+ )
16
+
17
+ if result.success?
18
+ render json: serialize_resource(result.value), status: :created
19
+ else
20
+ render_errors(result.value.errors)
21
+ end
22
+ end
23
+
24
+ # PATCH /api/v3/store/customer/addresses/:id/mark_as_default
25
+ def mark_as_default
26
+ kind = params[:kind].to_s
27
+
28
+ unless %w[billing shipping].include?(kind)
29
+ return render_error(
30
+ code: ERROR_CODES[:invalid_request],
31
+ message: 'kind must be billing or shipping',
32
+ status: :unprocessable_content
33
+ )
34
+ end
35
+
36
+ attribute = kind == 'billing' ? :bill_address_id : :ship_address_id
37
+ current_user.update!(attribute => @resource.id)
38
+
39
+ render json: serialize_resource(@resource.reload)
40
+ end
41
+
42
+ # PATCH /api/v3/store/customer/addresses/:id
43
+ def update
44
+ result = Spree.address_update_service.call(
45
+ address: @resource,
46
+ address_params: permitted_params
47
+ )
48
+
49
+ if result.success?
50
+ render json: serialize_resource(result.value)
51
+ else
52
+ render_errors(result.value.errors)
53
+ end
54
+ end
55
+
56
+ protected
57
+
58
+ def set_parent
59
+ @parent = current_user
60
+ end
61
+
62
+ def parent_association
63
+ :addresses
64
+ end
65
+
66
+ def model_class
67
+ Spree::Address
68
+ end
69
+
70
+ def serializer_class
71
+ Spree.api.address_serializer
72
+ end
73
+
74
+ def permitted_params
75
+ params.permit(
76
+ :firstname, :lastname, :address1, :address2, :city,
77
+ :zipcode, :phone, :company, :country_iso, :state_abbr, :state_name
78
+ )
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,31 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Customer
6
+ class CreditCardsController < ResourceController
7
+ prepend_before_action :require_authentication!
8
+
9
+ protected
10
+
11
+ def set_parent
12
+ @parent = current_user
13
+ end
14
+
15
+ def parent_association
16
+ :credit_cards
17
+ end
18
+
19
+ def model_class
20
+ Spree::CreditCard
21
+ end
22
+
23
+ def serializer_class
24
+ Spree.api.credit_card_serializer
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,36 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Customer
6
+ class GiftCardsController < ResourceController
7
+ prepend_before_action :require_authentication!
8
+
9
+ protected
10
+
11
+ def set_parent
12
+ @parent = current_user
13
+ end
14
+
15
+ def parent_association
16
+ :gift_cards
17
+ end
18
+
19
+ def model_class
20
+ Spree::GiftCard
21
+ end
22
+
23
+ def serializer_class
24
+ Spree.api.gift_card_serializer
25
+ end
26
+
27
+ # Override scope to filter by current store and order by created_at desc
28
+ def scope
29
+ super.where(store: current_store).order(created_at: :desc)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,35 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Customer
6
+ class OrdersController < ResourceController
7
+ prepend_before_action :require_authentication!
8
+
9
+ protected
10
+
11
+ def model_class
12
+ Spree::Order
13
+ end
14
+
15
+ def serializer_class
16
+ Spree.api.order_serializer
17
+ end
18
+
19
+ def set_parent
20
+ @parent = current_user
21
+ end
22
+
23
+ def parent_association
24
+ :orders
25
+ end
26
+
27
+ def scope
28
+ super.for_store(current_store)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,83 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Customer
6
+ class PaymentSetupSessionsController < ResourceController
7
+ prepend_before_action :require_authentication!
8
+
9
+ skip_before_action :set_resource
10
+ before_action :set_payment_setup_session, only: [:show, :complete]
11
+
12
+ # POST /api/v3/store/customer/payment_setup_sessions
13
+ def create
14
+ payment_method = current_store.payment_methods.find_by_prefix_id!(permitted_params[:payment_method_id])
15
+
16
+ @payment_setup_session = payment_method.create_payment_setup_session(
17
+ customer: current_user,
18
+ external_data: permitted_params[:external_data] || {}
19
+ )
20
+
21
+ if @payment_setup_session.persisted?
22
+ render json: serialize_resource(@payment_setup_session), status: :created
23
+ else
24
+ render_errors(@payment_setup_session.errors)
25
+ end
26
+ end
27
+
28
+ # GET /api/v3/store/customer/payment_setup_sessions/:id
29
+ def show
30
+ render json: serialize_resource(@payment_setup_session)
31
+ end
32
+
33
+ # PATCH /api/v3/store/customer/payment_setup_sessions/:id/complete
34
+ def complete
35
+ @payment_setup_session.payment_method.complete_payment_setup_session(
36
+ setup_session: @payment_setup_session,
37
+ params: complete_params
38
+ )
39
+
40
+ if @payment_setup_session.errors.empty?
41
+ render json: serialize_resource(@payment_setup_session.reload)
42
+ else
43
+ render_errors(@payment_setup_session.errors)
44
+ end
45
+ end
46
+
47
+ protected
48
+
49
+ def set_parent
50
+ @parent = current_user
51
+ end
52
+
53
+ def parent_association
54
+ :payment_setup_sessions
55
+ end
56
+
57
+ def model_class
58
+ Spree::PaymentSetupSession
59
+ end
60
+
61
+ def serializer_class
62
+ Spree.api.payment_setup_session_serializer
63
+ end
64
+
65
+ def permitted_params
66
+ params.permit(Spree::PermittedAttributes.payment_setup_session_attributes)
67
+ end
68
+
69
+ def complete_params
70
+ params.permit({ external_data: {} })
71
+ end
72
+
73
+ private
74
+
75
+ def set_payment_setup_session
76
+ @payment_setup_session = current_user.payment_setup_sessions.find_by_prefix_id!(params[:id])
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,37 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class DigitalsController < Store::BaseController
6
+ skip_before_action :authenticate_api_key!
7
+ before_action :set_resource
8
+
9
+ # GET /api/v3/store/digitals/:token
10
+ def show
11
+ if @resource.authorize!
12
+ send_data @resource.digital.attachment.download,
13
+ filename: @resource.digital.attachment.filename.to_s,
14
+ type: @resource.digital.attachment.content_type
15
+ else
16
+ render_error(
17
+ code: ERROR_CODES[:digital_link_expired],
18
+ message: 'Download link expired or invalid',
19
+ status: :forbidden
20
+ )
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def set_resource
27
+ @resource = digital_link_scope.find_by!(token: params[:token])
28
+ end
29
+
30
+ def digital_link_scope
31
+ current_store.digital_links
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,24 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class LocalesController < Store::BaseController
6
+ # GET /api/v3/store/locales
7
+ def index
8
+ locales = current_store.supported_locales_list
9
+
10
+ render json: {
11
+ data: locales.map { |code| Spree.api.locale_serializer.new(OpenStruct.new(code: code, name: locale_name(code))).to_h }
12
+ }
13
+ end
14
+
15
+ private
16
+
17
+ def locale_name(code)
18
+ I18n.t('spree.i18n.this_file_language', locale: code, default: code)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,68 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Orders
6
+ class CouponCodesController < ResourceController
7
+ include Spree::Api::V3::OrderConcern
8
+
9
+ before_action :authorize_order_access!
10
+ skip_before_action :set_resource
11
+
12
+ # POST /api/v3/store/orders/:order_id/coupon_codes
13
+ # Apply a coupon code to the order
14
+ def create
15
+ @parent.coupon_code = permitted_params[:code]
16
+
17
+ coupon_handler.apply
18
+
19
+ if coupon_handler.successful?
20
+ render_order(status: :created)
21
+ else
22
+ render_errors(coupon_handler.error)
23
+ end
24
+ end
25
+
26
+ # DELETE /api/v3/store/orders/:order_id/coupon_codes/:id
27
+ # Remove a coupon code from the order
28
+ # :id is the promotion prefix_id (e.g., promo_xxx)
29
+ def destroy
30
+ @resource = scope.find_by_prefix_id!(params[:id])
31
+ coupon_code = @resource.code.presence || @resource.name
32
+
33
+ coupon_handler.remove(coupon_code)
34
+
35
+ if coupon_handler.successful?
36
+ render_order
37
+ else
38
+ render_errors(coupon_handler.error)
39
+ end
40
+ end
41
+
42
+ protected
43
+
44
+ def parent_association
45
+ :order_promotions
46
+ end
47
+
48
+ def coupon_handler
49
+ @coupon_handler ||= Spree.coupon_handler.new(@parent)
50
+ end
51
+
52
+ def permitted_params
53
+ params.permit(:code)
54
+ end
55
+
56
+ def model_class
57
+ Spree::OrderPromotion
58
+ end
59
+
60
+ def serializer_class
61
+ Spree.api.order_promotion_serializer
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,87 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Orders
6
+ class LineItemsController < ResourceController
7
+ include Spree::Api::V3::OrderConcern
8
+
9
+ skip_before_action :set_resource
10
+ before_action :authorize_order_access!
11
+
12
+ # POST /api/v3/store/orders/:order_id/line_items
13
+ def create
14
+ result = Spree.cart_add_item_service.call(
15
+ order: @parent,
16
+ variant: variant,
17
+ quantity: permitted_params[:quantity] || 1,
18
+ options: permitted_params[:options] || {}
19
+ )
20
+
21
+ if result.success?
22
+ render_order(status: :created)
23
+ else
24
+ render_service_error(result.error, code: ERROR_CODES[:insufficient_stock])
25
+ end
26
+ end
27
+
28
+ # PATCH /api/v3/store/orders/:order_id/line_items/:id
29
+ def update
30
+ @line_item = scope.find_by_prefix_id!(params[:id])
31
+
32
+ if permitted_params[:quantity].present?
33
+ result = Spree.cart_set_item_quantity_service.call(
34
+ order: @parent,
35
+ line_item: @line_item,
36
+ quantity: permitted_params[:quantity]
37
+ )
38
+
39
+ if result.success?
40
+ render_order
41
+ else
42
+ render_service_error(result.error, code: ERROR_CODES[:invalid_quantity])
43
+ end
44
+ else
45
+ render_order
46
+ end
47
+ end
48
+
49
+ # DELETE /api/v3/store/orders/:order_id/line_items/:id
50
+ def destroy
51
+ @line_item = scope.find_by_prefix_id!(params[:id])
52
+
53
+ Spree.cart_remove_line_item_service.call(
54
+ order: @parent,
55
+ line_item: @line_item
56
+ )
57
+
58
+ render_order
59
+ end
60
+
61
+ protected
62
+
63
+ def parent_association
64
+ :line_items
65
+ end
66
+
67
+ def variant
68
+ @variant ||= current_store.variants.accessible_by(current_ability).find_by_prefix_id!(permitted_params[:variant_id])
69
+ end
70
+
71
+ def model_class
72
+ Spree::LineItem
73
+ end
74
+
75
+ def serializer_class
76
+ Spree.api.line_item_serializer
77
+ end
78
+
79
+ def permitted_params
80
+ params.permit(Spree::PermittedAttributes.line_item_attributes + [{ options: {} }])
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end