spree_api 5.6.1 → 6.0.0.beta1

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 (540) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +28 -0
  3. data/Rakefile +1 -1
  4. data/app/controllers/concerns/spree/api/v3/address_params.rb +17 -0
  5. data/app/controllers/concerns/spree/api/v3/admin/product_listing.rb +46 -0
  6. data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +110 -0
  7. data/app/controllers/concerns/spree/api/v3/admin/receivable_actions.rb +68 -0
  8. data/app/controllers/concerns/spree/api/v3/admin/reporting_authorization.rb +27 -0
  9. data/app/controllers/concerns/spree/api/v3/admin/role_grant_guard.rb +69 -33
  10. data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +86 -0
  11. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +97 -0
  12. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +12 -6
  13. data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +91 -0
  14. data/app/controllers/concerns/spree/api/v3/admin_authentication.rb +9 -5
  15. data/app/controllers/concerns/spree/api/v3/api_key_authentication.rb +41 -5
  16. data/app/controllers/concerns/spree/api/v3/authentication_strategies.rb +48 -0
  17. data/app/controllers/concerns/spree/api/v3/bulk_operations.rb +4 -6
  18. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +52 -16
  19. data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +37 -0
  20. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +41 -0
  21. data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +35 -0
  22. data/app/controllers/concerns/spree/api/v3/error_handler.rb +53 -11
  23. data/app/controllers/concerns/spree/api/v3/idempotent.rb +10 -4
  24. data/app/controllers/concerns/spree/api/v3/items_payload.rb +54 -0
  25. data/app/controllers/concerns/spree/api/v3/jwt_authentication.rb +23 -3
  26. data/app/controllers/concerns/spree/api/v3/key_store_context.rb +31 -0
  27. data/app/controllers/concerns/spree/api/v3/locale_and_currency.rb +3 -3
  28. data/app/controllers/concerns/spree/api/v3/order_lock.rb +22 -3
  29. data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +112 -0
  30. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +105 -0
  31. data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +117 -0
  32. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +157 -0
  33. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +76 -0
  34. data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +116 -0
  35. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +128 -0
  36. data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +7 -4
  37. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +42 -0
  38. data/app/controllers/concerns/spree/api/v3/rate_limit_headers.rb +40 -6
  39. data/app/controllers/concerns/spree/api/v3/scoped_authorization.rb +80 -26
  40. data/app/controllers/concerns/spree/api/v3/seller/auth_cookies.rb +62 -0
  41. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +127 -0
  42. data/app/controllers/concerns/spree/api/v3/seller_authentication.rb +40 -0
  43. data/app/controllers/concerns/spree/api/v3/storefront_access.rb +38 -0
  44. data/app/controllers/concerns/spree/api/v3/streams_shipping_label.rb +37 -0
  45. data/app/controllers/concerns/spree/api/v3/tax_identifier_validation.rb +41 -0
  46. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +11 -14
  47. data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +1 -1
  48. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -7
  49. data/app/controllers/spree/api/v3/admin/auth_controller.rb +138 -22
  50. data/app/controllers/spree/api/v3/admin/base_controller.rb +2 -0
  51. data/app/controllers/spree/api/v3/admin/catalog_assignments_controller.rb +27 -0
  52. data/app/controllers/spree/api/v3/admin/catalogs/base_controller.rb +29 -0
  53. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +40 -0
  54. data/app/controllers/spree/api/v3/admin/catalogs/products_controller.rb +107 -0
  55. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +75 -0
  56. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +191 -0
  57. data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +28 -41
  58. data/app/controllers/spree/api/v3/admin/categories_controller.rb +16 -7
  59. data/app/controllers/spree/api/v3/admin/channels_controller.rb +50 -2
  60. data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +25 -0
  61. data/app/controllers/spree/api/v3/admin/claims_controller.rb +31 -0
  62. data/app/controllers/spree/api/v3/admin/collection_rules_controller.rb +40 -0
  63. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +101 -0
  64. data/app/controllers/spree/api/v3/admin/collections_controller.rb +56 -0
  65. data/app/controllers/spree/api/v3/admin/commission_lines_controller.rb +39 -0
  66. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +174 -0
  67. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +65 -0
  68. data/app/controllers/spree/api/v3/admin/companies/base_controller.rb +29 -0
  69. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +56 -0
  70. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +66 -0
  71. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +137 -0
  72. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +46 -0
  73. data/app/controllers/spree/api/v3/admin/companies_controller.rb +59 -0
  74. data/app/controllers/spree/api/v3/admin/concerns/external_references.rb +166 -0
  75. data/app/controllers/spree/api/v3/admin/consent_records_controller.rb +31 -0
  76. data/app/controllers/spree/api/v3/admin/countries_controller.rb +12 -4
  77. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +19 -4
  78. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +5 -5
  79. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +1 -1
  80. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +4 -4
  81. data/app/controllers/spree/api/v3/admin/customers/base_controller.rb +1 -1
  82. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +2 -3
  83. data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +43 -0
  84. data/app/controllers/spree/api/v3/admin/customers_controller.rb +190 -11
  85. data/app/controllers/spree/api/v3/admin/dashboard_controller.rb +24 -20
  86. data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +60 -0
  87. data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +54 -0
  88. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +114 -0
  89. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +243 -0
  90. data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +80 -0
  91. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +107 -0
  92. data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +116 -0
  93. data/app/controllers/spree/api/v3/admin/digital_links_controller.rb +48 -0
  94. data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +17 -3
  95. data/app/controllers/spree/api/v3/admin/exchanges_controller.rb +31 -0
  96. data/app/controllers/spree/api/v3/admin/exports_controller.rb +2 -2
  97. data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +1 -1
  98. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +3 -2
  99. data/app/controllers/spree/api/v3/admin/imports_controller.rb +71 -8
  100. data/app/controllers/spree/api/v3/admin/integrations_controller.rb +67 -0
  101. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +5 -5
  102. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +5 -1
  103. data/app/controllers/spree/api/v3/admin/locales_controller.rb +3 -1
  104. data/app/controllers/spree/api/v3/admin/markets_controller.rb +9 -5
  105. data/app/controllers/spree/api/v3/admin/me_controller.rb +4 -30
  106. data/app/controllers/spree/api/v3/admin/media_controller.rb +88 -38
  107. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +156 -0
  108. data/app/controllers/spree/api/v3/admin/option_types_controller.rb +1 -0
  109. data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +25 -0
  110. data/app/controllers/spree/api/v3/admin/order_groups_controller.rb +43 -0
  111. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +1 -1
  112. data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +56 -0
  113. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +66 -0
  114. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +86 -0
  115. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +99 -0
  116. data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +62 -0
  117. data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +83 -0
  118. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +45 -67
  119. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +40 -22
  120. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +75 -0
  121. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +36 -18
  122. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +39 -18
  123. data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +70 -0
  124. data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +2 -2
  125. data/app/controllers/spree/api/v3/admin/orders/tax_identifiers_controller.rb +41 -0
  126. data/app/controllers/spree/api/v3/admin/orders/tax_lines_controller.rb +32 -0
  127. data/app/controllers/spree/api/v3/admin/orders_controller.rb +157 -32
  128. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +39 -0
  129. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +1 -1
  130. data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +15 -4
  131. data/app/controllers/spree/api/v3/admin/payout_providers_controller.rb +27 -0
  132. data/app/controllers/spree/api/v3/admin/permissions_controller.rb +30 -0
  133. data/app/controllers/spree/api/v3/admin/policies_controller.rb +42 -0
  134. data/app/controllers/spree/api/v3/admin/price_lists/products_controller.rb +93 -0
  135. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +43 -29
  136. data/app/controllers/spree/api/v3/admin/prices_controller.rb +41 -4
  137. data/app/controllers/spree/api/v3/admin/product_types_controller.rb +93 -0
  138. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +148 -0
  139. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +24 -3
  140. data/app/controllers/spree/api/v3/admin/products_controller.rb +149 -33
  141. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +6 -2
  142. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +1 -1
  143. data/app/controllers/spree/api/v3/admin/promotions_controller.rb +1 -5
  144. data/app/controllers/spree/api/v3/admin/purchase_orders/stock_receipts_controller.rb +32 -0
  145. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +161 -0
  146. data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +25 -0
  147. data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +45 -0
  148. data/app/controllers/spree/api/v3/admin/reporting_controller.rb +95 -0
  149. data/app/controllers/spree/api/v3/admin/resource_controller.rb +27 -10
  150. data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +25 -0
  151. data/app/controllers/spree/api/v3/admin/returns_controller.rb +31 -0
  152. data/app/controllers/spree/api/v3/admin/roles_controller.rb +50 -6
  153. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +83 -0
  154. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +139 -0
  155. data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +115 -0
  156. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +36 -0
  157. data/app/controllers/spree/api/v3/admin/sellers/balances_controller.rb +44 -0
  158. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +77 -0
  159. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +107 -0
  160. data/app/controllers/spree/api/v3/admin/sellers/team_controller.rb +64 -0
  161. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +197 -0
  162. data/app/controllers/spree/api/v3/admin/setup_controller.rb +231 -0
  163. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +172 -0
  164. data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +3 -2
  165. data/app/controllers/spree/api/v3/admin/stock_movements_controller.rb +37 -0
  166. data/app/controllers/spree/api/v3/admin/stock_reservations_controller.rb +1 -1
  167. data/app/controllers/spree/api/v3/admin/stock_transfers/stock_receipts_controller.rb +31 -0
  168. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +134 -38
  169. data/app/controllers/spree/api/v3/admin/store_controller.rb +65 -0
  170. data/app/controllers/spree/api/v3/admin/store_credits/events_controller.rb +47 -0
  171. data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +87 -0
  172. data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +30 -0
  173. data/app/controllers/spree/api/v3/admin/tags_controller.rb +2 -2
  174. data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +4 -0
  175. data/app/controllers/spree/api/v3/admin/tax_providers_controller.rb +25 -0
  176. data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +33 -0
  177. data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +33 -0
  178. data/app/controllers/spree/api/v3/admin/translatable_resources_controller.rb +37 -9
  179. data/app/controllers/spree/api/v3/admin/translations_controller.rb +10 -5
  180. data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +150 -0
  181. data/app/controllers/spree/api/v3/admin/variants_controller.rb +11 -4
  182. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +1 -1
  183. data/app/controllers/spree/api/v3/base_controller.rb +59 -16
  184. data/app/controllers/spree/api/v3/resource_controller.rb +154 -38
  185. data/app/controllers/spree/api/v3/seller/auth_controller.rb +169 -0
  186. data/app/controllers/spree/api/v3/seller/balances_controller.rb +35 -0
  187. data/app/controllers/spree/api/v3/seller/base_controller.rb +25 -0
  188. data/app/controllers/spree/api/v3/seller/claim_reasons_controller.rb +20 -0
  189. data/app/controllers/spree/api/v3/seller/countries_controller.rb +38 -0
  190. data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +265 -0
  191. data/app/controllers/spree/api/v3/seller/delivery_profiles_controller.rb +65 -0
  192. data/app/controllers/spree/api/v3/seller/delivery_zones_controller.rb +41 -0
  193. data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +21 -0
  194. data/app/controllers/spree/api/v3/seller/exports_controller.rb +195 -0
  195. data/app/controllers/spree/api/v3/seller/import_rows_controller.rb +49 -0
  196. data/app/controllers/spree/api/v3/seller/imports_controller.rb +317 -0
  197. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +152 -0
  198. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +71 -0
  199. data/app/controllers/spree/api/v3/seller/me_controller.rb +72 -0
  200. data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +111 -0
  201. data/app/controllers/spree/api/v3/seller/order_cancellation_reasons_controller.rb +25 -0
  202. data/app/controllers/spree/api/v3/seller/orders/base_controller.rb +44 -0
  203. data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +45 -0
  204. data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +38 -0
  205. data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +50 -0
  206. data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +79 -0
  207. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +55 -0
  208. data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +82 -0
  209. data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +44 -0
  210. data/app/controllers/spree/api/v3/seller/orders_controller.rb +199 -0
  211. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +100 -0
  212. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +155 -0
  213. data/app/controllers/spree/api/v3/seller/payouts_controller.rb +47 -0
  214. data/app/controllers/spree/api/v3/seller/policies_controller.rb +57 -0
  215. data/app/controllers/spree/api/v3/seller/product_types_controller.rb +35 -0
  216. data/app/controllers/spree/api/v3/seller/products_controller.rb +394 -0
  217. data/app/controllers/spree/api/v3/seller/profile_controller.rb +137 -0
  218. data/app/controllers/spree/api/v3/seller/reasons_controller.rb +45 -0
  219. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +95 -0
  220. data/app/controllers/spree/api/v3/seller/resource_controller.rb +75 -0
  221. data/app/controllers/spree/api/v3/seller/return_reasons_controller.rb +20 -0
  222. data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +56 -0
  223. data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +48 -0
  224. data/app/controllers/spree/api/v3/seller/team_controller.rb +103 -0
  225. data/app/controllers/spree/api/v3/seller/tracking_carriers_controller.rb +35 -0
  226. data/app/controllers/spree/api/v3/seller/transfers_controller.rb +43 -0
  227. data/app/controllers/spree/api/v3/store/account/companies_controller.rb +42 -0
  228. data/app/controllers/spree/api/v3/store/auth_controller.rb +21 -34
  229. data/app/controllers/spree/api/v3/store/base_controller.rb +4 -0
  230. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +24 -2
  231. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +41 -15
  232. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +53 -20
  233. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +36 -20
  234. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +111 -0
  235. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +2 -2
  236. data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +96 -0
  237. data/app/controllers/spree/api/v3/store/carts_controller.rb +57 -12
  238. data/app/controllers/spree/api/v3/store/categories_controller.rb +6 -3
  239. data/app/controllers/spree/api/v3/store/collections/products_controller.rb +59 -0
  240. data/app/controllers/spree/api/v3/store/collections_controller.rb +36 -0
  241. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +81 -0
  242. data/app/controllers/spree/api/v3/store/companies/base_controller.rb +24 -0
  243. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +50 -0
  244. data/app/controllers/spree/api/v3/store/companies/members_controller.rb +66 -0
  245. data/app/controllers/spree/api/v3/store/companies/orders_controller.rb +28 -0
  246. data/app/controllers/spree/api/v3/store/companies_controller.rb +47 -0
  247. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +90 -0
  248. data/app/controllers/spree/api/v3/store/countries_controller.rb +8 -6
  249. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +3 -1
  250. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +78 -0
  251. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +52 -0
  252. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +6 -0
  253. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +7 -3
  254. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +3 -3
  255. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -3
  256. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +91 -0
  257. data/app/controllers/spree/api/v3/store/customers_controller.rb +26 -31
  258. data/app/controllers/spree/api/v3/store/data_feeds_controller.rb +11 -0
  259. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +58 -0
  260. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +108 -0
  261. data/app/controllers/spree/api/v3/store/digital_links_controller.rb +105 -0
  262. data/app/controllers/spree/api/v3/store/markets/countries_controller.rb +5 -9
  263. data/app/controllers/spree/api/v3/store/markets_controller.rb +4 -4
  264. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +8 -9
  265. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +94 -0
  266. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +116 -0
  267. data/app/controllers/spree/api/v3/store/orders/tax_identifiers_controller.rb +46 -0
  268. data/app/controllers/spree/api/v3/store/orders_controller.rb +12 -15
  269. data/app/controllers/spree/api/v3/store/products/filters_controller.rb +10 -3
  270. data/app/controllers/spree/api/v3/store/products_controller.rb +25 -6
  271. data/app/controllers/spree/api/v3/store/resource_controller.rb +2 -0
  272. data/app/controllers/spree/api/v3/store/sellers_controller.rb +43 -0
  273. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +9 -6
  274. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +3 -3
  275. data/app/controllers/spree/api/v3/webhooks/fulfillments_controller.rb +88 -0
  276. data/app/controllers/spree/api/v3/webhooks/payments_controller.rb +5 -2
  277. data/app/controllers/spree/api/v3/webhooks/payouts_controller.rb +61 -0
  278. data/app/models/spree/api/data_request_urls.rb +25 -0
  279. data/app/models/spree/api/digital_link_urls.rb +26 -0
  280. data/app/serializers/spree/api/v3/address_serializer.rb +17 -5
  281. data/app/serializers/spree/api/v3/admin/address_serializer.rb +27 -4
  282. data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +13 -10
  283. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +1 -1
  284. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +15 -0
  285. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +34 -0
  286. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +32 -0
  287. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +23 -0
  288. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +48 -0
  289. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +23 -0
  290. data/app/serializers/spree/api/v3/admin/catalog_product_serializer.rb +57 -0
  291. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +38 -0
  292. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +37 -0
  293. data/app/serializers/spree/api/v3/admin/catalog_serializer.rb +46 -0
  294. data/app/serializers/spree/api/v3/admin/category_serializer.rb +3 -2
  295. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +15 -1
  296. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +16 -0
  297. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +21 -0
  298. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +29 -0
  299. data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +22 -0
  300. data/app/serializers/spree/api/v3/admin/collection_serializer.rb +29 -0
  301. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +67 -0
  302. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +69 -0
  303. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +61 -0
  304. data/app/serializers/spree/api/v3/admin/company_invitation_serializer.rb +15 -0
  305. data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +11 -0
  306. data/app/serializers/spree/api/v3/admin/company_serializer.rb +37 -0
  307. data/app/serializers/spree/api/v3/admin/concerns/external_references_attribute.rb +33 -0
  308. data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +28 -0
  309. data/app/serializers/spree/api/v3/admin/country_serializer.rb +2 -2
  310. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -1
  311. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +2 -2
  312. data/app/serializers/spree/api/v3/admin/custom_field_serializer.rb +2 -2
  313. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +23 -22
  314. data/app/serializers/spree/api/v3/admin/dashboard_counter_serializer.rb +24 -0
  315. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +36 -0
  316. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +32 -0
  317. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +66 -1
  318. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +15 -0
  319. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +34 -0
  320. data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +65 -0
  321. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +10 -1
  322. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +20 -0
  323. data/app/serializers/spree/api/v3/admin/delivery_zone_member_serializer.rb +11 -0
  324. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +29 -0
  325. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +59 -0
  326. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -4
  327. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +16 -0
  328. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +35 -0
  329. data/app/serializers/spree/api/v3/admin/export_serializer.rb +20 -1
  330. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +14 -0
  331. data/app/serializers/spree/api/v3/admin/freight_summary_line_serializer.rb +46 -0
  332. data/app/serializers/spree/api/v3/admin/freight_summary_serializer.rb +16 -0
  333. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +39 -0
  334. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +31 -9
  335. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -3
  336. data/app/serializers/spree/api/v3/admin/import_serializer.rb +15 -2
  337. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +32 -0
  338. data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +4 -4
  339. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +19 -5
  340. data/app/serializers/spree/api/v3/admin/market_serializer.rb +5 -1
  341. data/app/serializers/spree/api/v3/admin/media_serializer.rb +50 -2
  342. data/app/serializers/spree/api/v3/admin/membership_product_serializer.rb +29 -0
  343. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +29 -0
  344. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +50 -0
  345. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  346. data/app/serializers/spree/api/v3/admin/order_serializer.rb +131 -19
  347. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +53 -0
  348. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +8 -2
  349. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -0
  350. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +41 -0
  351. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +39 -0
  352. data/app/serializers/spree/api/v3/admin/policy_serializer.rb +11 -0
  353. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +22 -0
  354. data/app/serializers/spree/api/v3/admin/price_list_product_serializer.rb +32 -0
  355. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +20 -8
  356. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -12
  357. data/app/serializers/spree/api/v3/admin/price_serializer.rb +3 -0
  358. data/app/serializers/spree/api/v3/admin/product_serializer.rb +54 -8
  359. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +39 -0
  360. data/app/serializers/spree/api/v3/admin/product_type_custom_field_definition_serializer.rb +44 -0
  361. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +34 -0
  362. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +6 -12
  363. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +17 -15
  364. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +80 -0
  365. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +94 -0
  366. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +27 -0
  367. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +0 -5
  368. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +72 -0
  369. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +16 -0
  370. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +21 -0
  371. data/app/serializers/spree/api/v3/admin/return_serializer.rb +59 -0
  372. data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
  373. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +33 -0
  374. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +37 -0
  375. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +46 -0
  376. data/app/serializers/spree/api/v3/admin/seller_requirement_serializer.rb +68 -0
  377. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +48 -0
  378. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +57 -0
  379. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +92 -0
  380. data/app/serializers/spree/api/v3/admin/seller_team_member_serializer.rb +29 -0
  381. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +53 -0
  382. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +82 -0
  383. data/app/serializers/spree/api/v3/admin/state_serializer.rb +1 -1
  384. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +65 -0
  385. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +20 -4
  386. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +116 -0
  387. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +57 -0
  388. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +49 -0
  389. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +5 -5
  390. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +57 -0
  391. data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +36 -16
  392. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +32 -0
  393. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +42 -7
  394. data/app/serializers/spree/api/v3/admin/store_serializer.rb +63 -1
  395. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +39 -0
  396. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +67 -0
  397. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +43 -0
  398. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +21 -0
  399. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +49 -0
  400. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +49 -8
  401. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +23 -0
  402. data/app/serializers/spree/api/v3/base_serializer.rb +39 -2
  403. data/app/serializers/spree/api/v3/cart_serializer.rb +90 -12
  404. data/app/serializers/spree/api/v3/category_serializer.rb +3 -3
  405. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +50 -0
  406. data/app/serializers/spree/api/v3/claim_reason_serializer.rb +20 -0
  407. data/app/serializers/spree/api/v3/claim_serializer.rb +62 -0
  408. data/app/serializers/spree/api/v3/collection_serializer.rb +41 -0
  409. data/app/serializers/spree/api/v3/company_invitation_serializer.rb +28 -0
  410. data/app/serializers/spree/api/v3/company_membership_serializer.rb +28 -0
  411. data/app/serializers/spree/api/v3/company_serializer.rb +33 -0
  412. data/app/serializers/spree/api/v3/custom_field_serializer.rb +2 -2
  413. data/app/serializers/spree/api/v3/customer_serializer.rb +9 -1
  414. data/app/serializers/spree/api/v3/data_request_event_serializer.rb +30 -0
  415. data/app/serializers/spree/api/v3/data_request_serializer.rb +40 -0
  416. data/app/serializers/spree/api/v3/delivery_method_serializer.rb +12 -2
  417. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +34 -17
  418. data/app/serializers/spree/api/v3/delivery_serializer.rb +29 -0
  419. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +29 -0
  420. data/app/serializers/spree/api/v3/delivery_zone_serializer.rb +13 -0
  421. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +23 -0
  422. data/app/serializers/spree/api/v3/digital_link_serializer.rb +6 -2
  423. data/app/serializers/spree/api/v3/discount_serializer.rb +21 -7
  424. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +53 -0
  425. data/app/serializers/spree/api/v3/exchange_serializer.rb +61 -0
  426. data/app/serializers/spree/api/v3/fee_serializer.rb +27 -0
  427. data/app/serializers/spree/api/v3/freight_summary_serializer.rb +38 -0
  428. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +28 -15
  429. data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
  430. data/app/serializers/spree/api/v3/import_row_serializer.rb +1 -1
  431. data/app/serializers/spree/api/v3/import_serializer.rb +18 -4
  432. data/app/serializers/spree/api/v3/invitation_serializer.rb +1 -1
  433. data/app/serializers/spree/api/v3/line_item_serializer.rb +18 -1
  434. data/app/serializers/spree/api/v3/market_serializer.rb +2 -2
  435. data/app/serializers/spree/api/v3/{asset_serializer.rb → media_event_serializer.rb} +4 -4
  436. data/app/serializers/spree/api/v3/media_serializer.rb +48 -7
  437. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +1 -1
  438. data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
  439. data/app/serializers/spree/api/v3/order_group_serializer.rb +60 -0
  440. data/app/serializers/spree/api/v3/order_serializer.rb +58 -6
  441. data/app/serializers/spree/api/v3/payment_method_serializer.rb +1 -1
  442. data/app/serializers/spree/api/v3/payment_serializer.rb +2 -6
  443. data/app/serializers/spree/api/v3/payment_session_serializer.rb +10 -3
  444. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
  445. data/app/serializers/spree/api/v3/policy_serializer.rb +7 -2
  446. data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
  447. data/app/serializers/spree/api/v3/product_serializer.rb +42 -10
  448. data/app/serializers/spree/api/v3/product_type_serializer.rb +17 -0
  449. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +11 -0
  450. data/app/serializers/spree/api/v3/refund_serializer.rb +9 -3
  451. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +42 -0
  452. data/app/serializers/spree/api/v3/return_reason_serializer.rb +20 -0
  453. data/app/serializers/spree/api/v3/return_serializer.rb +62 -0
  454. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +35 -0
  455. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +21 -0
  456. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +25 -0
  457. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +32 -0
  458. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +59 -0
  459. data/app/serializers/spree/api/v3/seller/delivery_profile_serializer.rb +26 -0
  460. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +35 -0
  461. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +17 -0
  462. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +26 -0
  463. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +29 -0
  464. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +30 -0
  465. data/app/serializers/spree/api/v3/seller/export_serializer.rb +44 -0
  466. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +43 -0
  467. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +76 -0
  468. data/app/serializers/spree/api/v3/seller/import_mapping_serializer.rb +20 -0
  469. data/app/serializers/spree/api/v3/seller/import_row_serializer.rb +17 -0
  470. data/app/serializers/spree/api/v3/seller/import_serializer.rb +77 -0
  471. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +29 -0
  472. data/app/serializers/spree/api/v3/seller/media_serializer.rb +26 -0
  473. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +44 -0
  474. data/app/serializers/spree/api/v3/seller/order_serializer.rb +119 -0
  475. data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +52 -0
  476. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +34 -0
  477. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +36 -0
  478. data/app/serializers/spree/api/v3/seller/policy_serializer.rb +11 -0
  479. data/app/serializers/spree/api/v3/seller/product_serializer.rb +60 -0
  480. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +30 -0
  481. data/app/serializers/spree/api/v3/seller/product_type_serializer.rb +29 -0
  482. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +77 -0
  483. data/app/serializers/spree/api/v3/seller/reason_serializer.rb +24 -0
  484. data/app/serializers/spree/api/v3/seller/requirement_custom_field_serializer.rb +36 -0
  485. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +62 -0
  486. data/app/serializers/spree/api/v3/seller/requirement_submission_serializer.rb +33 -0
  487. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +24 -0
  488. data/app/serializers/spree/api/v3/seller/return_serializer.rb +51 -0
  489. data/app/serializers/spree/api/v3/seller/shipping_label_serializer.rb +23 -0
  490. data/app/serializers/spree/api/v3/seller/stock_level_serializer.rb +27 -0
  491. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +17 -0
  492. data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +15 -0
  493. data/app/serializers/spree/api/v3/seller/team_member_serializer.rb +22 -0
  494. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +49 -0
  495. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +71 -0
  496. data/app/serializers/spree/api/v3/seller_serializer.rb +50 -0
  497. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +11 -0
  498. data/app/serializers/spree/api/v3/{stock_item_serializer.rb → stock_level_serializer.rb} +5 -5
  499. data/app/serializers/spree/api/v3/stock_location_serializer.rb +11 -7
  500. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +8 -15
  501. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +11 -0
  502. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +6 -6
  503. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +29 -0
  504. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +11 -0
  505. data/app/serializers/spree/api/v3/tax_identifier_serializer.rb +15 -0
  506. data/app/serializers/spree/api/v3/tax_line_serializer.rb +37 -0
  507. data/app/serializers/spree/api/v3/variant_serializer.rb +52 -2
  508. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +6 -6
  509. data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
  510. data/app/services/spree/api/v3/filters_aggregator.rb +14 -12
  511. data/app/services/spree/webhooks/deliver_webhook.rb +62 -26
  512. data/app/subscribers/spree/webhook_event_subscriber.rb +9 -5
  513. data/config/brakeman.ignore +1 -1
  514. data/config/initializers/typelizer.rb +51 -4
  515. data/config/locales/en.yml +5 -0
  516. data/config/routes.rb +730 -22
  517. data/lib/spree/api/configuration.rb +2 -7
  518. data/lib/spree/api/dependencies.rb +173 -227
  519. data/lib/spree/api/openapi/schema_helper.rb +179 -13
  520. data/lib/spree/api/testing_support/v3/base.rb +45 -15
  521. data/lib/spree/api.rb +10 -4
  522. data/lib/typelizer/open_enums.rb +35 -0
  523. metadata +341 -27
  524. data/app/controllers/spree/api/v3/admin/orders/adjustments_controller.rb +0 -25
  525. data/app/controllers/spree/api/v3/admin/stock_items_controller.rb +0 -42
  526. data/app/controllers/spree/api/v3/admin/store_credit_categories_controller.rb +0 -21
  527. data/app/controllers/spree/api/v3/store/digitals_controller.rb +0 -38
  528. data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +0 -24
  529. data/app/serializers/spree/api/v3/admin/dashboard_analytics_serializer.rb +0 -143
  530. data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +0 -15
  531. data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +0 -19
  532. data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +0 -34
  533. data/app/serializers/spree/api/v3/admin/store_credit_category_serializer.rb +0 -19
  534. data/app/serializers/spree/api/v3/customer_return_serializer.rb +0 -17
  535. data/app/serializers/spree/api/v3/digital_serializer.rb +0 -17
  536. data/app/serializers/spree/api/v3/reimbursement_serializer.rb +0 -27
  537. data/app/serializers/spree/api/v3/report_serializer.rb +0 -34
  538. data/app/serializers/spree/api/v3/return_authorization_serializer.rb +0 -31
  539. data/app/serializers/spree/api/v3/return_item_serializer.rb +0 -53
  540. data/app/serializers/spree/api/v3/shipping_category_serializer.rb +0 -11
