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
@@ -5,6 +5,27 @@ module Spree
5
5
  class MediaController < ResourceController
6
6
  scoped_resource :products
7
7
 
8
+ # The media file, a URL to fetch one from, and the library row to copy
9
+ # are transport, not attributes (+media_attributes+ drops them).
10
+ request_params :media do |body|
11
+ body.external_references
12
+ body.include_attributes Spree::Api::V3::MediaRequestSchema
13
+ body.attribute :attachment, :string,
14
+ description: 'The file itself, sent as multipart form data. JSON clients upload first and send `signed_id`.'
15
+ # How the file arrives, so creating only: an update keeps its file.
16
+ body.attribute :url, :string,
17
+ only: :create,
18
+ description: 'Fetch an image from this URL, in the background. Images only: an external video uses `external_video_url`.'
19
+ body.attribute :signed_id, :string,
20
+ only: :create,
21
+ description: 'A `signed_id` from `files.upload()` for the media file itself.'
22
+ body.attribute :source_media_id, :id,
23
+ only: :create,
24
+ description: 'Place a file that is already in the library. The new row shares the source file rather than copying it, and takes its own alt, position and variant links from here.'
25
+ body.attribute :variant_ids, :array, of: :id,
26
+ description: 'Variants to link this product-level media to. Variants of other products are dropped.'
27
+ end
28
+
8
29
  def create
9
30
  # An external video has no file, so it takes the plain create path
10
31
  # even though a URL is present — `url` means "fetch this image from
@@ -91,16 +112,8 @@ module Spree
91
112
  permitted_params.except(:attachment, :url, :signed_id, :source_media_id)
92
113
  end
93
114
 
94
- # The media file, a URL to fetch one from, and the library row to copy
95
- # are transport, not attributes — everything a client can set lives on
96
- # the model.
97
115
  def permitted_params
98
- params.permit(
99
- *model_additional_permitted_attributes,
100
- *Spree::Media::WRITABLE_ATTRIBUTES,
101
- :attachment, :url, :signed_id, :source_media_id,
102
- variant_ids: []
103
- )
116
+ params.permit(*permitted_attributes)
104
117
  end
105
118
 
106
119
  def external_video_request?
@@ -19,6 +19,10 @@ module Spree
19
19
  # `products` — those are one product's own media, reached through a
20
20
  # product the caller can already see.
21
21
  scoped_resource :media
22
+
23
+ request_params :media_library do |body|
24
+ body.include_attributes MediaController.request_params_schema
25
+ end
22
26
  # Restates the base class's member actions with `usage` added — a
23
27
  # second `before_action :set_resource` would replace that filter
24
28
  # rather than extend it, leaving show/update/destroy without a record.
@@ -39,8 +43,8 @@ module Spree
39
43
  unless detach_requested?
