spree_api 6.0.0.beta4 → 6.0.0.rc2

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 (531) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -48
  3. data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
  4. data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
  5. data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
  6. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
  7. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +15 -29
  8. data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
  9. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +10 -2
  10. data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +3 -3
  11. data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
  12. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
  13. data/app/controllers/concerns/spree/api/v3/error_handler.rb +55 -4
  14. data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
  15. data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
  16. data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
  17. data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
  18. data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
  19. data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
  20. data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
  21. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +7 -11
  22. data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
  23. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +3 -15
  24. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
  25. data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
  26. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +8 -28
  27. data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
  28. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
  29. data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
  30. data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
  31. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
  32. data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
  33. data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
  34. data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
  35. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +8 -4
  36. data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
  37. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -8
  38. data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
  39. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +2 -6
  40. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -9
  41. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +61 -34
  42. data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
  43. data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
  44. data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -10
  45. data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
  46. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +5 -3
  47. data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
  48. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +62 -14
  49. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -4
  50. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
  51. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -5
  52. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +20 -27
  53. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -5
  54. data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -7
  55. data/app/controllers/spree/api/v3/admin/countries_controller.rb +6 -2
  56. data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
  57. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +22 -4
  58. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -9
  59. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -5
  60. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -11
  61. data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
  62. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -13
  63. data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
  64. data/app/controllers/spree/api/v3/admin/customers_controller.rb +37 -9
  65. data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
  66. data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
  67. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +16 -8
  68. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +95 -62
  69. data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
  70. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +14 -7
  71. data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
  72. data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +53 -0
  73. data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +34 -0
  74. data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +37 -0
  75. data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +42 -0
  76. data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
  77. data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
  78. data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +44 -0
  79. data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
  80. data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
  81. data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
  82. data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
  83. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
  84. data/app/controllers/spree/api/v3/admin/imports_controller.rb +37 -11
  85. data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
  86. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
  87. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -8
  88. data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
  89. data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
  90. data/app/controllers/spree/api/v3/admin/me_controller.rb +13 -4
  91. data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
  92. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +9 -5
  93. data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
  94. data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
  95. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -5
  96. data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
  97. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +20 -6
  98. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +6 -2
  99. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +30 -6
  100. data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
  101. data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
  102. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +83 -22
  103. data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +9 -5
  104. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
  105. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +37 -12
  106. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +18 -19
  107. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +7 -5
  108. data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
  109. data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
  110. data/app/controllers/spree/api/v3/admin/orders_controller.rb +76 -62
  111. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
  112. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +26 -7
  113. data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
  114. data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
  115. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +32 -67
  116. data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -8
  117. data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
  118. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +29 -16
  119. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -18
  120. data/app/controllers/spree/api/v3/admin/products_controller.rb +122 -71
  121. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -6
  122. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -5
  123. data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
  124. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +55 -8
  125. data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
  126. data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
  127. data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
  128. data/app/controllers/spree/api/v3/admin/resource_controller.rb +2 -1
  129. data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
  130. data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
  131. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +7 -9
  132. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +17 -10
  133. data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
  134. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
  135. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
  136. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
  137. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +77 -32
  138. data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -23
  139. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
  140. data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
  141. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +49 -8
  142. data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -48
  143. data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
  144. data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
  145. data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
  146. data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
  147. data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
  148. data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
  149. data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
  150. data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
  151. data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
  152. data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
  153. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +40 -13
  154. data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
  155. data/app/controllers/spree/api/v3/base_controller.rb +12 -0
  156. data/app/controllers/spree/api/v3/resource_controller.rb +99 -3
  157. data/app/controllers/spree/api/v3/seller/auth_controller.rb +10 -2
  158. data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
  159. data/app/controllers/spree/api/v3/seller/countries_controller.rb +3 -3
  160. data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
  161. data/app/controllers/spree/api/v3/seller/exports_controller.rb +21 -4
  162. data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
  163. data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
  164. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +12 -4
  165. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
  166. data/app/controllers/spree/api/v3/seller/me_controller.rb +15 -4
  167. data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
  168. data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
  169. data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
  170. data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
  171. data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
  172. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +23 -2
  173. data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
  174. data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
  175. data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
  176. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
  177. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +20 -11
  178. data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
  179. data/app/controllers/spree/api/v3/seller/products_controller.rb +115 -28
  180. data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
  181. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +13 -6
  182. data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
  183. data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
  184. data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
  185. data/app/controllers/spree/api/v3/seller/team_controller.rb +5 -1
  186. data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
  187. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +9 -2
  188. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +11 -11
  189. data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +13 -4
  190. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +23 -7
  191. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +21 -7
  192. data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +16 -3
  193. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +26 -28
  194. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +9 -1
  195. data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
  196. data/app/controllers/spree/api/v3/store/carts_controller.rb +64 -52
  197. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -8
  198. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
  199. data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
  200. data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
  201. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +10 -2
  202. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -11
  203. data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
  204. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -5
  205. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
  206. data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
  207. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
  208. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +25 -6
  209. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -9
  210. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
  211. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
  212. data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
  213. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
  214. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
  215. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +27 -14
  216. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +12 -7
  217. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +11 -6
  218. data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
  219. data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
  220. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -8
  221. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
  222. data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
  223. data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
  224. data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
  225. data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
  226. data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
  227. data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
  228. data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
  229. data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
  230. data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
  231. data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
  232. data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
  233. data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
  234. data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
  235. data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
  236. data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
  237. data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
  238. data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
  239. data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
  240. data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
  241. data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
  242. data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
  243. data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +29 -0
  244. data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
  245. data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
  246. data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
  247. data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
  248. data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
  249. data/app/serializers/spree/api/v3/admin/address_serializer.rb +8 -7
  250. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
  251. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
  252. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
  253. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
  254. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -8
  255. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
  256. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
  257. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
  258. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
  259. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +7 -10
  260. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
  261. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
  262. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
  263. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
  264. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
  265. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -5
  266. data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
  267. data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
  268. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
  269. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
  270. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +5 -17
  271. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
  272. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
  273. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +20 -30
  274. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
  275. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
  276. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
  277. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
  278. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
  279. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
  280. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
  281. data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
  282. data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
  283. data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
  284. data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
  285. data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
  286. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
  287. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +6 -3
  288. data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
  289. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
  290. data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
  291. data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
  292. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
  293. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -17
  294. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +4 -10
  295. data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
  296. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
  297. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +14 -18
  298. data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
  299. data/app/serializers/spree/api/v3/admin/market_serializer.rb +7 -2
  300. data/app/serializers/spree/api/v3/admin/media_serializer.rb +4 -5
  301. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
  302. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +5 -9
  303. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  304. data/app/serializers/spree/api/v3/admin/order_serializer.rb +38 -48
  305. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
  306. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -4
  307. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -8
  308. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
  309. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
  310. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
  311. data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +5 -2
  312. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
  313. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -6
  314. data/app/serializers/spree/api/v3/admin/price_serializer.rb +2 -0
  315. data/app/serializers/spree/api/v3/admin/product_serializer.rb +4 -10
  316. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
  317. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
  318. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +5 -9
  319. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -5
  320. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +6 -25
  321. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -17
  322. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
  323. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -0
  324. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
  325. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +9 -0
  326. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
  327. data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -12
  328. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
  329. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
  330. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +7 -7
  331. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
  332. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
  333. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +8 -16
  334. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +11 -10
  335. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +8 -21
  336. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
  337. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +4 -3
  338. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +3 -9
  339. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
  340. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
  341. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
  342. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
  343. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +6 -3
  344. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +11 -20
  345. data/app/serializers/spree/api/v3/admin/store_serializer.rb +21 -84
  346. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +2 -4
  347. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +6 -10
  348. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
  349. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +9 -3
  350. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +3 -19
  351. data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
  352. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +13 -10
  353. data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
  354. data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
  355. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
  356. data/app/serializers/spree/api/v3/base_serializer.rb +132 -7
  357. data/app/serializers/spree/api/v3/cart_serializer.rb +20 -66
  358. data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
  359. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +6 -29
  360. data/app/serializers/spree/api/v3/claim_serializer.rb +2 -16
  361. data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
  362. data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
  363. data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
  364. data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
  365. data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
  366. data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
  367. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -32
  368. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
  369. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
  370. data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
  371. data/app/serializers/spree/api/v3/discount_serializer.rb +4 -12
  372. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +6 -30
  373. data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -16
  374. data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
  375. data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
  376. data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
  377. data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
  378. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
  379. data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +3 -7
  380. data/app/serializers/spree/api/v3/gift_card_serializer.rb +7 -17
  381. data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
  382. data/app/serializers/spree/api/v3/import_serializer.rb +3 -26
  383. data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
  384. data/app/serializers/spree/api/v3/line_item_serializer.rb +19 -23
  385. data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
  386. data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
  387. data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
  388. data/app/serializers/spree/api/v3/media_serializer.rb +8 -5
  389. data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
  390. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
  391. data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
  392. data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -25
  393. data/app/serializers/spree/api/v3/order_serializer.rb +14 -58
  394. data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
  395. data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
  396. data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
  397. data/app/serializers/spree/api/v3/payment_session_serializer.rb +5 -13
  398. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
  399. data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
  400. data/app/serializers/spree/api/v3/price_history_serializer.rb +6 -8
  401. data/app/serializers/spree/api/v3/price_serializer.rb +7 -12
  402. data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
  403. data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
  404. data/app/serializers/spree/api/v3/product_serializer.rb +10 -24
  405. data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
  406. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
  407. data/app/serializers/spree/api/v3/refund_serializer.rb +11 -16
  408. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +6 -21
  409. data/app/serializers/spree/api/v3/return_serializer.rb +4 -16
  410. data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
  411. data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
  412. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
  413. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
  414. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
  415. data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
  416. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
  417. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +5 -15
  418. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +8 -13
  419. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
  420. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
  421. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
  422. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +6 -3
  423. data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
  424. data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
  425. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
  426. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
  427. data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
  428. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
  429. data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
  430. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +8 -13
  431. data/app/serializers/spree/api/v3/seller/order_serializer.rb +19 -40
  432. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
  433. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +6 -6
  434. data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +11 -0
  435. data/app/serializers/spree/api/v3/seller/price_serializer.rb +11 -0
  436. data/app/serializers/spree/api/v3/seller/product_serializer.rb +3 -7
  437. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
  438. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +9 -13
  439. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
  440. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
  441. data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -17
  442. data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
  443. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
  444. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +10 -9
  445. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
  446. data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
  447. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
  448. data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
  449. data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
  450. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
  451. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
  452. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
  453. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -13
  454. data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -27
  455. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
  456. data/app/serializers/spree/api/v3/tax_line_serializer.rb +11 -23
  457. data/app/serializers/spree/api/v3/variant_serializer.rb +10 -24
  458. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
  459. data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
  460. data/app/services/spree/api/v3/filter_predicates.rb +29 -0
  461. data/app/services/spree/api/v3/filter_table.rb +337 -0
  462. data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
  463. data/app/services/spree/api/v3/request_schema.rb +430 -0
  464. data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
  465. data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
  466. data/config/initializers/pagy.rb +1 -1
  467. data/config/initializers/typelizer.rb +7 -9
  468. data/config/locales/ar.yml +15 -0
  469. data/config/locales/be.yml +15 -0
  470. data/config/locales/bg.yml +15 -0
  471. data/config/locales/ca.yml +15 -0
  472. data/config/locales/cs.yml +15 -0
  473. data/config/locales/da.yml +15 -0
  474. data/config/locales/de-CH.yml +11 -0
  475. data/config/locales/de.yml +15 -0
  476. data/config/locales/el.yml +15 -0
  477. data/config/locales/en.yml +5 -40
  478. data/config/locales/es-CL.yml +10 -0
  479. data/config/locales/es-EC.yml +11 -0
  480. data/config/locales/es-MX.yml +12 -0
  481. data/config/locales/es.yml +15 -0
  482. data/config/locales/et.yml +15 -0
  483. data/config/locales/fa.yml +15 -0
  484. data/config/locales/fi.yml +15 -0
  485. data/config/locales/fr.yml +15 -0
  486. data/config/locales/hu.yml +15 -0
  487. data/config/locales/id.yml +15 -0
  488. data/config/locales/it.yml +15 -0
  489. data/config/locales/ja.yml +15 -0
  490. data/config/locales/km.yml +15 -0
  491. data/config/locales/ko.yml +15 -0
  492. data/config/locales/ku.yml +15 -0
  493. data/config/locales/lt.yml +15 -0
  494. data/config/locales/lv.yml +15 -0
  495. data/config/locales/nb.yml +15 -0
  496. data/config/locales/ne.yml +15 -0
  497. data/config/locales/nl.yml +15 -0
  498. data/config/locales/pl.yml +15 -0
  499. data/config/locales/pt-BR.yml +13 -0
  500. data/config/locales/pt.yml +15 -0
  501. data/config/locales/ro.yml +15 -0
  502. data/config/locales/ru.yml +15 -0
  503. data/config/locales/sk.yml +15 -0
  504. data/config/locales/sl-SI.yml +15 -0
  505. data/config/locales/sv.yml +15 -0
  506. data/config/locales/th.yml +15 -0
  507. data/config/locales/tr.yml +15 -0
  508. data/config/locales/uk.yml +15 -0
  509. data/config/locales/vi.yml +15 -0
  510. data/config/locales/zh-CN.yml +15 -0
  511. data/config/locales/zh-TW.yml +15 -0
  512. data/config/routes.rb +54 -102
  513. data/lib/spree/api/configuration.rb +5 -0
  514. data/lib/spree/api/dependencies.rb +54 -274
  515. data/lib/spree/api/middleware/request_size_limit.rb +24 -3
  516. data/lib/spree/api/openapi/filter_documentation.rb +136 -0
  517. data/lib/spree/api/openapi/schema_helper.rb +127 -81
  518. data/lib/spree/api/preference_families.rb +46 -0
  519. data/lib/spree/api/preference_types.rb +138 -0
  520. data/lib/spree/api/typelizer_generation.rb +39 -0
  521. data/lib/spree/api/webhook_event_types.rb +140 -0
  522. data/lib/spree/api.rb +0 -2
  523. data/lib/tasks/filters.rake +12 -0
  524. data/lib/typelizer/open_enums.rb +10 -0
  525. metadata +125 -40
  526. data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
  527. data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
  528. data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
  529. data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
  530. data/config/i18n-tasks.yml +0 -40
  531. data/config/initializers/alba.rb +0 -5