@@ -4,6 +4,7 @@ module Spree
4
4
  module Admin
5
5
  class ProductsController < ResourceController
6
6
  include Spree::Api::V3::BulkOperations
7
+ include Spree::Api::V3::Admin::ProductListing
7
8
 
8
9
  scoped_resource :products
9
10
 
@@ -11,6 +12,8 @@ module Spree
11
12
  :bulk_status_update,
12
13
  :bulk_add_to_categories,
13
14
  :bulk_remove_from_categories,
15
+ :bulk_add_to_collections,
16
+ :bulk_remove_from_collections,
14
17
  :bulk_add_to_channels,
15
18
  :bulk_remove_from_channels,
16
19
  :bulk_destroy
@@ -29,6 +32,20 @@ module Spree
29
32
  end
30
33
  end
31
34
 
35
+ # PATCH /api/v3/admin/products/:id/approve
36
+ #
37
+ # Accepting a product a seller submitted, putting it on sale.
38
+ def approve
39
+ run_review_workflow(Spree.product_approve_workflow)
40
+ end
41
+
42
+ # PATCH /api/v3/admin/products/:id/reject
43
+ #
44
+ # Turning a submission down. The reason goes back to the seller.
45
+ def reject
46
+ run_review_workflow(Spree.product_reject_workflow, reason: params[:reason])
47
+ end
48
+
32
49
  # POST /api/v3/admin/products/bulk_status_update