40
44
  return render_error(
41
45
  code: ERROR_CODES[:resource_invalid],
42
- message: Spree.t(
43
- 'api.errors.media_in_use',
46
+ message: I18n.t(
47
+ 'spree.api.errors.media_in_use',
44
48
  places: references.filter_map(&:name).uniq.first(5).to_sentence
45
49
  ),
46
50
  status: :unprocessable_content,
@@ -55,7 +59,7 @@ module Spree
55
59
  # render_service_error would produce an empty message.
56
60
  render_error(
57
61
  code: ERROR_CODES[:processing_error],
58
- message: Spree.t('api.errors.media_not_deleted'),
62
+ message: I18n.t('spree.api.errors.media_not_deleted'),
59
63
  status: :unprocessable_content
60
64
  )
61
65
  end
@@ -79,7 +83,7 @@ module Spree
79
83
  {
80
84
  kind: reference.kind,
81
85
  name: reference.name,
82
- owner_type: reference.owner_type,
86
+ owner_type: Spree::Base.polymorphic_api_type(reference.owner_type),
83
87
  owner_id: reference.owner_id,
84
88
  field: reference.field
85
89
  }
@@ -145,7 +149,7 @@ module Spree
145
149
  def create_from_url
146
150
  render_error(
147
151
  code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:resource_invalid],
148
- message: Spree.t('api.errors.media_url_import_requires_product'),
152
+ message: I18n.t('spree.api.errors.media_url_import_requires_product'),
149
153
  status: :unprocessable_content
150
154
  )
151
155
  end
@@ -5,6 +5,29 @@ module Spree
5
5
  class OptionTypesController < ResourceController
6
6
  scoped_resource :products
7
7
 
8
+ request_params :option_type do |body|
9
+ body.attribute :name, :string, required: true, on: :create, example: 'color'
10
+ body.attribute :label, :string, required: true, on: :create, example: 'Color'
11
+ body.attribute :position, :integer
12
+ body.attribute :filterable, :boolean
13
+ body.attribute :kind, :string, choices: Spree::OptionType::KINDS
14
+ body.attribute :option_values, :array,
15
+ as: 'OptionValueParams',
16
+ description: 'Inline option values. Values left out of the list on update are destroyed, so send the full set every time.' do |option_value|
17
+ option_value.attribute :id, :id, description: 'Present for existing values. Omit to create a new one.'
18
+ option_value.attribute :name, :string, example: 'red'
19
+ option_value.attribute :label, :string, example: 'Red'
20
+ option_value.attribute :position, :integer
21
+ option_value.attribute :color_code, :string,
22
+ nullable: true,
23
+ example: '#FF0000',
24
+ description: "Hex color. Only meaningful when the option type's `kind` is `color_swatch`."
25
+ option_value.attribute :image_signed_id, :string,
26
+ nullable: true,
27
+ description: 'A `signed_id` from `files.upload()`, or null to remove the image.'
28
+ end
29
+ end
30
+
8
31
  protected
9
32
 
10
33
  def model_class
@@ -20,13 +43,7 @@ module Spree
20
43
  end
21
44
 
22
45
  def permitted_params
23
- params.permit(
24
- *model_additional_permitted_attributes,
25
- :name, :label, :position, :filterable, :kind,
26
- option_values: [
27
- :id, :name, :label, :position, :color_code, :image
28
- ]
29
- )
46
+ params.permit(*permitted_attributes)
30
47
  end
31
48
  end
32
49
  end
@@ -5,6 +5,10 @@ module Spree
5
5
  class OrderCancellationReasonsController < ResourceController
6
6
  scoped_resource :settings
7
7
 
8
+ request_params :reason do |body|
9
+ body.include_attributes Spree::Api::V3::Admin::ReasonRequestSchema
10
+ end
11
+
8
12
  protected
9
13
 
10
14
  def model_class
@@ -16,7 +20,7 @@ module Spree
16
20
  end
17
21
 
18
22
  def permitted_params
19
- params.permit(*model_additional_permitted_attributes, :name, :active)
23
+ params.permit(*permitted_attributes)
20
24
  end
21
25
  end
22
26
  end
@@ -13,6 +13,18 @@ module Spree
13
13
  subclassed_via -> { Spree.order_routing.rules },
14
14
  unknown_type_error: 'unknown_order_routing_rule_type'
15
15
 
16
+ request_params :order_routing_rule do |body|
17
+ body.attribute :type, :string,
18
+ required: true,
19
+ only: :create,
20
+ example: 'preferred_location',
21
+ description: 'Wire shorthand for the rule kind, from the order routing rule types endpoint.'
22
+ body.attribute :active, :boolean
23
+ body.attribute :position, :integer,
24
+ description: "1-based priority in the channel's rule list. Omitted on create, the rule goes last; a new position reorders the rest of the list around it."
25
+ body.attribute :preferences, :hash, description: "Values for the rule kind's preference schema."
26
+ end
27
+
16
28
  def types
17
29
  authorize! :read, model_class
18
30
 
@@ -30,7 +42,7 @@ module Spree
30
42
  end
31
43
 
32
44
  def permitted_params
33
- params.permit(*model_additional_permitted_attributes, :type, :active, :position, preferences: {})
45
+ params.permit(*permitted_attributes)
34
46
  end
35
47
 
36
48
  # `types` is read-only discovery — maps to the read scope + :show ability.
@@ -49,10 +61,6 @@ module Spree
49
61
  .find_by_prefix_id!(params[:channel_id])
50
62
  end
51
63
 
52
- def parent_association
53
- :order_routing_rules
54
- end
55
-
56
64
  private
57
65
 
58
66
  def build_subclassed_resource(klass, attrs)
@@ -12,6 +12,44 @@ module Spree
12
12
  # would name a key no catalog knows.
13
13
  scoped_resource :orders
14
14
 
15
+ request_params :claim do |body|
16
+ body.attribute :items, :array,
17
+ required: true, on: :create,
18
+ only: :create,
19
+ description: 'Affected items, and how each should be made right.' do |item|
20
+ item.attribute :line_item_id, :id, required: true
21
+ item.attribute :quantity, :integer, required: true
22
+ item.attribute :description, :string
23
+ item.attribute :send_replacement, :boolean
24
+ item.attribute :replacement_variant_id, :id, description: 'Defaults to the variant that was bought.'
25
+ item.attribute :refund_amount, :decimal
26
+ end
27
+ body.attribute :reason_id, :id, description: "One of the store's claim reasons."
28
+ body.attribute :memo, :string
29
+ body.attribute :metadata, :hash, only: :update
30
+ end
31
+
32
+ request_params 'ClaimResolveParams', action: :resolve do |body|
33
+ body.attribute :resolution, :string,
34
+ required: true,
35
+ choices: Spree::Claim::RESOLUTIONS,
36
+ description: 'Money back, a replacement shipment, or both.'
37
+ body.attribute :refund_method, :string,
38
+ choices: Spree::RefundMethods::METHODS,
39
+ description: 'Defaults to `store_credit`.'
40
+ body.attribute :amount, :decimal, description: 'Defaults to the claim total.'
41
+ body.attribute :replacement_line_item_ids, :array, of: :id,
42
+ description: 'Which claim lines to send a replacement for. Omit to keep what the claim was opened with.'
43
+ end
44
+
45
+ request_params 'ClaimDenyParams', action: :deny do |body|
46
+ body.attribute :reason, :string, description: 'Recorded on the claim for the customer.'
47
+ end
48
+
49
+ request_params 'ClaimCancelParams', action: :cancel do |body|
50
+ body.attribute :reason, :string, description: 'A note on why the claim was canceled.'
51
+ end
52
+
15
53
  before_action :set_resource, only: [:show, :update, :approve, :resolve, :deny, :cancel]
16
54
 
17
55
  # PATCH /api/v3/admin/orders/:order_id/claims/:id
@@ -36,7 +74,7 @@ module Spree
36
74
  end
37
75
 
38
76
  def permitted_params
39
- params.permit(:memo, :reason_id, metadata: {})
77
+ params.permit(*permitted_attributes)
40
78
  end
41
79
 
42
80
  private
@@ -13,6 +13,24 @@ module Spree
13
13
  class DeliveriesController < BaseController
14
14
  include Spree::Api::V3::Orders::DeliveryActions
15
15
 
16
+ # The permit list itself lives in DeliveryActions, shared with the
17
+ # seller branch; this declaration documents it.
18
+ request_params :delivery do |body|
19
+ body.attribute :tracking_number, :string,
20
+ required: true, on: :create,
21
+ description: 'A carrier tracking number, a freight PRO or container number, or a full tracking link. A corrected number resets the carrier status to `pending`.'
22
+ body.attribute :carrier, :string,
23
+ description: "Free text; detected from the number's format when omitted."
24
+ body.attribute :service, :string
25
+ body.attribute :tracking_url, :string
26
+ end
27
+
28
+ request_params 'DeliveryMarkDeliveredParams', action: :mark_delivered do |body|
29
+ body.attribute :delivered_at, :datetime, description: 'When it arrived. Defaults to now.'
30
+ body.attribute :notify_customer, :boolean,
31
+ description: 'Whether the customer gets a delivery notification once the parcel completes. Defaults to true.'
32
+ end
33
+
16
34
  before_action :set_resource, only: [:show, :update, :destroy, :mark_delivered]
17
35
 
18
36
  # PATCH .../deliveries/:id/mark_delivered — staff saying this one
@@ -27,11 +45,7 @@ module Spree
27
45
  notify_customer: notify_customer?(mark_delivered_params[:notify_customer])
28
46
  )