@@ -12,10 +12,6 @@ module Spree
12
12
  @parent = current_user
13
13
  end
14
14
 
15
- def parent_association
16
- :store_credits
17
- end
18
-
19
15
  def scope
20
16
  super.for_store(current_store).where(currency: current_currency)
21
17
  end
@@ -27,7 +23,6 @@ module Spree
27
23
  def serializer_class
28
24
  Spree.api.store_credit_serializer
29
25
  end
30
-
31
26
  end
32
27
  end
33
28
  end
@@ -18,6 +18,10 @@ module Spree
18
18
  # the buyer never named and could not predict.
19
19
  before_action :require_kind!, only: %i[show update destroy]
20
20
 
21
+ request_params('TaxIdentifierParams', action: :update) do |body|
22
+ body.include_attributes Spree::Api::V3::TaxIdentifierRequestSchema
23
+ end
24
+
21
25
  # GET /api/v3/store/customers/me/tax_identifiers
22
26
  #
23
27
  # Everything the buyer could choose between at checkout. Small and
@@ -65,7 +69,7 @@ module Spree
65
69
  end
66
70
 
67
71
  def permitted_params
68
- params.permit(:kind, :value)
72
+ params.permit(*declared_permitted_attributes)
69
73
  end
70
74
 
71
75
  private
