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
@@ -20,6 +20,38 @@ module Spree
20
20
 
21
21
  scoped_resource :seller_profile
22
22
 
23
+ # Enumerated rather than borrowing the legacy global list, which
24
+ # permits :id, :user_id and :deleted_at.
25
+ request_params 'ProfileUpdateParams' do |body|
26
+ body.attribute :name, :string, example: 'Acme Supplies'
27
+ body.attribute :contact_email, :string, nullable: true, format: :email
28
+ body.attribute :billing_email, :string, nullable: true, format: :email
29
+ body.attribute :about, :string,
30
+ nullable: true,
31
+ description: "Sanitized HTML: the seller's public description."
32
+ body.attribute :legal_name, :string,
33
+ nullable: true,
34
+ description: 'The business a commission invoice is made out to.'
35
+ body.attribute :registration_number, :string, nullable: true
36
+ body.attribute :logo_signed_id, :string,
37
+ nullable: true,
38
+ description: 'A `signed_id` from `POST /files`; `null` removes the image.'
39
+ body.attribute :square_logo_signed_id, :string,
40
+ nullable: true,
41
+ description: 'A `signed_id` from `POST /files`; `null` removes the image.'
42
+ body.attribute :cover_photo_signed_id, :string,
43
+ nullable: true,
44
+ description: 'A `signed_id` from `POST /files`; `null` removes the image.'
45
+ body.attribute :billing_address, :object, as: 'SellerAddressParams' do |billing_address|
46
+ billing_address.include_attributes Spree::Api::V3::AddressRequestSchema
47
+ end
48
+ body.attribute :custom_fields, :array, of: Spree::Api::V3::CustomFieldValueRequestSchema,
49
+ description: "Answers to the custom fields this marketplace's onboarding asks for. A field nothing asked for is ignored rather than written."
50
+ body.attribute :accept_terms, :boolean,
51
+ permit: false,
52
+ description: "Stamps the moment the seller accepted the marketplace's terms. One-way: sending `false` does not unmake the stamp."
53
+ end
54
+
23
55
  def show
24
56
  render json: serialize_seller
25
57
  end
@@ -54,8 +86,6 @@ module Spree
54
86
  %w[show]
55
87
  end
56
88
 
57
- # Enumerated rather than borrowing the legacy global list, which
58
- # permits :id, :user_id and :deleted_at.
59
89
  # Accepting the marketplace's terms is a profile write, not an endpoint
60
90
  # of its own: `accept_terms: true` stamps the time, which is what the
61
91
  # AcceptTerms requirement reads.
@@ -104,14 +134,7 @@ module Spree
104
134
  end
105
135
 
106
136
  def permitted_params
107
- normalize_params(
108
- params.permit(:name, :contact_email, :billing_email, :about,
109
- :legal_name, :registration_number,
110
- :logo, :square_logo, :cover_photo,
111
- billing_address: Spree::Api::V3::AddressParams::ADDRESS_KEYS,
112
- custom_fields: [:id, :custom_field_definition_id, :value,
113
- { value: [] }, { value: {} }])
114
- )
137
+ normalize_params(params.permit(*declared_permitted_attributes))
115
138
  end
116
139
 
117
140
  private
@@ -12,6 +12,16 @@ module Spree
12
12
  class RequirementSubmissionsController < Seller::BaseController
13
13
  scoped_resource :seller_profile
14
14
 
15
+ # `file_signed_id` comes from POST /files, so the bytes are already in
16
+ # storage by the time this runs.
17
+ request_params 'RequirementSubmissionParams' do |body|
18
+ body.attribute :note, :string, description: 'Anything the seller wants to say alongside the submission.'
19
+ body.attribute :reference, :string,
20
+ description: 'A reference number or external identifier, for requirements that ask for one.'
21
+ body.attribute :file_signed_id, :string,
22
+ description: 'A `signed_id` from `POST /files`, for requirements that ask for a document.'
23
+ end
24
+
15
25
  before_action :set_requirement, only: [:create]
16
26
  before_action :set_submission, only: [:download]
17
27
 
@@ -24,7 +34,7 @@ module Spree
24
34
  requirement: @requirement,
25
35
  note: attributes[:note],
26
36
  reference: attributes[:reference],
27
- file: attributes[:file],
37
+ file: attributes[:file_signed_id],
28
38
  submitted_by: try_spree_current_user
29
39
  )