29
47
 
30
- if result.success?
31
- render json: serialize_resource(result.value)
32
- else
33
- render_result_error(result)
34
- end
48
+ render_result(result)
35
49
  end
36
50
  end
37
51
 
@@ -51,7 +65,7 @@ module Spree
51
65
  private
52
66
 
53
67
  def mark_delivered_params
54
- @mark_delivered_params ||= params.permit(:delivered_at, :notify_customer)
68
+ @mark_delivered_params ||= params.permit(*declared_permitted_attributes)
55
69
  end
56
70
 
57
71
  # Only an explicit false suppresses the email.
@@ -10,6 +10,10 @@ module Spree
10
10
  # orders are frozen; their discounts change only through manual rows
11
11
  # (see DiscountsController).
12
12
  class DiscountCodesController < BaseController
13
+ request_params 'DiscountCodeApplyParams' do |body|
14
+ body.attribute :code, :string, required: true
15
+ end
16
+
13
17
  skip_before_action :set_resource, raise: false
14
18
 
15
19
  # POST /api/v3/admin/orders/:order_id/discount_codes
@@ -70,13 +74,13 @@ module Spree
70
74
  def render_completed_order_error
71
75
  render_error(
72
76
  code: ERROR_CODES[:discount_not_editable],
73
- message: Spree.t('errors.messages.coupon_code_frozen_after_completion'),
77
+ message: I18n.t('spree.errors.messages.coupon_code_frozen_after_completion'),
74
78
  status: :unprocessable_content
75
79
  )