@@ -11,6 +11,33 @@ module Spree
11
11
  skip_before_action :authenticate_user, only: [:create]
12
12
  prepend_before_action :require_authentication!, only: [:show, :update]
13
13
 
14
+ CUSTOMER_FIELDS = Spree::Api::V3::RequestSchema.new do |schema|
15
+ schema.attribute :first_name, :string, example: 'John'
16
+ schema.attribute :last_name, :string, example: 'Doe'
17
+ schema.attribute :phone, :string, example: '+1 555 123 4567'
18
+ schema.attribute :accepts_email_marketing, :boolean
19
+ schema.attribute :metadata, :hash, description: 'Write-only key-value metadata.'
20
+ end
21
+
22
+ request_params 'RegisterParams', action: :create do |body|
23
+ body.attribute :email, :string, required: true, format: :email, example: 'newuser@example.com'
24
+ body.attribute :password, :string, required: true, example: 'password123'
25
+ body.attribute :password_confirmation, :string, example: 'password123'
26
+ body.include_attributes CUSTOMER_FIELDS
27
+ body.attribute :terms_of_service, :boolean,
28
+ permit: false,
29
+ description: "Whether the customer ticked the storefront's terms of service box. Recorded as their consent."
30
+ end
31
+
32
+ request_params 'UpdateCustomerParams', action: :update do |body|
33
+ body.attribute :email, :string, format: :email, example: 'customer@example.com'
34
+ body.attribute :password, :string
35
+ body.attribute :password_confirmation, :string
36
+ body.attribute :current_password, :string,
37
+ description: 'Required when changing the email or the password.'
38
+ body.include_attributes CUSTOMER_FIELDS
39
+ end
40
+
14
41
  # POST /api/v3/store/customers