33
50
  # Body: { ids: [...], status: 'draft' | 'active' | 'archived' }
34
51
  def bulk_status_update
@@ -42,23 +59,47 @@ module Spree
42
59
  )
43
60
  end
44
61
 
45
- count = bulk_collection.update_all(status: params[:status], updated_at: Time.current)
62
+ # Products in review are excluded rather than refused: a bulk
63
+ # activate over a mixed selection should still do the plain ones,
64
+ # and moving the rest is `approve`/`reject`, which records who
65
+ # decided (docs/plans/6.0-seller-product-submission.md).
66
+ movable = bulk_collection.where.not(status: Spree::Product::REVIEW_STATUSES)
67
+ skipped = bulk_collection.where(status: Spree::Product::REVIEW_STATUSES).count
68
+
69
+ count = movable.update_all(status: params[:status], updated_at: Time.current)
46
70
  # `update_all` skips `after_commit`, so the search index won't refresh on its own.
47
- bulk_collection.each(&:enqueue_search_index)
71
+ movable.each(&:enqueue_search_index)
72
+
73
+ payload = { product_count: count, status: params[:status] }
74
+ # Only when it happened: a key on every response would say
75
+ # "nothing was skipped" to clients that never skip anything.
76
+ payload[:skipped_in_review_count] = skipped if skipped.positive?
48
77
 