76
80
  end
77
81
 
78
82
  def permitted_params
79
- params.permit(:code)
83
+ params.permit(*declared_permitted_attributes)
80
84
  end
81
85
  end
82
86
  end
@@ -11,23 +11,47 @@ module Spree
11
11
  class DiscountsController < BaseController
12
12
  scoped_resource :orders
13
13
 
14
+ request_params :discount do |body|
15
+ body.attribute :label, :string, required: true, on: :create, example: 'Customer appeasement'
16
+ body.attribute :value, :decimal,
17
+ required: true, on: :create,
18
+ only: :create,
19
+ example: '10.00',
20
+ description: 'An amount in the order currency for a `flat` discount, or a percentage for a `percent` one.'
21
+ body.attribute :amount, :decimal,
22
+ only: :update,
23
+ description: 'The new amount of the row, in the order currency.'
24
+ body.attribute :value_type, :string,
25
+ only: :create,
26
+ choices: %w[flat percent],
27
+ description: 'Defaults to `flat`.'
28
+ body.attribute :line_item_id, :id,
29
+ only: :create,
30
+ nullable: true,
31
+ description: 'The line item the discount applies to. Omitted, the value is distributed across the line items.'
32
+ end
33
+
14
34
  # POST /api/v3/admin/orders/:order_id/discounts
15
35
  def create
16
36
  with_order_lock do
17
37
  line_item = @parent.line_items.find_by_prefix_id!(params[:line_item_id]) if params[:line_item_id].present?
18
38
 
39
+ value_type = params[:value_type].presence || 'flat'
40
+ # A flat discount is money in the order's currency; a percentage is a rate.
41
+ value = value_type == 'percent' ? decimal_param(:value) : money_param(:value, @parent.currency)
42
+
19
43
  result = Spree.order_discount_create_service.call(
20
44
  order: @parent,
21
45
  label: params[:label],
22
- value: params[:value].presence || params[:amount],
23
- value_type: params[:value_type].presence || 'flat',
46
+ value: value,
47
+ value_type: value_type,
24
48
  line_item: line_item
25
49
  )
26
50
 
27
51
  if result.success?
28
52
  render json: { data: serialize_collection(result.value) }, status: :created
29
53
  else
30
- render_error(code: ERROR_CODES[:validation_error], message: result.error.to_s, status: :unprocessable_entity)
54
+ render_error(code: ERROR_CODES[:validation_error], message: result.error.to_s, status: :unprocessable_content)
31
55
  end
32
56
  end
33
57
  end
@@ -75,7 +99,7 @@ module Spree
75
99
  end
76
100
 
77
101
  def permitted_params
78
- params.permit(:label, :amount)
102
+ params.permit(*permitted_attributes)
79
103
  end
80
104
 
81
105
  def collection_includes
@@ -87,8 +111,8 @@ module Spree
87
111
  def render_promotion_row_error