15
42
  # Registration runs through the customer_create_workflow seam
16
43
  # (password requirement, newsletter-subscriber linking, registration
@@ -83,8 +110,7 @@ module Spree
83
110
  end
84
111
 
85
112
  def permitted_params
86
- params.permit(:email, :password, :password_confirmation, :first_name, :last_name,
87
- :accepts_email_marketing, :phone, :current_password, metadata: {})
113
+ params.permit(*declared_permitted_attributes)
88
114
  end
89
115
 
90
116
  private
@@ -30,7 +30,7 @@ module Spree
30
30
  unless data_request&.downloadable?
31
31
  return render_error(
32
32
  code: 'data_request_expired',
33
- message: Spree.t('data_request_errors.download_unavailable'),
33
+ message: I18n.t('spree.data_request_errors.download_unavailable'),
34
34
  status: :forbidden
35
35
  )
36
36
  end
@@ -26,7 +26,7 @@ module Spree
26
26
  def pickup_points
27
27
  provider = find_resource.pickup_point_provider_instance
28
28
  if provider.nil?
29
- return render_error(code: ERROR_CODES[:record_not_found], message: Spree.t('errors.messages.no_pickup_point_provider'), status: :not_found)
29
+ return render_error(code: ERROR_CODES[:record_not_found], message: I18n.t('spree.errors.messages.no_pickup_point_provider'), status: :not_found)
30
30
  end
31
31
 
32
32
  latitude = params[:latitude].presence&.to_f
@@ -10,6 +10,28 @@ module Spree
10
10
  only: [:create, :verify, :request_unsubscribe],
11
11
  with: -> { render_rate_limited(limit: Spree::Api::Config[:rate_limit_register]) }
12
12
 