30
40
 
@@ -42,7 +52,7 @@ module Spree
42
52
  unless @submission.file.attached?
43
53
  return render_error(
44
54
  code: ErrorHandler::ERROR_CODES[:validation_error],
45
- message: Spree.t(:seller_submission_no_file),
55
+ message: I18n.t('spree.seller_submission_no_file'),
46
56
  status: :unprocessable_content
47
57
  )
48
58
  end
@@ -57,11 +67,8 @@ module Spree
57
67
 
58
68
  protected
59
69
 
60
- # What a seller may say about a requirement. `file` is a direct-upload
61
- # signed id, so it is a string like the rest — the bytes are already
62
- # in storage by the time this runs.
63
70
  def permitted_params
64
- params.permit(:note, :reference, :file)
71
+ params.permit(*declared_permitted_attributes)
65
72
  end
66
73
 
67
74
  def read_actions
@@ -11,6 +11,7 @@ module Spree
11
11
  include Spree::Api::V3::Seller::SellerContext
12
12
  include Spree::Api::V3::SellerAuthentication
13
13
  include Spree::Api::V3::ScopedAuthorization
14
+ include Spree::Api::V3::StrictMoneyParams
14
15
 
15
16
  protected
16
17
 
@@ -65,6 +66,17 @@ module Spree
65
66
  model_class.table_name.delete_prefix('spree_').to_sym
66
67
  end
67
68
 
69
+ # What extensions opened to sellers, never the operator-level list:
70
+ # an attribute opened to operators must not become seller-writable
71
+ # by accident.
72
+ def model_additional_permitted_attributes
73
+ return [] unless respond_to?(:model_class, true)
74
+
75
+ Array(model_class.try(:additional_seller_permitted_attributes))
76
+ rescue NotImplementedError
77
+ []
78
+ end
79
+
68
80
  def authorize_resource!(resource = @resource, action = action_name.to_sym)
69
81
  authorize!(action, resource)
70
82
  end
@@ -24,6 +24,49 @@ module Spree
24
24
  # stock.
25
25
  scoped_resource :stock
26
26
 
27
+ # The same set the operator's controller permits: a seller runs
28
+ # their own warehouse, so every field on the shared form is theirs to
29
+ # set. Anything missing here is dropped by `permit` without a word,
30
+ # and the form would appear to save while quietly discarding it.
31
+ request_params :stock_location do |body|
32
+ body.attribute :name, :string, required: true, on: :create, example: 'Main warehouse'
33
+ body.attribute :admin_name, :string, nullable: true
34
+ body.attribute :active, :boolean, description: 'Set `false` to retire a location: there is no delete.'
35
+ body.attribute :default, :boolean
36
+ body.attribute :kind, :string,
37
+ choices: Spree::StockLocation::KINDS,
38
+ open: true,
39
+ example: 'warehouse',
40
+ description: 'Categorizes the location.'
41
+ body.attribute :propagate_all_variants, :boolean
42
+ body.attribute :backorderable_default, :boolean
43
+ body.attribute :address1, :string, nullable: true
44
+ body.attribute :address2, :string, nullable: true
45
+ body.attribute :city, :string, nullable: true
46
+ body.attribute :zipcode, :string, nullable: true
47
+ body.attribute :phone, :string, nullable: true
48
+ body.attribute :company, :string, nullable: true
49
+ body.attribute :country_code, :country,
50
+ nullable: true,
51
+ example: 'US',
52
+ description: 'ISO-3166 alpha-2 country code.'
53
+ body.attribute :state_code, :string,
54
+ nullable: true,
55
+ example: 'OR',
56
+ description: "State or province abbreviation, resolved against the selected country's states."
57
+ body.attribute :state_name, :string,
58
+ nullable: true,
59
+ description: "Free-text state for countries that don't have a states list."
60
+ body.attribute :pickup_enabled, :boolean
61
+ body.attribute :pickup_stock_policy, :string,
62
+ choices: Spree::StockLocation::PICKUP_STOCK_POLICIES,
63
+ description: '`local` collects only items at this location; `any` lets items transfer in from other locations (ship-to-store).'
64
+ body.attribute :pickup_ready_in_minutes, :integer, nullable: true
65
+ body.attribute :returns_enabled, :boolean,
66
+ description: 'Whether customers may send returns to this location.'
67
+ body.attribute :pickup_instructions, :string, nullable: true
68
+ end
69
+
27
70
  protected