88
112
  render_error(
89
113
  code: ERROR_CODES[:discount_not_editable],
90
- message: Spree.t('errors.messages.promotion_discount_not_editable'),
91
- status: :unprocessable_entity
114
+ message: I18n.t('spree.errors.messages.promotion_discount_not_editable'),
115
+ status: :unprocessable_content
92
116
  )
93
117
  end
94
118
  end
@@ -13,6 +13,41 @@ module Spree
13
13
  # would name a key no catalog knows.
14
14
  scoped_resource :orders
15
15
 
16
+ request_params :exchange do |body|
17
+ body.attribute :items, :array,
18
+ required: true, on: :create,
19
+ only: :create,
20
+ description: 'Items coming back, and what goes out in their place.' do |item|
21
+ item.attribute :fulfillment_item_id, :id, required: true
22
+ item.attribute :new_variant_id, :id, required: true
23
+ item.attribute :quantity, :integer, required: true
24
+ end
25
+ body.attribute :stock_location_id, :id, description: 'Where the goods come back to.'
26
+ body.attribute :reason_id, :id, description: "One of the store's return reasons."
27
+ body.attribute :memo, :string
28
+ body.attribute :metadata, :hash, only: :update
29
+ end
30
+
31
+ request_params 'ExchangeReceiveParams', action: :receive do |body|
32
+ body.attribute :items, :array,
33
+ description: 'What actually arrived. Omit to receive everything as requested and resellable.' do |item|
34
+ item.attribute :exchange_line_item_id, :id, required: true
35
+ item.attribute :quantity, :integer, required: true
36
+ item.attribute :resellable, :boolean,
37
+ description: 'Goods that cannot be resold are received but never restocked. Defaults to true.'
38
+ end
39
+ end
40
+
41
+ request_params 'ExchangeFulfillParams', action: :fulfill do |body|
42
+ body.attribute :refund_method, :string,
43
+ choices: Spree::RefundMethods::METHODS,
44
+ description: 'How a credit is returned when the replacements cost less than what came back. Defaults to `store_credit`. A balance the customer owes is left for the merchant to collect.'
45
+ end
46
+
47
+ request_params 'ExchangeCancelParams', action: :cancel do |body|
48
+ body.attribute :reason, :string, description: 'A note on why the exchange was canceled.'
49
+ end
50
+
16
51
  before_action :set_resource, only: [:show, :update, :approve, :receive, :fulfill, :cancel]
17
52
 
18
53
  # PATCH /api/v3/admin/orders/:order_id/exchanges/:id
@@ -37,7 +72,7 @@ module Spree
37
72
  end
38
73
 
39
74
  def permitted_params
40
- params.permit(:memo, :reason_id, :stock_location_id, metadata: {})
75
+ params.permit(*permitted_attributes)
41
76
  end
42
77
 
43
78
  private
@@ -11,6 +11,27 @@ module Spree
11
11
  class FeesController < BaseController
12
12
  scoped_resource :orders
13
13
 
14
+ request_params :fee do |body|
15
+ body.attribute :label, :string, required: true, on: :create, example: 'Gift wrap'
16
+ body.attribute :amount, :decimal, required: true, on: :create, example: '4.00'
17
+ body.attribute :kind, :string,
18
+ choices: Spree::Fee::KINDS,
19
+ open: true,
20
+ example: 'gift_wrap',
21
+ description: 'Defaults to `surcharge`.'
22
+ # Resolved through the order by the controller, never assigned.
23
+ body.attribute :line_item_id, :id,
24
+ only: :create,
25
+ nullable: true,
26
+ permit: false,
27
+ description: 'The line item or fulfillment the fee belongs to. Omitted, the fee is order-level.'
28
+ body.attribute :fulfillment_id, :id,
29
+ only: :create,
30
+ nullable: true,
31
+ permit: false,
32
+ description: 'The line item or fulfillment the fee belongs to. Omitted, the fee is order-level.'
33
+ end
34
+
14
35
  # POST /api/v3/admin/orders/:order_id/fees
15
36
  def create
16
37
  with_order_lock do
@@ -60,7 +81,7 @@ module Spree
60
81
  end
61
82
 
62
83
  def permitted_params
63
- params.permit(:label, :amount, :kind)
84
+ params.permit(*permitted_attributes)
64
85
  end