13
+ request_params 'CreateNewsletterSubscriberParams', action: :create do |body|
14
+ body.attribute :email, :string, required: true, format: :email, example: 'subscriber@example.com'
15
+ body.attribute :redirect_url, :string,
16
+ format: :uri,
17
+ example: 'https://your-store.com/newsletter/confirm',
18
+ description: "The storefront URL the verification token is appended to. Left out of the webhook payload unless it matches one of the store's allowed origins."
19
+ end
20
+
21
+ request_params 'VerifyNewsletterSubscriberParams', action: :verify do |body|
22
+ body.attribute :token, :string,
23
+ required: true,
24
+ example: 'abc123def456',
25
+ description: 'The verification token from the confirmation email.'
26
+ end
27
+
28
+ request_params 'RequestNewsletterUnsubscribeParams', action: :request_unsubscribe do |body|
29
+ body.attribute :email, :string, format: :email, example: 'subscriber@example.com'
30
+ body.attribute :redirect_url, :string,
31
+ format: :uri,
32
+ description: "The storefront URL the unsubscribe token is appended to in the email. Left out of the event payload unless it matches one of the store's allowed origins."
33
+ end
34
+
13
35
  # POST /api/v3/store/newsletter_subscribers
14
36
  def create
15
37
  subscriber = Spree::NewsletterSubscriber.subscribe(
@@ -43,7 +65,7 @@ module Spree
43
65
  unless subscriber
44
66
  return render_error(
45
67
  code: ERROR_CODES[:invalid_token],
46
- message: Spree.t(:newsletter_verification_token_invalid, scope: :api),
68
+ message: I18n.t('spree.api.newsletter_verification_token_invalid'),
47
69
  status: :unprocessable_content
48
70
  )
49
71
  end
@@ -64,7 +86,7 @@ module Spree
64
86
  if subscriber.blank?
65
87
  return render_error(
66
88
  code: ERROR_CODES[:invalid_token],
67
- message: Spree.t(:newsletter_unsubscribe_token_invalid, scope: :api),
89
+ message: I18n.t('spree.api.newsletter_unsubscribe_token_invalid'),
68
90
  status: :unprocessable_content
69
91
  )
70
92
  end
@@ -87,18 +109,9 @@ module Spree
87
109
  subscriber = Spree::NewsletterSubscriber.for_store(current_store).find_by(email: params[:email])
88
110
 
89
111
  if subscriber
90
- payload = {
91
- id: subscriber.prefixed_id,
92
- email: subscriber.email,
93
- unsubscribe_token: subscriber.generate_token_for(:unsubscribe),
94
- store_id: current_store.prefixed_id,
95
- customer_id: subscriber.customer&.prefixed_id
96
- }
97
-
98
- redirect_url = validated_redirect_url
99
- payload[:redirect_url] = redirect_url if redirect_url.present?
100
-
101
- subscriber.publish_event('newsletter_subscriber.unsubscribe_requested', payload)
112
+ event_name = 'newsletter_subscriber.unsubscribe_requested'
113
+ payload = subscriber.event_payload_for(event_name, store: current_store, redirect_url: validated_redirect_url.presence)
114
+ subscriber.publish_event(event_name, payload)
102
115
  end
103
116
 
104
117
  head :accepted
@@ -10,6 +10,16 @@ module Spree
10
10
  # Whether a customer may file a claim is store policy and belongs in
11
11
  # a `claims.create.validate` hook rather than here.
12
12
  class ClaimsController < Store::ResourceController
13
+ request_params 'CreateClaimParams', action: :create do |body|
14
+ body.attribute :items, :array, required: true do |item|
15
+ item.attribute :line_item_id, :id, required: true
16
+ item.attribute :quantity, :integer, required: true
17
+ item.attribute :description, :string, description: 'What is wrong with the item.'
18
+ end
19
+ body.attribute :reason_id, :id, description: "One of the store's claim reasons."
20
+ body.attribute :memo, :string
21
+ end
22
+
13
23
  def create
14
24
  result = Spree.claim_create_workflow.call(
15
25
  order: @parent,
@@ -18,11 +28,7 @@ module Spree
18
28
  memo: create_params[:memo]
19
29
  )
20
30
 
21
- if result.success?
22
- render json: serialize_resource(result.value), status: :created
23
- else
24
- render_result_error(result)
25
- end
31
+ render_result(result, status: :created)
26
32
  end
27
33
 
28
34
  protected
@@ -63,8 +69,7 @@ module Spree
63
69
  end
64
70
 
65
71
  def create_params
66
- @create_params ||= params.permit(:memo, :reason_id,
67
- items: [:line_item_id, :quantity, :description])
72
+ @create_params ||= params.permit(*declared_permitted_attributes)
68
73
  end
69
74
 
70
75
  private
@@ -17,6 +17,15 @@ module Spree
17
17
  # standard actions are listed alongside the label download.
18
18
  before_action :set_resource, only: [:show, :update, :destroy, :label]
19
19
 
20
+ request_params 'CreateReturnParams', action: :create do |body|
21
+ body.attribute :items, :array, required: true do |item|
22
+ item.attribute :fulfillment_item_id, :id, required: true, description: 'The shipped unit coming back.'
23
+ item.attribute :quantity, :integer, required: true
24
+ end
25
+ body.attribute :reason_id, :id, description: "One of the store's return reasons."
26
+ body.attribute :memo, :string
27
+ end
28
+
20
29
  # GET /api/v3/store/orders/:order_id/returns/:id/label
21
30
  #
22
31
  # The customer's return label, streamed to whoever owns the order.
@@ -37,11 +46,7 @@ module Spree
37
46
  memo: create_params[:memo]
38
47
  )