49
- render json: { product_count: count, status: params[:status] }
78
+ render json: payload
50
79
  end
51
80
 
52
81
  # POST /api/v3/admin/products/bulk_add_to_categories
53
82
  # Body: { ids: [...], category_ids: [...] }
54
83
  def bulk_add_to_categories
55
- apply_categories(Spree::Taxons::AddProducts)
84
+ apply_categories(Spree::Categories::AddProducts)
56
85
  end
57
86
 
58
87
  # POST /api/v3/admin/products/bulk_remove_from_categories
59
88
  # Body: { ids: [...], category_ids: [...] }
60
89
  def bulk_remove_from_categories
61
- apply_categories(Spree::Taxons::RemoveProducts)
90
+ apply_categories(Spree::Categories::RemoveProducts)
91
+ end
92
+
93
+ # POST /api/v3/admin/products/bulk_add_to_collections
94
+ # Body: { ids: [...], collection_ids: [...] }
95
+ def bulk_add_to_collections
96
+ apply_collections(Spree::Collections::AddProducts)
97
+ end
98
+
99
+ # POST /api/v3/admin/products/bulk_remove_from_collections
100
+ # Body: { ids: [...], collection_ids: [...] }
101
+ def bulk_remove_from_collections
102
+ apply_collections(Spree::Collections::RemoveProducts)
62
103
  end