65
86
 
66
87
  def collection_includes
@@ -14,6 +14,69 @@ module Spree
14
14
 
15
15
  scoped_resource :fulfillments
16
16
 
17
+ request_params :fulfillment do |body|
18
+ body.attribute :stock_location_id, :id,
19
+ required: true, on: :create,
20
+ description: "The location the fulfillment ships from. On update, moving it re-prices the fulfillment against that location's rates."
21
+ body.attribute :source_fulfillment_id, :id,
22
+ only: :create,
23
+ description: "The only fulfillment of this order to move units from, its exchange and claim replacements included: how a canceled replacement is sent again. Omitted, the customer's bought units are taken from every unshipped fulfillment."
24
+ body.attribute :tracking, :string,
25
+ description: 'Carrier tracking number, or a full `https://` tracking link, which is served back as `tracking_url` unchanged.'
26
+ body.attribute :tracking_carrier, :string,
27
+ only: :update,
28
+ description: "Which carrier the tracking number belongs to: a slug from the tracking carriers endpoint. Left blank, it is detected from the number's format where possible."
29
+ body.attribute :selected_delivery_rate_id, :id, only: :update
30
+ body.attribute :delivery_method_id, :id,
31
+ only: :create,
32
+ description: 'Delivery method attached as the selected rate. Defaults to the delivery method of the fully drained source fulfillments.'
33
+ body.attribute :cost, :decimal,
34
+ only: :create,
35
+ example: '7.42',
36
+ description: 'Explicit shipping cost, such as the 3PL price. Defaults to the summed cost of the fully drained source fulfillments, which keeps the order total unchanged. Persists only with `status: shipped`; pending fulfillments are re-priced by the rate engine.'
37
+ body.attribute :status, :string,
38
+ only: :create,
39
+ choices: %w[shipped],
40
+ description: 'Pass `shipped` to register an already-shipped external fulfillment.'
41
+ body.attribute :metadata, :hash, only: :create
42
+ body.attribute :items, :array,
43
+ only: :create,
44
+ description: 'Line item quantities to fulfill. Omit to fulfill every unit not yet shipped.' do |item|
45
+ item.attribute :item_id, :id, required: true
46
+ item.attribute :quantity, :integer, required: true
47
+ end
48
+ end
49
+
50
+ request_params 'FulfillmentFulfillParams', action: :fulfill do |body|
51
+ body.attribute :items, :array,
52
+ description: 'Line item quantities to ship. Omit to ship everything the fulfillment holds; a subset is split onto a new fulfillment, which is the one that ships.' do |item|
53
+ item.attribute :item_id, :id, required: true
54
+ item.attribute :quantity, :integer, required: true
55
+ end
56
+ body.attribute :tracking, :string,
57
+ description: 'Carrier tracking number or a full `https://` tracking link, stored on the fulfillment that ships.'
58
+ body.attribute :tracking_carrier, :string,
59
+ description: 'Which carrier the number belongs to; detected from the number when omitted.'
60
+ body.attribute :notify_customer, :boolean,
61
+ description: 'Whether the customer gets the shipment email. Defaults to true; pass false to suppress it for this dispatch only.'
62
+ body.attribute :force, :boolean,
63
+ description: 'Hand the goods over even though the order is unpaid or holds backordered units.'
64
+ end
65
+
66
+ request_params 'FulfillmentMarkDeliveredParams', action: :mark_delivered do |body|
67
+ body.attribute :delivered_at, :datetime,
68
+ description: 'When it arrived. Defaults to now; return windows run from this time.'
69
+ body.attribute :notify_customer, :boolean,
70
+ description: 'Whether the customer gets a delivery notification. Defaults to true.'
71
+ end
72
+
73
+ request_params 'FulfillmentSplitParams', action: :split do |body|
74
+ body.attribute :variant_id, :id, required: true, description: 'The variant being moved out.'
75
+ body.attribute :quantity, :integer, required: true
76
+ body.attribute :stock_location_id, :id,
77
+ description: "Origin of the new fulfillment. Defaults to the source fulfillment's location."
78
+ end
79
+
17
80
  before_action :set_resource, only: [:show, :update, :fulfill, :mark_delivered, :cancel, :split]
18
81
 