28
71
 
29
72
  def model_class
@@ -34,20 +77,8 @@ module Spree
34
77
  Spree.api.seller_stock_location_serializer
35
78
  end
36
79
 
37
- # The same set the operator's controller permits: a seller runs
38
- # their own warehouse, so every field on the shared form is theirs to
39
- # set. Anything missing here is dropped by `permit` without a word,
40
- # and the form would appear to save while quietly discarding it.
41
80
  def permitted_params
42
- params.permit(
43
- *model_additional_permitted_attributes,
44
- :name, :admin_name, :active, :default,
45
- :kind, :propagate_all_variants, :backorderable_default,
46
- :address1, :address2, :city, :zipcode, :phone, :company,
47
- :country_code, :state_code, :state_name,
48
- :pickup_enabled, :pickup_stock_policy, :returns_enabled,
49
- :pickup_ready_in_minutes, :pickup_instructions
50
- )
81
+ params.permit(*permitted_attributes)
51
82
  end
52
83
  end
53
84
  end
@@ -24,6 +24,15 @@ module Spree
24
24
  # standard actions have to be listed alongside the custom one.
25
25
  before_action :set_resource, only: [:show, :update, :destroy, :validate]
26
26
 
27
+ request_params :seller_tax_identifier do |body|
28
+ body.attribute :kind, :string, required: true, on: :create,
29
+ example: 'eu_vat',
30
+ description: "#{Spree::Api::V3::TaxIdentifierRequestSchema::KIND_DESCRIPTION} One registration per kind."
31
+ body.attribute :value, :string, required: true, on: :create,
32
+ example: 'DE100000008',
33
+ description: 'A number the validator for its kind refuses is rejected rather than stored.'
34
+ end
35
+
27
36
  protected
28
37
 
29
38
  def model_class
@@ -39,7 +48,7 @@ module Spree
39
48
  end
40
49
 
41
50
  def permitted_params
42
- params.permit(:kind, :value)
51
+ params.permit(*declared_permitted_attributes)
43
52
  end
44
53
  end
45
54
  end
@@ -16,6 +16,10 @@ module Spree
16
16
 
17
17
  before_action :set_member, only: [:destroy]
18
18
 
19
+ request_params :team_member do |body|
20
+ body.attribute :email, :string, required: true, example: 'colleague@acme.test'
21
+ end
22
+
19
23
  def index
20
24
  render json: { data: members.map { |member| serialize_member(member) } }
21
25
  end
@@ -68,7 +72,7 @@ module Spree
68
72
 
69
73
  render_error(
70
74
  code: ErrorHandler::ERROR_CODES[:processing_error],
71
- message: Spree.t(:seller_team_last_member),
75
+ message: I18n.t('spree.seller_team_last_member'),
72
76
  status: :unprocessable_content
73
77
  )
74
78
  end
@@ -16,6 +16,16 @@ module Spree
16
16
 
17
17
  skip_before_action :authenticate_user, only: [:create, :refresh, :logout]
18
18
 
19
+ request_params 'RefreshTokenParams', action: :refresh do |body|
20
+ body.attribute :refresh_token, :string,
21
+ required: true,
22
+ description: 'The refresh token from the login response.'
23
+ end
24
+
25
+ request_params 'LogoutParams', action: :logout do |body|
26
+ body.attribute :refresh_token, :string, description: 'The refresh token to revoke.'
27
+ end
28
+
19
29
  # POST /api/v3/store/auth/login
20
30
  # Supports multiple authentication providers via :provider param
21
31
  # Example:
@@ -9,6 +9,13 @@ module Spree
9
9
 
10
10
  before_action :find_cart!
11
11
 
12
+ request_params 'ApplyDiscountCodeParams', action: :create do |body|
13
+ body.attribute :code, :string,
14
+ required: true,
15
+ example: 'SAVE10',
16
+ description: 'The promotion code to apply.'
17
+ end
18
+
12
19
  # POST /api/v3/store/carts/:cart_id/discount_codes
13
20
  # Applies a discount code. A real-but-not-yet-eligible code is
14
21
  # accepted and persisted — recalculation activates the discount
@@ -64,12 +71,12 @@ module Spree
64
71
  def attach_pending_coupon_warning