39
48
 
40
- if result.success?
41
- render json: serialize_resource(result.value), status: :created
42
- else
43
- render_result_error(result)
44
- end
49
+ render_result(result, status: :created)
45
50
  end
46
51
 
47
52
  protected
@@ -89,7 +94,7 @@ module Spree
89
94
  end
90
95
 
91
96
  def create_params
92
- @create_params ||= params.permit(:memo, :reason_id, items: [:fulfillment_item_id, :quantity])
97
+ @create_params ||= params.permit(*declared_permitted_attributes)
93
98
  end
94
99
 
95
100
  private
@@ -3,6 +3,8 @@ module Spree
3
3
  module V3
4
4
  module Store
5
5
  class OrdersController < Store::BaseController
6
+ include Spree::Api::V3::PurchaseSerialization
7
+
6
8
  # GET /api/v3/store/orders/:id
7
9
  # Single order lookup — accessible via order token (guests) or JWT (authenticated users)
8
10
  before_action :find_order!
@@ -13,26 +15,61 @@ module Spree
13
15
 
14
16
  private
15
17
 
16
- # The cart's prefixed id stays the client's stable checkout handle:
17
- # after completion it resolves here to the order created from that
18
- # cart (Order#cart_id is unique; the order copies the cart token).
18
+ # The cart's prefixed id stays the client's stable checkout handle.
19
+ # A plain completion leaves the order it created carrying that id
20
+ # (Order#cart_id is unique; the order copies the cart token). A
21
+ # checkout that reached several sellers divided into one order per
22
+ # seller and moved the id up to the group holding them, so the same
23
+ # handle resolves to the group — a confirmation asking what its cart
24
+ # became is answered with the whole purchase either way, never one
25
+ # seller's share of it.
26
+ #
27
+ # The group's own id resolves here too, for a client re-reading what
28
+ # completion handed back, the way +carts#complete+ already accepts it.
19
29
  def find_order!
20
30
  cart_pk = Spree::Cart.decode_own_prefixed_id(params[:id])
21
- @order = cart_pk ? scope.find_by!(cart_id: cart_pk) : scope.find_by_prefix_id!(params[:id])
31
+ @order = cart_pk ? find_by_cart!(cart_pk) : find_by_prefixed_id!(params[:id])
32
+ end
33
+
34
+ # @return [Spree::Order, Spree::OrderGroup]
35
+ def find_by_cart!(cart_pk)
36
+ scope.find_by(cart_id: cart_pk) || group_scope.find_by(cart_id: cart_pk) || not_found!
37
+ end
38
+
39
+ # @return [Spree::Order, Spree::OrderGroup]
40
+ def find_by_prefixed_id!(id)
41
+ scope.find_by_prefix_id(id) || group_scope.find_by_prefix_id(id) || not_found!
22
42
  end
23
43
 
24
- # `market` and `fulfillments` are the withdrawal deadline's inputs and
25
- # the serializer emits it on every response, so they are preloaded
26
- # here rather than through `collection_includes` — this controller
27
- # loads through `find_order!`, which never touches a collection.
44
+ # Neither lookup answered. The caller asked `/orders`, so that is what
45
+ # the 404 names — which of the two ran last is this endpoint's
46
+ # business, and `order_not_found` is the code clients already handle.
47
+ def not_found!
48
+ raise ActiveRecord::RecordNotFound.new(nil, Spree::Order.name)
49
+ end
50
+
51
+ # Preloaded lazily, which `collection` would do for a list: this
52
+ # controller loads through `find_order!`, so it asks for it itself.
53
+ # Every association the serializer walks — items, parcels, their
54
+ # rates and discounts — is then fetched once for all the rows that
55
+ # need it, rather than once per row.
28
56
  def scope
29
57
  storefront_access_policy.
30
58
  scope(current_store.orders.complete, token: order_token).
31
- includes(:market, :fulfillments)
59
+ preload_associations_lazily
60
+ end
61
+
62
+ # A group renders every child through the order serializer, so this
63
+ # matters most here: without it each seller in the checkout adds its
64
+ # own round of queries for the same associations.
65
+ def group_scope
66
+ storefront_access_policy.
67
+ scope(current_store.order_groups, token: order_token).
68
+ preload_associations_lazily
32
69
  end
33
70
 
34
71
  def serializer_class
35
- Spree.api.order_serializer
72
+ purchase_serializer_for(@order)
36
73
  end
37
74
  end
38
75
  end
@@ -9,6 +9,14 @@ module Spree
9
9
 