63
104
 
64
105
  # POST /api/v3/admin/products/bulk_add_to_channels
@@ -101,6 +142,17 @@ module Spree
101
142
  render json: { product_count: destroyed }
102
143
  end
103
144
 
145
+ # DELETE /api/v3/admin/products/:id
146
+ def destroy
147
+ result = Spree.product_destroy_workflow.call(product: @resource)
148
+
149
+ if result.success?
150
+ head :no_content
151
+ else
152
+ render_result_error(result)
153
+ end
154
+ end
155
+
104
156
  protected
105
157
 
106
158
  def model_class
@@ -111,14 +163,12 @@ module Spree
111
163
  Spree.api.admin_product_serializer
112
164
  end
113
165
 
114
- def scope_includes
115
- [
116
- :tax_category,
117
- product_publications: :channel,
118
- primary_media: [attachment_attachment: :blob],
119
- master: [:prices, stock_items: [:stock_location, :active_stock_reservations]],
120
- variants: [:prices, stock_items: [:stock_location, :active_stock_reservations]]
121
- ]
166
+ def create_workflow
167
+ Spree.product_create_workflow
168
+ end
169
+
170
+ def update_workflow
171
+ Spree.product_update_workflow
122
172
  end
123
173
 
124
174
  # Use SearchProvider::Database for collection to handle price/best_selling