65
72
  @cart.warnings |= [{
66
73
  code: coupon_handler.status_code.to_s,
67
- message: coupon_handler.error.presence || Spree.t(:coupon_code_not_eligible)
74
+ message: coupon_handler.error.presence || I18n.t('spree.coupon_code_not_eligible')
68
75
  }]
69
76
  end
70
77
 
71
78
  def permitted_params
72
- params.permit(:code)
79
+ params.permit(*declared_permitted_attributes)
73
80
  end
74
81
  end
75
82
  end
@@ -9,13 +9,12 @@ module Spree
9
9
 
10
10
  before_action :find_cart!
11
11
 
12
- # GET /api/v3/store/carts/:cart_id/fulfillments
13
- def index
14
- fulfillments = @cart.fulfillments.includes(delivery_rates: :delivery_method)
15
- render json: {
16
- data: fulfillments.map { |s| Spree.api.fulfillment_serializer.new(s, params: serializer_params).to_h },
17
- meta: { count: fulfillments.size }
18
- }
12
+ request_params 'UpdateFulfillmentParams', action: :update do |body|
13
+ body.attribute :selected_delivery_rate_id, :id,
14
+ example: 'dr_abc123',
15
+ description: 'The delivery rate to select.'
16
+ body.attribute :pickup_point_external_id, :string,
17
+ description: "For a pickup point delivery method: the provider's id of the point to collect from."
19
18
  end
20
19
 
21
20
  # PATCH /api/v3/store/carts/:cart_id/fulfillments/:id
@@ -36,6 +35,7 @@ module Spree
36
35
 
37
36
  recalculate
38
37
 
38
+ sweep_unavailable_coupon_code!
39
39
  render_cart
40
40
  end
41
41
  end
@@ -43,7 +43,7 @@ module Spree
43
43
  private
44
44
 
45
45
  def permitted_params
46
- params.permit(:selected_delivery_rate_id, :pickup_point_external_id)
46
+ params.permit(*declared_permitted_attributes)
47
47
  end
48
48
 
49
49
  def recalculate
@@ -62,8 +62,8 @@ module Spree
62
62
  if provider.nil?
63
63
  render_error(
64
64
  code: ERROR_CODES[:validation_error],
65
- message: Spree.t('errors.messages.no_pickup_point_provider'),
66
- status: :unprocessable_entity
65
+ message: I18n.t('spree.errors.messages.no_pickup_point_provider'),
66
+ status: :unprocessable_content
67
67
  )
68
68
  return false
69
69
  end
@@ -72,7 +72,7 @@ module Spree
72
72
  if point.nil?
73
73
  render_error(
74
74
  code: ERROR_CODES[:record_not_found],
75
- message: Spree.t('errors.messages.pickup_point_not_found'),
75
+ message: I18n.t('spree.errors.messages.pickup_point_not_found'),
76
76
  status: :not_found
77
77
  )
78
78
  return false
@@ -9,6 +9,13 @@ module Spree
9
9
 
10
10
  before_action :find_cart!
11
11
 
12
+ request_params 'ApplyGiftCardParams', action: :create do |body|
13
+ body.attribute :code, :string,
14
+ required: true,
15
+ example: 'GC-ABCD-1234',
16
+ description: 'The gift card code to apply.'
17
+ end
18
+
12
19
  # POST /api/v3/store/carts/:cart_id/gift_cards
13
20
  def create
14
21
  with_order_lock do
@@ -18,6 +25,7 @@ module Spree
18
25
  result = @cart.apply_gift_card(gift_card)
19
26
 
20
27
  if result.success?
28
+ sweep_unavailable_coupon_code!
21
29
  render_cart(status: :created)
22
30
  else
23
31
  render_service_error(result.error)
@@ -31,6 +39,7 @@ module Spree
31
39
  result = @cart.remove_gift_card
32
40
 
33
41
  if result.success?
42
+ sweep_unavailable_coupon_code!
34
43
  render_cart
35
44
  else
36
45
  render_service_error(result.error)
@@ -44,17 +53,17 @@ module Spree
44
53
  gift_card = @cart.store.gift_cards.find_by(code: permitted_params[:code]&.downcase)
45
54
 
46
55
  if gift_card.nil?
47
- render_error(code: ERROR_CODES[:gift_card_not_found], message: Spree.t(:gift_card_not_found), status: :not_found)
56
+ render_error(code: ERROR_CODES[:gift_card_not_found], message: I18n.t('spree.gift_card_not_found'), status: :not_found)
48
57
  return