10
10
  protected
11
11
 
12
+ def additional_sort_fields
13
+ Spree::SearchProvider::Base::SORT_FIELDS
14
+ end
15
+
16
+ def custom_field_filters?
17
+ true
18
+ end
19
+
12
20
  def model_class
13
21
  Spree::Product
14
22
  end
@@ -7,6 +7,16 @@ module Spree
7
7
 
8
8
  prepend_before_action :require_authentication!
9
9
 
10
+ request_params 'CreateWishlistItemParams', action: :create do |body|
11
+ body.attribute :variant_id, :id, required: true, example: 'variant_abc123'
12
+ body.attribute :quantity, :integer, example: 1
13
+ end
14
+
15
+ request_params 'UpdateWishlistItemParams', action: :update do |body|
16
+ body.attribute :variant_id, :id, description: 'Moves the item to another variant.'
17
+ body.attribute :quantity, :integer, example: 2
18
+ end
19
+
10
20
  protected
11
21
 
12
22
  def set_parent
@@ -16,10 +26,6 @@ module Spree
16
26
  authorize_storefront_write!(@parent)
17
27
  end
18
28
 
19
- def parent_association
20
- :wishlist_items
21
- end
22
-
23
29
  def model_class
24
30
  Spree::WishlistItem
25
31
  end
@@ -28,10 +34,6 @@ module Spree
28
34
  Spree.api.wishlist_item_serializer
29
35
  end
30
36
 
31
- def resource_permitted_attributes
32
- [:variant_id, :quantity]
33
- end
34
-
35
37
  # The item renders its variant and product, so the variant must be
36
38
  # one the buyer could find in the listing — not a draft, another
37
39
  # catalog's product, or an id guessed from the sequence.
@@ -5,6 +5,18 @@ module Spree
5
5
  class WishlistsController < ResourceController
6
6
  prepend_before_action :require_authentication!
7
7
 
8
+ request_params 'CreateWishlistParams', action: :create do |body|
9
+ body.attribute :name, :string, required: true, example: 'Birthday Ideas'
10
+ body.attribute :is_private, :boolean
11
+ body.attribute :is_default, :boolean
12
+ end
13
+
14
+ request_params 'UpdateWishlistParams', action: :update do |body|
15
+ body.attribute :name, :string, example: 'Updated Name'
16
+ body.attribute :is_private, :boolean
17
+ body.attribute :is_default, :boolean
18
+ end
19
+
8
20
  # POST /api/v3/store/wishlists
9
21
  def create
10
22
  @resource = current_user.wishlists.build(permitted_params)
@@ -30,10 +42,6 @@ module Spree
30
42
  def serializer_class
31
43
  Spree.api.wishlist_serializer
32
44
  end
33
-
34
- def resource_permitted_attributes
35
- [:name, :is_default, :is_private]
36
- end
37
45
  end
38
46
  end
39
47
  end