@@ -157,56 +207,108 @@ module Spree
157
207
  # docs/plans/6.0-remove-master-variant.md.
158
208
  #
159
209
  # Top-level `prices` is a convenience for simple (no-options)
160
- # products: the merchant doesn't need to know the master variant
161
- # exists, so they ship prices alongside name/status and the
162
- # `Spree::Product#prices=` setter forwards them to the master.
210
+ # products: the merchant doesn't need to know about the default
211
+ # variant, so they ship prices alongside name/status and the
212
+ # `Spree::Product#prices=` setter forwards them to it.
163
213
  params.permit(
214
+ *model_additional_permitted_attributes,
164
215
  :name, :description, :slug, :status,
165
216
  :meta_title, :meta_description, :meta_keywords,
166
- :tax_category_id,
167
- :promotionable, :digital,
217
+ :tax_category_id, :product_type_id, :delivery_profile_id,
218
+ :promotionable,
168
219
  tags: [],
169
220
  category_ids: [],
221
+ # Manual collection membership only — the model setter ignores
222
+ # incoming automatic collections and preserves the product's
223
+ # existing ones, since those are materialized from their rules.
224
+ #
225
+ # Deliberately reachable with `write_products` rather than
226
+ # `write_collections`: filing a product into its groupings is part
227
+ # of maintaining the product, which is why `category_ids` and the
228
+ # bulk membership endpoints have always worked this way too.
229
+ # Creating or configuring a collection still needs
230
+ # `write_collections`.
231
+ collection_ids: [],
170
232
  metadata: {},
171
233
  prices: [:amount, :compare_at_amount, :currency],
172
234
  # Inline custom field values keyed by definition id. The model
173
- # setter (`Spree::Metafields#custom_fields=`) validates each
235
+ # setter (`Spree::HasCustomFields#custom_fields=`) validates each
174
236
  # entry against its definition. We permit `value` as a scalar AND
175
- # as `value: []` / `value: {}` so JSON metafields round-trip
237
+ # as `value: []` / `value: {}` so JSON custom_fields round-trip
176
238
  # whether the parsed payload is an array or an object, while
177
239
  # text/number/boolean ship scalars.
178
240
  custom_fields: [:id, :custom_field_definition_id, :value, { value: [] }, { value: {} }],
179
- # Inline media. Entries with `id` patch an existing asset
180
- # (alt, position, variant_ids). Entries with `signed_id` create
181
- # + attach a fresh upload. Lets the dashboard ship media changes
182
- # alongside the rest of the product form. See
183
- # `Spree::Product#media=`.
184
- media: [:id, :signed_id, :alt, :position, :type, variant_ids: []],
241
+ # Inline media. Entries with `id` patch an existing asset.
242
+ # Entries with `signed_id` create + attach a fresh upload; an
243
+ # external video creates with a URL and no file. Lets the
244
+ # dashboard ship media changes alongside the rest of the product
245
+ # form. See `Spree::Products::NestedAttributes`.
246
+ #
247
+ # `external_url` is deliberately not permitted here: it makes the
248
+ # server fetch a URL the caller chose, so it belongs to trusted
249
+ # importers rather than to a request body.
250
+ media: [*Spree::Media::WRITABLE_ATTRIBUTES, :id, :signed_id, :source_media_id, { variant_ids: [] }],
251
+ # Inline digital files, so a new product ships its downloadable
252
+ # files in the same request. Additive: an entry carries a
253
+ # `signed_id` (uploaded file) or a `provider_type` (provider-backed
254
+ # asset), and an `id` patches that asset in place rather than
255
+ # building a duplicate — so replaying a product's list on update
256
+ # does not accumulate copies. Removal uses the nested
257
+ # digital_assets endpoint. See `Spree::Product#digital_assets=`.
258
+ digital_assets: [:id, :signed_id, :variant_id, :provider_type, :authorized_clicks, :authorized_days, provider_settings: {}],
185
259
  product_publications: [:id, :channel_id, :published_at, :unpublished_at],
186
260
  variants: [
187
261
  :id, :sku, :barcode,
188
262
  :cost_price, :cost_currency,
189
263
  :weight, :height, :width, :depth, :weight_unit, :dimensions_unit,
264
+ :hs_code, :country_of_origin, :customs_description,
265
+ :minimum_order_quantity, :order_multiple, :purchase_unit, :units_per_carton,
266
+ :carton_package_type_id, :carton_weight, :cartons_per_pallet,
267
+ :seller_id, :delivery_profile_id,
190
268
  :track_inventory, :preorderable, :preorder_ships_at, :backorder_limit, :tax_category_id, :position,
191
269
  options: [:name, :value],
192
270
  prices: [:amount, :compare_at_amount, :currency],
193
- stock_items: [:id, :stock_location_id, :count_on_hand, :backorderable]
271
+ stock_levels: [:id, :stock_location_id, :count_on_hand, :backorderable]
194
272
  ]
195
- )
273
+ ).tap { |attrs| attrs.delete(:status) if review_status?(attrs[:status]) }
274
+ end
275
+
276
+ # A review status is an outcome, not a value to assign: `proposed`
277
+ # means a seller asked, and `rejected` means somebody decided. Both
278
+ # are reached through the workflows behind `approve`/`reject`, so a
279
+ # status naming one here is dropped rather than written — the same
280
+ # reason `bulk_status_update` validates against `STATUSES` and not
281
+ # the full list (docs/plans/6.0-seller-product-submission.md).
282
+ def review_status?(status)
283
+ status.present? && Spree::Product::REVIEW_STATUSES.include?(status.to_s)
196
284
  end