49
58
  end
50
59
 
51
60
  if gift_card.expired?
52
- render_error(code: ERROR_CODES[:gift_card_expired], message: Spree.t(:gift_card_expired), status: :unprocessable_content)
61
+ render_error(code: ERROR_CODES[:gift_card_expired], message: I18n.t('spree.gift_card_expired'), status: :unprocessable_content)
53
62
  return
54
63
  end
55
64
 
56
65
  if gift_card.redeemed?
57
- render_error(code: ERROR_CODES[:gift_card_already_redeemed], message: Spree.t(:gift_card_already_redeemed), status: :unprocessable_content)
66
+ render_error(code: ERROR_CODES[:gift_card_already_redeemed], message: I18n.t('spree.gift_card_already_redeemed'), status: :unprocessable_content)
58
67
  return
59
68
  end
60
69
 
@@ -62,7 +71,7 @@ module Spree
62
71
  end
63
72
 
64
73
  def permitted_params
65
- params.permit(:code)
74
+ params.permit(*declared_permitted_attributes)
66
75
  end
67
76
  end
68
77
  end
@@ -9,6 +9,22 @@ module Spree
9
9
 
10
10
  before_action :find_cart!
11
11
 
12
+ request_params 'AddLineItemParams', action: :create do |body|
13
+ body.attribute :variant_id, :id, required: true, example: 'variant_abc123'
14
+ body.attribute :quantity, :integer, example: 2, description: 'Defaults to 1.'
15
+ body.attribute :metadata, :hash,
16
+ example: { gift_message: 'Happy Birthday!' },
17
+ description: 'Write-only key-value metadata.'
18
+ body.attribute :options, :hash, description: 'Values for line item attributes an extension adds.'
19
+ end
20
+
21
+ request_params 'UpdateLineItemParams', action: :update do |body|
22
+ body.attribute :quantity, :integer, example: 5, description: 'At least 1. Remove an item with DELETE.'
23
+ body.attribute :metadata, :hash,
24
+ example: { engraving: 'J.D.' },
25
+ description: 'Write-only key-value metadata, merged with what the line item has.'
26
+ end
27
+
12
28
  # POST /api/v3/store/carts/:cart_id/items
13
29
  def create
14
30
  with_order_lock do
@@ -21,6 +37,7 @@ module Spree
21
37
  )
22
38
 
23
39
  if result.success?
40
+ sweep_unavailable_coupon_code!
24
41
  render_cart(status: :created)
25
42
  else
26
43
  render_result_error(result)
@@ -41,7 +58,7 @@ module Spree
41
58
  if permitted_params[:quantity].to_i < 1
42
59
  return render_error(
43
60
  code: ERROR_CODES[:invalid_quantity],
44
- message: Spree.t('cart_line_item.quantity_must_be_positive'),
61
+ message: I18n.t('spree.cart_line_item.quantity_must_be_positive'),
45
62
  status: :unprocessable_content
46
63
  )
47
64
  end
@@ -56,6 +73,7 @@ module Spree
56
73
  )
57
74
 
58
75
  if result.success?
76
+ sweep_unavailable_coupon_code!
59
77
  render_cart
60
78
  else
61
79
  render_result_error(result)
@@ -67,6 +85,7 @@ module Spree
67
85
  @line_item.update!(metadata: @line_item.metadata.merge(permitted_params[:metadata].to_h))
68
86
  end
69
87
 
88
+ sweep_unavailable_coupon_code!
70
89
  render_cart
71
90
  end
72
91
  end
@@ -83,6 +102,7 @@ module Spree
83
102
  )
84
103
 
85
104
  if result.success?
105
+ sweep_unavailable_coupon_code!
86
106
  render_cart
87
107
  else
88
108
  render_result_error(result)
@@ -93,7 +113,7 @@ module Spree
93
113
  private
94
114
 
95
115
  def variant
96
- @variant ||= current_store.variants.find_by_prefix_id!(permitted_params[:variant_id])
116
+ @variant ||= @cart.orderable_variants.find_by_prefix_id!(permitted_params[:variant_id])
97
117
  end
98
118
 
99
119
  # Extension attributes ride in `options`, which is how AddItem
@@ -109,11 +129,7 @@ module Spree
109
129
  end
110
130
 
111
131
  def permitted_params