@@ -0,0 +1,27 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ # The writable attributes of an address, wherever it hangs. One list
5
+ # rather than one per endpoint: an address is the same record on every
6
+ # write path, so a column added on one but missed on another would be
7
+ # dropped silently. Not published on its own: each endpoint includes
8
+ # these attributes into its own type, beside what it adds.
9
+ class AddressRequestSchema < Spree::Api::V3::RequestSchema
10
+ attribute :first_name, :string
11
+ attribute :last_name, :string
12
+ attribute :company, :string
13
+ attribute :address1, :string
14
+ attribute :address2, :string
15
+ attribute :city, :string
16
+ attribute :postal_code, :string
17
+ attribute :phone, :string
18
+ attribute :label, :string
19
+ attribute :country_code, :country, example: 'US', description: 'ISO 3166-1 alpha-2 code, such as `US`.'
20
+ attribute :state_code, :string,
21
+ example: 'NY',
22
+ description: 'The state or province abbreviation, such as `NY`.'
23
+ attribute :state_name, :string, description: 'For countries without states in the database.'
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The Admin API's address: the shared one plus the second phone number
6
+ # orders and customer address books keep.
7
+ class AddressRequestSchema < Spree::Api::V3::AddressRequestSchema
8
+ attribute :alternative_phone, :string
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The body of the shared bulk tag actions (Spree::Api::V3::BulkOperations).
6
+ # Each controller declares it as `BulkTagsParams` with only these fields,
7
+ # so the published component is the same wherever it is used.
8
+ class BulkTagsRequestSchema < Spree::Api::V3::RequestSchema
9
+ attribute :ids, :array, of: :id,
10
+ required: true,
11
+ description: 'The records to change. Records the caller cannot update are skipped; an empty list changes nothing.'
12
+ attribute :tags, :array, of: :string, required: true, example: %w[vip wholesale]
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The least a whole order must come to under a catalog, in one currency.
6
+ class CatalogOrderMinimumRequestSchema < Spree::Api::V3::RequestSchema
7
+ publishes 'CatalogOrderMinimumParams'
8
+
9
+ attribute :currency, :currency,
10
+ example: 'USD',
11
+ description: 'ISO 4217 code. Required on create; one minimum per currency.'
12
+ attribute :amount, :decimal, example: '500.00'
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The language every email template endpoint takes. Read from the raw
6
+ # params (Admin::EmailTemplateLookup), so never permitted. Not
7
+ # published on its own.
8
+ class EmailTemplateLanguageRequestSchema < Spree::Api::V3::RequestSchema
9
+ attribute :language, :string,
10
+ permit: false,
11
+ example: 'any',
12
+ description: 'A language code, or `any` (the default) for the version every language uses.'
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # What the email template preview and test email endpoints render.
6
+ # Not published on its own: both declare it as `EmailTemplatePreviewParams`.
7
+ class EmailTemplatePreviewRequestSchema < Spree::Api::V3::Admin::EmailTemplateLanguageRequestSchema
8
+ attribute :subject, :string,
9
+ nullable: true,
10
+ example: 'Your order {{ order.number }} is confirmed',
11
+ description: 'An unsaved subject, in place of the current one.'
12
+ attribute :body, :string,
13
+ example: '<mj-section><mj-column><mj-text>Thanks, {{ order.customer_name }}!</mj-text></mj-column></mj-section>',
14
+ description: 'An unsaved body, in place of the current one.'
15
+ attribute :record_id, :id,
16
+ example: 'or_m3Rp9wXz',
17
+ description: "The record to build sample data from; the store's latest matching record otherwise."
18
+ attribute :email_key, :string,
19
+ permit: false,
20
+ example: 'spree.order_mailer.confirm_email',
21
+ description: 'For the layout or a partial, the email to show it in.'
22
+ attribute :branding, :object,
23
+ permit: false,
24
+ description: "Unsaved colors and font to preview, named like the store's `email_*` settings." do |branding|
25
+ Spree::Emails::Branding::COLORS.each { |name| branding.attribute name, :string, nullable: true }
26
+ branding.attribute :font, :string, nullable: true, choices: Spree::Emails::Branding::FONTS.keys
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,21 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # One quantity tier of a price list's percentage adjustment.
6
+ class PriceAdjustmentTierRequestSchema < Spree::Api::V3::RequestSchema
7
+ publishes 'PriceAdjustmentTierParams'
8
+
9
+ attribute :min_quantity, :integer,
10
+ required: true,
11
+ example: 10,
12
+ description: "Above 1; quantity 1 is the list's own `price_adjustment_percentage`."
13
+ attribute :percentage, :decimal,
14
+ required: true,
15
+ example: '-10.0',
16
+ description: 'Signed: negative discounts, positive marks up.'
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # A fixed price a price list sets for one variant, currency and quantity.
6
+ class PriceListPriceRequestSchema < Spree::Api::V3::RequestSchema
7
+ publishes 'PriceListPriceOverrideParams'
8
+
9
+ attribute :id, :id,
10
+ description: 'Updates this price row. Without it, the row upserts on `(variant_id, currency, min_quantity)`.'
11
+ attribute :variant_id, :id, example: 'variant_xY9'
12
+ attribute :currency, :currency, example: 'USD'
13
+ attribute :min_quantity, :integer,
14
+ description: "The rung of the variant's ladder. Omit for the bottom rung."
15
+ attribute :amount, :decimal, nullable: true, example: '19.99'
16
+ attribute :compare_at_amount, :decimal, nullable: true, example: '19.99'
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # A rule deciding when a price list applies, as price lists and catalogs write it.
6
+ class PriceListRuleRequestSchema < Spree::Api::V3::RequestSchema
7
+ publishes 'PriceListRuleParams'
8
+
9
+ attribute :id, :id, nullable: true, description: 'Present for existing rules. Omit to create a new one.'
10
+ attribute :type, :string,
11
+ required: true,
12
+ example: 'volume_rule',
13
+ description: 'Wire shorthand for the rule kind, from the price rule types endpoint.'
14
+ attribute :preferences, :hash, description: "The rule kind's settings, keyed by preference name."
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Moving a product within a category's or a collection's product list.
6
+ class ProductMembershipRepositionRequestSchema < Spree::Api::V3::RequestSchema
7
+ publishes 'ProductMembershipRepositionParams'
8
+
9
+ attribute :new_position, :integer,
10
+ required: true,
11
+ example: 0,
12
+ description: "0-based index among the parent's products."
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The calculator of an adjustment promotion action.
6
+ class PromotionActionCalculatorRequestSchema < Spree::Api::V3::RequestSchema
7
+ publishes 'PromotionActionCalculatorParams'
8
+
9
+ attribute :type, :string,
10
+ example: 'flat_percent_item_total',
11
+ description: 'The calculator kind, from `GET /promotion_actions/calculators`. Changing it swaps the calculator.'
12
+ attribute :preferences, :hash,
13
+ description: "Values for the calculator's settings, such as `amount` or `flat_percent`."
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end