197
285
 
198
286
  private
199
287
 
288
+ # Approving and rejecting are edits to the catalog, so they answer to
289
+ # the same key as any other product write.
290
+ def run_review_workflow(workflow, **arguments)
291
+ @resource = find_resource
292
+ authorize!(:update, @resource)
293
+
294
+ result = workflow.call(product: @resource, reviewer: try_spree_current_user, **arguments)
295
+
296
+ if result.success?
297
+ render json: serialize_resource(@resource.reload)
298
+ else
299
+ render_service_error(@resource.errors.presence || result.error)
300
+ end
301
+ end
302
+
200
303
  def search_provider
201
304
  @search_provider ||= Spree::SearchProvider::Database.new(current_store)
202
305
  end
203
306
 
204
- # Mirrors `Spree::Admin::ProductsController#after_bulk_tags_change`:
205
- # tag changes can flip automatic-taxon matches, and `Tags::Bulk*`
307
+ # Tag changes can flip automatic-collection matches, and `Tags::Bulk*`
206
308
  # touch records via `touch_all` (which skips `after_commit`), so the
207
309
  # search index needs an explicit kick.
208
310
  def after_bulk_tags_change
209
- Spree::Product.bulk_auto_match_taxons(current_store, bulk_collection.ids)
311
+ Spree::Product.bulk_auto_match_collections(current_store, bulk_collection.ids)
210
312
  bulk_collection.each(&:enqueue_search_index)
211
313
  end
212
314
 
@@ -221,12 +323,26 @@ module Spree
221
323
  categories = current_store.categories.
222
324
  accessible_by(current_ability, :update).where(id: category_ids)
223
325
 
224
- service.call(taxons: categories, products: bulk_collection)
225
- Spree::Product.bulk_auto_match_taxons(current_store, bulk_collection.ids)
326
+ service.call(categories: categories, products: bulk_collection)
226
327
 
227
328
  render json: { product_count: bulk_collection.size, category_count: categories.size }
228
329
  end
229
330
 
331
+ def apply_collections(service)
332
+ authorize! :update, model_class
333
+
334
+ # Only manual collections accept curation — automatic membership is
335
+ # rebuilt from rules, so a manual add/remove would be lost on the next
336
+ # regeneration (mirrors apply_categories, whose association is manual).
337
+ collection_ids = decode_ids(params[:collection_ids])
338
+ collections = current_store.collections.manual.
339
+ accessible_by(current_ability, :update).where(id: collection_ids)
340
+
341
+ service.call(collections: collections, products: bulk_collection)
342
+
343
+ render json: { product_count: bulk_collection.size, collection_count: collections.size }
344
+ end
345
+
230
346
  def scoped_channels
231
347
  channel_ids = decode_ids(params[:channel_ids])
232
348
  current_store.channels.accessible_by(current_ability, :manage).where(id: channel_ids)
@@ -30,9 +30,13 @@ module Spree
30
30
  klass = resolve_subclass(params[:type])
31
31
  return render_unknown_type unless klass && klass.respond_to?(:calculators)
32
32
 
33
+ # `api_type`, not the Ruby class name: it is what the action
34
+ # serializer reports for the calculator a record already has, and
35
+ # what a client matches against to find it in this list. The write
36
+ # path accepts either form.
33
37
  data = klass.calculators.map do |calc|
34
38
  {
35
- type: calc.to_s,
39
+ type: calc.api_type,
36
40
  label: calc.respond_to?(:description) ? calc.description : calc.to_s.demodulize.titleize,
37
41
  preference_schema: calc.respond_to?(:serialized_preference_schema) ? calc.serialized_preference_schema : []
38
42
  }
@@ -52,7 +56,7 @@ module Spree
52
56
  end
53
57
 
54
58
  def permitted_params
55
- params.permit(:type, preferences: {})
59
+ params.permit(*model_additional_permitted_attributes, :type, preferences: {})
56
60
  end
57
61
 
58
62
  # `types`/`calculators` are read-only discovery — read scope + :show ability.
@@ -30,7 +30,7 @@ module Spree
30
30
  end
31
31
 
32
32
  def permitted_params
33
- params.permit(:type, preferences: {})
33
+ params.permit(*model_additional_permitted_attributes, :type, preferences: {})
34
34
  end
35
35
 
36
36
  # `types` is read-only discovery — maps to the read scope + :show ability.
@@ -29,11 +29,7 @@ module Spree
29
29
  # every built-in rule/action's expected keys. Plugin-defined
30
30
  # subclasses can add to it — see `additional_permitted_attributes`
31
31
  # below.