19
82
  # POST /api/v3/admin/orders/:order_id/fulfillments
@@ -21,17 +84,21 @@ module Spree
21
84
  # Manually registers a fulfillment on a completed order (external
22
85
  # carrier / 3PL sync), bypassing order routing. Moves the requested
23
86
  # line item quantities out of their routed fulfillments; when
24
- # `items` is omitted, everything not yet shipped is moved. An
25
- # explicit `cost` persists only with `status: 'shipped'` — pending
26
- # fulfillments are re-priced by the rate engine.
87
+ # `items` is omitted, everything not yet shipped is moved. Exchange
88
+ # and claim replacements are moved only out of a named
89
+ # `source_fulfillment_id`, which is how a canceled replacement is
90
+ # sent again. An explicit `cost` persists only with
91
+ # `status: 'shipped'` — pending fulfillments are re-priced by the
92
+ # rate engine.
27
93
  def create
28
- authorize!(:create, Spree::Shipment)
94
+ authorize!(:create, Spree::Fulfillment)
29
95
 
30
96
  with_order_lock do
31
97
  result = Spree.fulfillment_create_workflow.call(
32
98
  order: @order,
33
99
  stock_location: stock_location_for_create,
34
100
  items: items_for_create,
101
+ source_fulfillment: source_fulfillment_for_create,
35
102
  tracking: create_params[:tracking],
36
103
  delivery_method: delivery_method_for_create,
37
104
  cost: create_params[:cost],
@@ -39,11 +106,7 @@ module Spree
39
106
  metadata: create_params[:metadata]&.to_h
40
107
  )
41
108
 
42
- if result.success?
43
- render json: serialize_resource(result.value), status: :created
44
- else
45
- render_result_error(result)
46
- end
109
+ render_result(result, status: :created)
47
110
  end
48
111
  end
49
112
 
@@ -59,11 +122,7 @@ module Spree
59
122
  notify_customer: notify_customer?(mark_delivered_params[:notify_customer])
60
123
  )
61
124
 
62
- if result.success?
63
- render json: serialize_resource(result.value)
64
- else
65
- render_result_error(result)
66
- end
125
+ render_result(result)
67
126
  end
68
127
  end
69
128
 
@@ -78,16 +137,12 @@ module Spree
78
137
  end
79
138
 
80
139
  def permitted_params
81
- params.permit(:tracking, :tracking_carrier, :selected_delivery_rate_id, :stock_location_id)
140
+ params.permit(*permitted_attributes)
82
141
  end
83
142
 
84
143
  private
85
144
 
86
145
  # Forcing past a stock or payment guard is the operator's call.
87
- def fulfill_permitted_keys
88
- super + [:force]
89
- end
90
-
91
146
  def fulfill_workflow_options
92
147
  { force: fulfill_params[:force].to_b }
93
148
  end
@@ -105,11 +160,11 @@ module Spree
105
160
  end
106
161
 
107
162
  def create_params
108
- @create_params ||= params.permit(:stock_location_id, :tracking, :delivery_method_id, :cost, :status, metadata: {}, items: [:item_id, :quantity])
163
+ @create_params ||= params.permit(*declared_permitted_attributes)
109
164
  end
110
165
 
111
166
  def mark_delivered_params
112
- @mark_delivered_params ||= params.permit(:delivered_at, :notify_customer)
167
+ @mark_delivered_params ||= params.permit(*declared_permitted_attributes)
113
168
  end
114
169
 
115
170
  def find_stock_location!(id)
@@ -123,7 +178,13 @@ module Spree
123
178
  def delivery_method_for_create
124
179
  return if create_params[:delivery_method_id].blank?
125
180
 
126
- Spree::ShippingMethod.accessible_by(current_ability, :show).find_by_prefix_id!(create_params[:delivery_method_id])
181
+ Spree::DeliveryMethod.accessible_by(current_ability, :show).find_by_prefix_id!(create_params[:delivery_method_id])
182
+ end
183
+
184
+ def source_fulfillment_for_create
185
+ return if create_params[:source_fulfillment_id].blank?
186
+
187
+ @order.fulfillments.find_by_prefix_id!(create_params[:source_fulfillment_id])
127
188
  end
128
189
 
129
190
  def items_for_create