112
- params.permit(
113
- :id, :variant_id, :quantity,
114
- *Spree::LineItem.additional_permitted_attributes,
115
- { metadata: {}, options: {} }
116
- )
132
+ params.permit(*declared_permitted_attributes, *Spree::LineItem.additional_permitted_attributes)
117
133
  end
118
134
  end
119
135
  end
@@ -10,6 +10,24 @@ module Spree
10
10
  before_action :find_cart!
11
11
  before_action :set_payment_session, only: [:show, :update, :complete]
12
12
 
13
+ request_params 'CreatePaymentSessionParams', action: :create do |body|
14
+ body.attribute :payment_method_id, :id, required: true, example: 'pm_abc123'
15
+ body.attribute :amount, :decimal,
16
+ example: '99.99',
17
+ description: 'Defaults to the order total minus store credits.'
18
+ body.attribute :external_data, :hash, description: 'Provider-specific data passed to the gateway.'
19
+ end
20
+
21
+ request_params 'UpdatePaymentSessionParams', action: :update do |body|
22
+ body.attribute :amount, :decimal, example: '50.00'
23
+ body.attribute :external_data, :hash, description: 'Provider-specific data to update.'
24
+ end
25
+
26
+ request_params 'CompletePaymentSessionParams', action: :complete do |body|
27
+ body.attribute :session_result, :string, description: 'Provider-specific session result token.'
28
+ body.attribute :external_data, :hash, description: 'Provider-specific completion data.'
29
+ end
30
+
13
31
  # POST /api/v3/store/carts/:cart_id/payment_sessions
14
32
  def create
15
33
  with_order_lock do
@@ -19,7 +37,7 @@ module Spree
19
37
  unless payment_method.available_for_order?(@cart)
20
38
  return render_error(
21
39
  code: 'payment_method_unavailable',
22
- message: Spree.t('api.v3.payments.method_unavailable'),
40
+ message: I18n.t('spree.api.v3.payments.method_unavailable'),
23
41
  status: :unprocessable_content
24
42
  )
25
43
  end
@@ -94,15 +112,11 @@ module Spree
94
112
  end
95
113
 
96
114
  def permitted_params
97
- params.permit(
98
- :amount, :payment_method_id,
99
- *Spree::PaymentSession.additional_permitted_attributes,
100
- { external_data: {} }
101
- )
115
+ params.permit(*declared_permitted_attributes, *Spree::PaymentSession.additional_permitted_attributes)
102
116
  end
103
117
 
104
118
  def complete_params
105
- params.permit(:session_result, { external_data: {} })
119
+ params.permit(*declared_permitted_attributes)
106
120
  end
107
121
 
108
122
  private
@@ -8,6 +8,17 @@ module Spree
8
8
 
9
9
  before_action :find_cart!
10
10
 
11
+ request_params 'CreatePaymentParams', action: :create do |body|
12
+ body.attribute :payment_method_id, :id,
13
+ required: true,
14
+ example: 'pm_abc123',
15
+ description: 'A payment method that needs no payment session.'
16
+ body.attribute :amount, :decimal,
17
+ example: '99.99',
18
+ description: 'Defaults to the order total minus store credits.'
19
+ body.attribute :metadata, :hash, description: 'Key-value metadata to attach to the payment.'
20
+ end
21
+
11
22
  # POST /api/v3/store/carts/:cart_id/payments
12
23
  # Creates a payment for non-session payment methods (e.g. Check, Cash on Delivery, Bank Transfer)
13
24
  def create
@@ -20,15 +31,17 @@ module Spree
20
31
  if payment_method.session_required?
21
32
  return render_error(
22
33
  code: 'payment_session_required',
23
- message: Spree.t('api.v3.payments.session_required'),
34
+ message: I18n.t('spree.api.v3.payments.session_required'),
24
35
  status: :unprocessable_content
25
36
  )
26
37
  end
27
38
 
28
- unless payment_method.available_for_order?(@cart)
39
+ # Store credit passes the lookup above but has its own endpoint, so
40
+ # it is never among the methods the cart offers.
41
+ unless @cart.payment_methods.include?(payment_method)
29
42
  return render_error(
30
43
  code: 'payment_method_unavailable',
31
- message: Spree.t('api.v3.payments.method_unavailable'),
44
+ message: I18n.t('spree.api.v3.payments.method_unavailable'),
32
45
  status: :unprocessable_content
33
46
  )
34
47
  end