32
- def permitted_params
33
- normalize_params(params.permit(*permitted_attributes))
34
- end
35
-
36
- def permitted_attributes
32
+ def resource_permitted_attributes
37
33
  [
38
34
  :name, :description, :code, :path,
39
35
  :starts_at, :expires_at, :usage_limit, :match_policy,
@@ -0,0 +1,32 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module PurchaseOrders
6
+ # The deliveries booked against one purchase order. Recording one
7
+ # is how the order is received: this is the moment purchased goods
8
+ # first count toward availability.
9
+ class StockReceiptsController < ResourceController
10
+ include Spree::Api::V3::Admin::StockReceiptActions
11
+
12
+ scoped_resource :purchasing
13
+
14
+ protected
15
+
16
+ def set_parent
17
+ @parent = current_store.purchase_orders.find_by_prefix_id!(params[:purchase_order_id])
18
+ end
19
+
20
+ def create_workflow
21
+ Spree.purchase_order_receive_workflow
22
+ end
23
+
24
+ def receivable_keyword
25
+ :purchase_order
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,161 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Goods bought from a supplier.
6
+ #
7
+ # Ordered units never count toward availability: nothing here touches
8
+ # `count_on_hand` until `receive` runs, because a merchant who has
9
+ # ordered stock does not have it.
10
+ #
11
+ # Each status change is its own member action rather than a PATCH that
12
+ # mass-assigns `status`, because receiving carries the quantities the
13
+ # warehouse counted.
14
+ class PurchaseOrdersController < ResourceController
15
+ include Spree::Api::V3::Admin::ReceivableActions
16
+
17
+ scoped_resource :purchasing
18
+
19
+ # The base registers this for show/update/destroy; a second
20
+ # `before_action :set_resource` replaces that registration rather than
21
+ # adding to it, so those three are listed again here.
22
+ before_action :set_resource, only: [:show, :update, :destroy, :mark_ordered, :mark_draft, :close, :cancel]
23
+
24
+ # DELETE /api/v3/admin/purchase_orders/:id
25
+ #
26
+ # Only a draft. Once the order has gone to the supplier it is a
27
+ # matter of record between two businesses, and is cancelled rather
28
+ # than deleted.
29
+ def destroy
30
+ return super if @resource.draft?
31
+
32
+ render_error(
33
+ code: 'invalid_status',
34
+ message: Spree.t('purchase_order.errors.only_draft_can_be_deleted'),
35
+ status: :unprocessable_content
36
+ )
37
+ end
38
+
39
+ # PATCH /api/v3/admin/purchase_orders/:id/mark_ordered
40
+ def mark_ordered
41
+ result = Spree.purchase_order_mark_ordered_workflow.call(purchase_order: @resource)
42
+ return render_result_error(result) unless result.success?
43
+
44
+ render json: serialize_resource(result.value)
45
+ end
46
+
47
+ # PATCH /api/v3/admin/purchase_orders/:id/receive
48
+ # PATCH /api/v3/admin/purchase_orders/:id/mark_draft
49
+ def mark_draft
50
+ result = Spree.purchase_order_mark_draft_workflow.call(purchase_order: @resource)
51
+ return render_result_error(result) unless result.success?
52
+
53
+ render json: serialize_resource(result.value)
54
+ end
55
+
56
+ # PATCH /api/v3/admin/purchase_orders/:id/close
57
+ #
58
+ # Deliveries are recorded through the nested stock receipts; this is
59
+ # for the balance that is not coming.
60
+ def close
61
+ result = Spree.purchase_order_close_workflow.call(purchase_order: @resource, reason: params[:reason])
62
+ return render_result_error(result) unless result.success?
63
+
64
+ render json: serialize_resource(result.value)
65
+ end
66
+
67
+ # PATCH /api/v3/admin/purchase_orders/:id/cancel
68
+ def cancel
69
+ result = Spree.purchase_order_cancel_workflow.call(
70
+ purchase_order: @resource,
71
+ reason: params[:reason],
72
+ canceler: try_spree_current_user
73
+ )
74
+ return render_result_error(result) unless result.success?
75
+
76
+ render json: serialize_resource(result.value)
77
+ end
78
+
79
+ protected
80
+
81
+ def model_class
82
+ Spree::PurchaseOrder
83
+ end
84
+
85
+ def serializer_class
86
+ Spree.api.admin_purchase_order_serializer
87
+ end
88
+
89
+ def collection_includes
90
+ [:supplier, :destination_location, line_includes]
91
+ end
92
+
93
+ def create_workflow
94
+ Spree.purchase_order_create_workflow
95
+ end
96
+
97
+ def update_workflow
98
+ Spree.purchase_order_update_workflow
99
+ end
100
+
101
+ def create_workflow_arguments
102
+ {
103
+ store: current_store,
104
+ supplier: supplier_from_params,
105
+ destination_location: stock_location_from(:destination_location_id),
106
+ items: items_from_params(:quantity_ordered, :unit_cost) || [],
107
+ currency: params[:currency],
108
+ expected_at: params[:expected_at],
109
+ cancel_by: params[:cancel_by],
110
+ reference: params[:reference],
111
+ notes: params[:notes],
112
+ created_by: try_spree_current_user
113
+ }
114
+ end
115
+
116
+ def update_workflow_arguments
117
+ {
118
+ purchase_order: @resource,
119
+ attributes: editable_attributes,
120
+ items: items_from_params(:quantity_ordered, :unit_cost)
121
+ }
122
+ end
123
+
124
+ # The supplier and the warehouse are resolved through the store
125
+ # instead, since an id the payload names has to be proved to belong
126
+ # here.
127
+ def resource_permitted_attributes
128
+ [:currency, :expected_at, :cancel_by, :reference, :notes, { metadata: {} }]
129
+ end
130
+
131
+ def editable_attributes
132
+ attributes = permitted_params.to_h.symbolize_keys
133
+ attributes[:supplier] = supplier_from_params if params.key?(:supplier_id)
134
+ if params.key?(:destination_location_id)
135
+ attributes[:destination_location] = stock_location_from(:destination_location_id)
136
+ end
137
+ attributes
138
+ end
139
+
140
+ def scope_includes
141
+ [line_includes]
142
+ end
143
+
144
+ private
145
+
146
+ # Read through `current_store` rather than the model constant: a
147
+ # supplier id belonging to another store must 404, which no ability
148
+ # check would catch.
149
+ #
150
+ # @return [Spree::Supplier, nil]
151
+ def supplier_from_params
152
+ return nil if params[:supplier_id].blank?
153
+
154
+ current_store.suppliers.accessible_by(current_ability, :show).
155
+ find_by_prefix_id!(params[:supplier_id])
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,25 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class RefundReasonsController < ResourceController
6
+ scoped_resource :settings
7
+
8
+ protected
9
+
10
+ def model_class
11
+ Spree::RefundReason
12
+ end
13
+
14
+ def serializer_class
15
+ Spree.api.admin_refund_reason_serializer
16
+ end
17
+
18
+ def permitted_params
19
+ params.permit(*model_additional_permitted_attributes, :name, :active)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,45 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module Reporting
6
+ # Store-wide saved reports (docs/plans/6.0-analytics-semantic-layer.md,
7
+ # Decision 12). Reads ride `read_reports`, mutations `write_reports`;
8
+ # the stored query is validated against the registry on save, and
9
+ # every viewer is re-authorized when the report is executed through
10
+ # the query endpoint.
11
+ class SavedReportsController < ResourceController
12
+ scoped_resource :reports
13
+
14
+ protected
15
+
16
+ def model_class
17
+ Spree::SavedReport
18
+ end
19
+
20
+ def serializer_class
21
+ Spree.api.admin_saved_report_serializer
22
+ end
23
+
24
+ def scope_includes
25
+ [:user]
26
+ end
27
+
28
+ # Deliberately NOT routed through `normalize_params`: the stored
29
+ # query carries filter values such as `cust_…`/`ch_…` prefixed ids
30
+ # inside a nested hash, and prefixed-ID resolution recurses into
31
+ # nested hashes — they would be decoded to integers on save and
32
+ # never resolve again. Extension attributes are splatted in.
33
+ def permitted_params
34
+ params.permit(:name, :description, *model_additional_permitted_attributes, query: {})
35
+ end
36
+
37
+ def build_resource
38
+ super.tap { |report| report.user = try_spree_current_user }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end