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
data/config/routes.rb CHANGED
@@ -29,7 +29,14 @@ Spree::Core::Engine.add_routes do
29
29
  get :filters, to: 'products/filters#index'
30
30
  end
31
31
  end
32
+ # Public seller profiles. Read-only, and only sellers a shopper can
33
+ # actually buy from — see Store::SellersController.
34
+ resources :sellers, only: [:index, :show], id: /.+/
35
+
32
36
  resources :categories, only: [:index, :show], id: /.+/
37
+ resources :collections, only: [:index, :show] do
38
+ resources :products, controller: 'collections/products', only: [:index]
39
+ end
33
40
 
34
41
  # Carts
35
42
  resources :carts, only: [:index, :show, :create, :update, :destroy] do
@@ -48,10 +55,31 @@ Spree::Core::Engine.add_routes do
48
55
  end
49
56
  end
50
57
  resource :store_credits, only: [:create, :destroy], controller: 'carts/store_credits'
58
+ resource :tax_identifier, only: [:show, :update, :destroy], controller: 'carts/tax_identifiers'
59
+ resource :po_document, only: [:show, :create, :destroy], controller: 'carts/po_documents'
60
+ end
61
+
62
+ # Delivery methods (pickup discovery)
63
+ resources :delivery_methods, only: [:index, :show] do
64
+ member do
65
+ get :pickup_locations
66
+ get :pickup_points
67
+ end
51
68
  end
52
69
 
53
70
  # Orders (single order lookup, guest-accessible via order token)
54
- resources :orders, only: [:show]
71
+ resources :orders, only: [:show] do
72
+ # Customer self-service returns — opening and viewing only; the
73
+ # merchant approves, receives and refunds through the Admin API.
74
+ resources :returns, only: [:index, :show, :create], controller: 'orders/returns' do
75
+ member do
76
+ get :label
77
+ end
78
+ end
79
+ resources :claims, only: [:index, :show, :create], controller: 'orders/claims'
80
+ # Read-only — the registration frozen onto the order at completion.
81
+ resource :tax_identifier, only: [:show], controller: 'orders/tax_identifiers'
82
+ end
55
83
 
56
84
  # Policies (return policy, privacy policy, terms of service, etc.)
57
85
  resources :policies, only: [:index, :show]
@@ -84,6 +112,14 @@ Spree::Core::Engine.add_routes do
84
112
  resources :credit_cards, only: [:index, :show, :destroy]
85
113
  resources :gift_cards, only: [:index, :show]
86
114
  resources :store_credits, only: [:index, :show]
115
+ # Plural for the list a checkout page offers; singular for reading or
116
+ # upserting one kind without knowing whether it exists yet.
117
+ resources :tax_identifiers, only: [:index], controller: 'tax_identifiers'
118
+ resource :tax_identifier, only: [:show, :update, :destroy], controller: 'tax_identifiers'
119
+ resources :digital_links, only: [:index, :show]
120
+ # GDPR subject rights the customer exercises for themselves — a copy
121
+ # of their data, or its erasure.
122
+ resources :data_requests, only: [:index, :show, :create]
87
123
  resources :payment_setup_sessions, only: [:create, :show] do
88
124
  member do
89
125
  patch :complete
@@ -91,6 +127,29 @@ Spree::Core::Engine.add_routes do
91
127
  end
92
128
  end
93
129
 
130
+ # Company self-service — the buyer's organization directory
131
+ # (docs/plans/6.0-b2b-companies-and-catalogs.md). Authorization is
132
+ # standing + the storefront access policy, never roles.
133
+ get 'account/companies', to: 'account/companies#index'
134
+
135
+ resources :companies, only: [:show, :update] do
136
+ resources :addresses, only: [:index, :create, :update, :destroy],
137
+ controller: 'companies/addresses'
138
+ # POST takes customer_email — a membership for an existing customer,
139
+ # an invitation otherwise.
140
+ resources :members, only: [:index, :create, :destroy], controller: 'companies/members'
141
+ # DELETE revokes the invitation rather than erasing the record.
142
+ resources :invitations, only: [:index, :destroy], controller: 'companies/invitations'
143
+ # Completed purchases across the node's subtree.
144
+ resources :orders, only: [:index], controller: 'companies/orders'
145
+ end
146
+
147
+ # The invitee has no company yet — and no account — so the token flow
148
+ # is deliberately top-level and unauthenticated, unlike everything
149
+ # else about a company, which is reached through the node.
150
+ get 'company_invitations/:token', to: 'company_invitations#show', as: :company_invitation_lookup
151
+ post 'company_invitations/:token/accept', to: 'company_invitations#accept'
152
+
94
153
  # Wishlists
95
154
  resources :wishlists do
96
155
  resources :items, only: [:create, :update, :destroy], controller: 'wishlist_items'
@@ -98,7 +157,12 @@ Spree::Core::Engine.add_routes do
98
157
 
99
158
  # Digital Downloads
100
159
  # Access via token in URL
101
- get 'digitals/:token', to: 'digitals#show', as: :digital_download
160
+ get 'digital_links/:token', to: 'digital_links#show', as: :digital_link_download
161
+ # Token-addressed so the emailed link works from a device that was
162
+ # never signed in.
163
+ get 'data_requests/:token/download', to: 'data_request_downloads#show', as: :data_request_download
164
+ # Legacy path — emailed and bookmarked URLs outlive the rename. Removed in 6.1.
165
+ get 'digitals/:token', to: 'digital_links#show', as: :digital_download
102
166
 
103
167
  # Data Feeds (public, no auth required)
104
168
  resources :feeds, only: [:show], controller: 'data_feeds', param: :slug
@@ -106,7 +170,7 @@ Spree::Core::Engine.add_routes do
106
170
 
107
171
  namespace :admin do
108
172
  # Mounts a nested `custom_fields` resource on parents that include
109
- # Spree::Metafields. See docs/plans/5.4-6.0-custom-fields-rename.md.
173
+ # Spree::HasCustomFields. See docs/plans/5.4-6.0-custom-fields-rename.md.
110
174
  concern :custom_fieldable do
111
175
  resources :custom_fields
112
176
  end
@@ -119,8 +183,26 @@ Spree::Core::Engine.add_routes do
119
183
  resources :translations, only: [:index], controller: 'translations'
120
184
  end
121
185
 
186
+ # Mounts the uniform nested products surface on parents that curate
187
+ # products (categories, collections, catalogs, price lists). Bulk by
188
+ # design: POST adds and DELETE removes any number of products in one
189
+ # request. `positioned: true` adds per-member reposition where the
190
+ # membership carries a manual order. See
191
+ # Spree::Api::V3::Admin::ProductMembership.
192
+ concern :product_membership do |options|
193
+ resources :products, controller: options.fetch(:controller), only: [:index, :create] do
194
+ patch :reposition, on: :member if options[:positioned]
195
+ end
196
+ delete 'products', to: "#{options.fetch(:controller)}#destroy"
197
+ end
198
+
122
199
  # Definitions are per resource type, not per instance.
123
- resources :custom_field_definitions
200
+ resources :custom_field_definitions do
201
+ collection do
202
+ # What a definition can be attached to, from the registry.
203
+ get :resource_types
204
+ end
205
+ end
124
206
 
125
207
  # Translation discovery: the translatable-resources registry and the
126
208
  # store's supported locales. See docs/plans/5.5-6.0-resource-translations-api.md.
@@ -131,26 +213,48 @@ Spree::Core::Engine.add_routes do
131
213
  # option values in one save). Flat list of independent registry writes.
132
214
  post 'translations/batch', to: 'translations/batches#create'
133
215
 
216
+ # Translation coverage across a whole resource type (?resource_type=),
217
+ # driving the centralized Translations page's grid.
218
+ get 'translations', to: 'translations_coverage#index'
219
+
134
220
  # Authentication
135
221
  post 'auth/login', to: 'auth#create'
136
222
  post 'auth/refresh', to: 'auth#refresh'
137
223
  post 'auth/logout', to: 'auth#logout'
138
224
 
225
+ # Provider discovery + SSO callback — unauthenticated; both are used
226
+ # before a session exists. Discovery drives the dashboard login page.
227
+ get 'auth/providers', to: 'auth#providers'
228
+ get 'auth/callback/:provider', to: 'auth#callback'
229
+
139
230
  # Public invitation acceptance — unauthenticated; the prefixed ID +
140
231
  # token in the URL act as the credential. Mounted under `auth/` so
141
232
  # the issued refresh-token cookie's path matches `/auth/refresh`.
142
233
  get 'auth/invitations/:id/lookup', to: 'invitation_acceptances#lookup'
143
234
  post 'auth/invitations/:id/accept', to: 'invitation_acceptances#accept'
144
235
 
236
+ # First-run setup — unauthenticated; the one-time setup token is the
237
+ # credential, and the flow self-disables once any admin user exists.
238
+ get 'auth/setup', to: 'setup#show'
239
+ get 'auth/setup/countries', to: 'setup#countries'
240
+ post 'auth/setup', to: 'setup#create'
241
+
145
242
  # Public password reset — unauthenticated; the token is the credential.
146
243
  # Mounted under `auth/` so the refresh-token cookie issued on success
147
244
  # shares its path with `/auth/refresh`.
148
245
  post 'auth/password_resets', to: 'password_resets#create'
149
246
  patch 'auth/password_resets/:id', to: 'password_resets#update'
150
247
 
151
- # Dashboard
248
+ # Semantic reporting (docs/plans/6.0-analytics-semantic-layer.md)
249
+ namespace :reporting do
250
+ post :query
251
+ get :schema
252
+ resources :saved_reports, only: %i[index show create update destroy]
253
+ end
254
+
255
+ # Dashboard (point-in-time counts registered on Spree.reporting)
152
256
  namespace :dashboard do
153
- get :analytics
257
+ get :counters
154
258
  end
155
259
 
156
260
  # Current admin user + permissions (for UI permission checks)
@@ -159,7 +263,9 @@ Spree::Core::Engine.add_routes do
159
263
  patch 'me', to: 'me#update'
160
264
 
161
265
  # Store Settings
162
- resource :store, only: [:show, :update], controller: 'store'
266
+ resource :store, only: [:show, :update], controller: 'store' do
267
+ get :data_sources
268
+ end
163
269
 
164
270
  # Staff & access (invitations, admin users, roles, API keys)
165
271
  resources :admin_users, only: [:index, :show, :update, :destroy]
@@ -189,7 +295,8 @@ Spree::Core::Engine.add_routes do
189
295
  end
190
296
  end
191
297
  end
192
- resources :roles, only: [:index, :show]
298
+ resources :roles, only: [:index, :show, :create, :update, :destroy]
299
+ resources :permissions, only: [:index]
193
300
 
194
301
  # Direct Uploads (Active Storage)
195
302
  resources :direct_uploads, only: [:create]
@@ -216,14 +323,25 @@ Spree::Core::Engine.add_routes do
216
323
  end
217
324
 
218
325
  # Products
326
+ resources :product_types do
327
+ member do
328
+ post :apply_to_products
329
+ end
330
+ end
219
331
  resources :products, concerns: [:custom_fieldable, :translatable] do
220
332
  member do
221
333
  post :clone
334
+ # Closing a review a seller opened
335
+ # (docs/plans/6.0-seller-product-submission.md).
336
+ patch :approve
337
+ patch :reject
222
338
  end
223
339
  collection do
224
340
  post :bulk_status_update
225
341
  post :bulk_add_to_categories
226
342
  post :bulk_remove_from_categories
343
+ post :bulk_add_to_collections
344
+ post :bulk_remove_from_collections
227
345
  post :bulk_add_to_channels
228
346
  post :bulk_remove_from_channels
229
347
  post :bulk_add_tags
@@ -234,6 +352,29 @@ Spree::Core::Engine.add_routes do
234
352
  resources :media, controller: 'media', only: [:index, :create, :update, :destroy]
235
353
  end
236
354
  resources :media, controller: 'media', only: [:index, :create, :update, :destroy]
355
+ resources :digital_assets, controller: 'products/digital_assets',
356
+ only: [:index, :create, :show, :update, :destroy] do
357
+ collection do
358
+ get :providers
359
+ end
360
+ end
361
+ end
362
+
363
+ # Digital download grants — read and reset only; they are created by
364
+ # order completion, never by hand.
365
+ resources :digital_links, only: [:index, :show] do
366
+ member do
367
+ patch :reset
368
+ end
369
+ end
370
+
371
+ # Media library — every file in the store, placed or not. Files are put
372
+ # ON a product through the nested media routes above; this is where they
373
+ # are uploaded, browsed and deleted.
374
+ resources :media, controller: 'media_library', only: [:index, :show, :create, :update, :destroy] do
375
+ member do
376
+ get :usage
377
+ end
237
378
  end
238
379
 
239
380
  # Categories
@@ -243,39 +384,122 @@ Spree::Core::Engine.add_routes do
243
384
  end
244
385
 
245
386
  # Manual product membership + ordering within the category.
246
- # (Bulk add/remove reuse POST /products/bulk_{add,remove}_*_categories.)
247
- resources :products, controller: 'categories/products', only: [:index, :create, :destroy] do
248
- member do
249
- patch :reposition
250
- end
251
- end
387
+ concerns :product_membership, controller: 'categories/products', positioned: true
252
388
  end
253
389
 
390
+ # Collections (flat, merchandising). Reordering the collection itself is a
391
+ # plain `position` update (acts_as_list reorders on save), so there is no
392
+ # top-level reposition action — only the nested membership has one.
393
+ resources :collections, concerns: [:custom_fieldable, :translatable] do
394
+ # Manual product membership + ordering within the collection.
395
+ concerns :product_membership, controller: 'collections/products', positioned: true
396
+ end
397
+
398
+ # Subclass discovery for the collection rules editor, mirroring
399
+ # `/promotion_rules/types`. Top-level (and read-only) because rules are
400
+ # written through the collection's own `rules` setter, not nested CRUD.
401
+ get 'collection_rules/types', to: 'collection_rules#types'
402
+
254
403
  # Option Types (with nested option_values in payload)
255
404
  resources :option_types, concerns: [:custom_fieldable, :translatable]
256
405
 
406
+ # Store policies (terms of service, privacy, returns, shipping, …)
407
+ resources :policies, concerns: [:translatable]
408
+
257
409
  # Tax Categories
258
410
  resources :tax_categories
259
411
 
412
+ # Tax Rates — the internal tax provider's configuration
413
+ resources :tax_rates
414
+
415
+ # Selectable tax engines and their declared limits (discovery only)
416
+ resources :tax_providers, only: [:index]
417
+ # How sellers get paid. Discovery only — the choice itself is a store
418
+ # preference, so there is nothing here to create.
419
+ resources :payout_providers, only: [:index]
420
+
421
+ # Return / claim / refund / cancellation reasons (dropdowns + settings management)
422
+ resources :return_reasons
423
+ resources :claim_reasons
424
+ resources :refund_reasons
425
+ resources :order_cancellation_reasons
426
+
260
427
  # Markets
261
428
  resources :markets
262
429
 
263
- # Store Credit Categories (read-only — for store credit dropdowns)
264
- resources :store_credit_categories, only: [:index, :show]
265
-
266
430
  # Inventory
267
431
  resources :stock_locations
268
432
  resources :stock_reservations, only: [:index, :show]
269
- resources :stock_items, only: [:index, :show, :update, :destroy]
270
- resources :stock_transfers, only: [:index, :show, :create, :destroy]
433
+ resources :stock_levels, only: [:index, :show, :update, :destroy] do
434
+ collection do
435
+ post :bulk_upsert
436
+ end
437
+ end
438
+ resources :stock_movements, only: [:index, :show]
439
+ resources :stock_transfers do
440
+ member do
441
+ patch :mark_ready
442
+ patch :mark_in_transit
443
+ patch :mark_draft
444
+ patch :close
445
+ patch :cancel
446
+ end
447
+ resources :stock_receipts, only: [:index, :show, :create], module: :stock_transfers
448
+ end
449
+
450
+ # Purchasing
451
+ resources :suppliers
452
+ resources :purchase_orders do
453
+ member do
454
+ patch :mark_ordered
455
+ patch :mark_draft
456
+ patch :close
457
+ patch :cancel
458
+ end
459
+ resources :stock_receipts, only: [:index, :show, :create], module: :purchase_orders
460
+ end
271
461
 
272
462
  # Payment Methods
463
+ resources :delivery_methods do
464
+ collection do
465
+ get :calculators
466
+ get :fulfillment_providers
467
+ get :rate_providers
468
+ end
469
+ resources :rules, controller: 'delivery_methods/rules', only: [:index, :show, :create, :update, :destroy]
470
+ end
471
+ resources :tracking_carriers, only: [:index]
472
+ resources :delivery_method_rules, only: [] do
473
+ collection do
474
+ get :types
475
+ end
476
+ end
477
+ resources :delivery_zones
478
+ resources :package_types
479
+
480
+ resources :delivery_profiles do
481
+ collection do
482
+ get :kinds
483
+ end
484
+ resources :origin_groups, controller: 'delivery_profiles/origin_groups',
485
+ only: [:index, :show, :create, :update, :destroy]
486
+ end
487
+
273
488
  resources :payment_methods do
274
489
  collection do
275
490
  get :types
276
491
  end
277
492
  end
278
493
 
494
+ resources :integrations do
495
+ collection do
496
+ get :types
497
+ end
498
+ member do
499
+ post :test
500
+ end
501
+ end
502
+
279
503
  # Promotions, with nested actions/rules/coupon codes.
280
504
  resources :promotions do
281
505
  resources :promotion_actions, only: [:index, :show, :create, :update, :destroy]
@@ -305,6 +529,19 @@ Spree::Core::Engine.add_routes do
305
529
  resources :addresses, controller: 'customers/addresses'
306
530
  resources :credit_cards, controller: 'customers/credit_cards', only: [:index, :show, :destroy]
307
531
  resources :store_credits, controller: 'customers/store_credits'
532
+ resources :tax_identifiers, controller: 'customers/tax_identifiers' do
533
+ member do
534
+ post :validate
535
+ end
536
+ end
537
+
538
+ member do
539
+ # GDPR: answer a subject access request, or carry out an erasure.
540
+ # Both are how these requests actually arrive — by email to the
541
+ # merchant, from people who often can no longer sign in.
542
+ get :export
543
+ post :anonymize
544
+ end
308
545
 
309
546
  collection do
310
547
  post :bulk_add_to_groups
@@ -314,9 +551,164 @@ Spree::Core::Engine.add_routes do
314
551
  end
315
552
  end
316
553
 
554
+ # GDPR compliance log. Requests are records of what happened, so they
555
+ # are created and read but never edited or deleted — an editable audit
556
+ # trail is not one.
557
+ resources :data_requests, only: [:index, :show, :create]
558
+ resources :consent_records, only: [:index, :show]
559
+
317
560
  # Customer groups (segmentation; used by promotion rules + bulk customer ops)
318
561
  resources :customer_groups
319
562
 
563
+ # Marketplace sellers. Each status change is its own member action
564
+ # because each one is a workflow with its own arguments — mass
565
+ # assignment would skip the mail and the extension hooks.
566
+ resources :sellers, concerns: :custom_fieldable do
567
+ member do
568
+ post :invite
569
+ patch :approve
570
+ patch :suspend
571
+ patch :reject
572
+ # Where the seller stands against the marketplace's checklist,
573
+ # and the way back to onboarding when something has to be redone.
574
+ get :onboarding
575
+ patch :reopen_onboarding
576
+ end
577
+
578
+ # Where the seller stands on the ledger, one row per currency.
579
+ resources :balances, only: [:index], controller: 'sellers/balances'
580
+
581
+ # Settling this seller by hand. The scheduled sweep skips anyone on
582
+ # the `manual` interval — this is where the operator decides.
583
+ resources :payouts, only: [:create], controller: 'sellers/payouts'
584
+
585
+ # Who runs this seller, and the offers nobody has accepted yet.
586
+ # The operator is the only one who can repair a seller whose team
587
+ # has locked itself out, which the seller's own panel cannot do.
588
+ resources :team, only: [:index, :destroy], controller: 'sellers/team'
589
+ resources :invitations, only: [:index, :destroy], controller: 'sellers/invitations' do
590
+ member do
591
+ patch :resend
592
+ end
593
+ end
594
+
595
+ # What this seller submitted about the requirements, and the
596
+ # operator's decisions on it. Nested, because a submission means
597
+ # nothing outside the seller it belongs to.
598
+ resources :requirement_submissions, only: [:index, :show, :create],
599
+ controller: 'seller_requirement_submissions' do
600
+ member do
601
+ patch :accept
602
+ patch :reject
603
+ get :download
604
+ end
605
+ end
606
+ end
607
+
608
+ # What this marketplace asks of a seller before it will let them
609
+ # trade. Configuration, so it hangs off the store rather than a
610
+ # seller.
611
+ resources :seller_requirements do
612
+ collection do
613
+ get :types
614
+ end
615
+ end
616
+
617
+ # Commissions — what the marketplace charges its sellers. Rates are
618
+ # configuration; lines are the record of what was charged, so they are
619
+ # read-only.
620
+ resources :commission_rates do
621
+ collection do
622
+ get :rule_types
623
+ end
624
+ end
625
+ resources :commission_lines, only: [:index, :show]
626
+
627
+ # The fund ledger — what sellers earned, and what has been sent them.
628
+ # Both are written by fulfilment and by the sweep rather than by a
629
+ # caller, so both are read-only. The one thing an operator does is say
630
+ # a settlement landed, which the built-in provider depends on: it
631
+ # records what to send and waits to be told it went.
632
+ resources :seller_transfers, only: [:index, :show]
633
+ resources :seller_payouts, only: [:index, :show] do
634
+ member do
635
+ patch :complete
636
+ end
637
+ end
638
+
639
+ # What one checkout produced when it reached several sellers. Read-only:
640
+ # everything an operator acts on lives on the orders inside it.
641
+ resources :order_groups, only: [:index, :show]
642
+
643
+ # Business customers — a tree of company nodes. Nested collections are
644
+ # listed and created under their node and then addressed directly, so
645
+ # a caller holding an entry id does not have to know its company.
646
+ resources :companies do
647
+ # The node's address book.
648
+ resources :addresses, controller: 'companies/addresses'
649
+
650
+ # The people with standing over the node. Creation takes an email:
651
+ # a membership for an existing customer, an invitation otherwise.
652
+ resources :memberships, controller: 'companies/memberships',
653
+ only: [:index, :show, :create, :destroy]
654
+ # DELETE revokes the invitation rather than erasing the record.
655
+ resources :invitations, controller: 'companies/invitations',
656
+ only: [:index, :show, :destroy]
657
+
658
+ # The business's own registration — the number on its invoices, which
659
+ # outranks the buyer's own. Same shape as the customer's.
660
+ resources :tax_identifiers, controller: 'companies/tax_identifiers' do
661
+ member do
662
+ post :validate
663
+ end
664
+ end
665
+
666
+ # Exemption evidence. Accepting or withdrawing one is its own action —
667
+ # never mass assignment — and a verified certificate is revoked
668
+ # rather than deleted.
669
+ resources :tax_exemption_certificates, controller: 'companies/tax_exemption_certificates' do
670
+ member do
671
+ patch :verify
672
+ patch :revoke
673
+ get :download
674
+ end
675
+ end
676
+ end
677
+
678
+
679
+ # Catalogs — assortment + optional price list, assigned to a buyer
680
+ # audience (customer group, or company subtree).
681
+ resources :catalogs do
682
+ member do
683
+ post :assign
684
+ post :import_products
685
+ # Going live is its own act, not a column write: an agreement is
686
+ # checked before it starts reaching buyers, and what has to happen
687
+ # alongside hangs off the workflow's hooks.
688
+ patch :activate
689
+ patch :deactivate
690
+ end
691
+ # Assortment membership. Unordered: a catalog decides what a buyer
692
+ # sees, never the order they see it in.
693
+ concerns :product_membership, controller: 'catalogs/products'
694
+
695
+ # Commercial terms. Typed per grain rather than one rules endpoint:
696
+ # quantity rules are per variant, minimums are per currency.
697
+ #
698
+ # Quantity rules are written as a whole set, because the agreement
699
+ # editor stages every term behind the catalog's Save: a half-applied
700
+ # agreement is not a state to leave a merchant in. They are read
701
+ # back on the assortment rows themselves (`expand=quantity_rule` on
702
+ # this catalog's products), where the variants they roll up are
703
+ # already loaded (docs/plans/6.0-volume-pricing.md).
704
+ resources :quantity_rules, controller: 'catalogs/quantity_rules', only: [] do
705
+ collection { put :upsert, path: '' }
706
+ end
707
+ resources :order_minimums, controller: 'catalogs/order_minimums',
708
+ only: [:index, :show, :create, :update, :destroy]
709
+ end
710
+ resources :catalog_assignments, only: [:show, :destroy]
711
+
320
712
  # Price lists
321
713
  resources :price_lists do
322
714
  collection do
@@ -326,6 +718,9 @@ Spree::Core::Engine.add_routes do
326
718
  patch :activate
327
719
  patch :deactivate
328
720
  end
721
+ # Which products the list prices. Adding materializes placeholder
722
+ # prices per variant x currency; removing hard-deletes the rows.
723
+ concerns :product_membership, controller: 'price_lists/products'
329
724
  end
330
725
 
331
726
  # Prices (generic — covers base prices AND price-list overrides).
@@ -340,6 +735,18 @@ Spree::Core::Engine.add_routes do
340
735
  resources :gift_cards
341
736
  resources :gift_card_batches, only: [:index, :show, :create]
342
737
 
738
+ # Store credits across all customers. Read-only: issuing, editing and
739
+ # deleting a credit stays nested under the customer that holds it.
740
+ resources :store_credits, only: [:index, :show] do
741
+ resources :events, only: [:index], controller: 'store_credits/events'
742
+ end
743
+
744
+ # Post-sale, across all orders. Read-only — creating any of these
745
+ # needs an order, so writes live under /orders/:order_id/...
746
+ resources :returns, only: [:index, :show]
747
+ resources :exchanges, only: [:index, :show]
748
+ resources :claims, only: [:index, :show]
749
+
343
750
  # Channels (per-store distribution surfaces)
344
751
  resources :channels do
345
752
  member do
@@ -367,18 +774,64 @@ Spree::Core::Engine.add_routes do
367
774
  patch :complete
368
775
  patch :cancel
369
776
  patch :approve
370
- patch :resume
371
777
  post :resend_confirmation
778
+ post :resend_digital_links
779
+ # The buyer's purchase order, streamed through the API so it is
780
+ # never reachable without admin credentials.
781
+ get :po_document
372
782
  end
373
783
 
374
784
  resources :items, only: [:index, :show, :create, :update, :destroy], controller: 'orders/items'
375
785
  resources :fulfillments, controller: 'orders/fulfillments', only: [:index, :show, :create, :update] do
376
786
  member do
377
787
  patch :fulfill
788
+ patch :mark_delivered
378
789
  patch :cancel
379
- patch :resume
380
790
  patch :split
381
791
  end
792
+
793
+ resources :labels, controller: 'orders/labels', only: [:index, :show, :create, :destroy] do
794
+ member do
795
+ get :download
796
+ patch :refund
797
+ end
798
+ end
799
+ resources :deliveries, controller: 'orders/deliveries', only: [:index, :show, :create, :update, :destroy] do
800
+ member do
801
+ patch :mark_delivered
802
+ end
803
+ end
804
+ end
805
+ resources :returns, controller: 'orders/returns', only: [:index, :show, :create, :update] do
806
+ member do
807
+ patch :approve
808
+ patch :receive
809
+ patch :refund
810
+ patch :cancel
811
+ end
812
+
813
+ resources :labels, controller: 'orders/labels', only: [:index, :show, :create, :destroy] do
814
+ member do
815
+ get :download
816
+ patch :refund
817
+ end
818
+ end
819
+ end
820
+ resources :exchanges, controller: 'orders/exchanges', only: [:index, :show, :create, :update] do
821
+ member do
822
+ patch :approve
823
+ patch :receive
824
+ patch :fulfill
825
+ patch :cancel
826
+ end
827
+ end
828
+ resources :claims, controller: 'orders/claims', only: [:index, :show, :create, :update] do
829
+ member do
830
+ patch :approve
831
+ patch :resolve
832
+ patch :deny
833
+ patch :cancel
834
+ end
382
835
  end
383
836
  resources :payments, controller: 'orders/payments', only: [:index, :show, :create] do
384
837
  member do
@@ -387,15 +840,270 @@ Spree::Core::Engine.add_routes do
387
840
  end
388
841
  end
389
842
  resources :refunds, controller: 'orders/refunds', only: [:index, :create]
390
- resources :adjustments, controller: 'orders/adjustments', only: [:index, :show]
843
+ resources :tax_lines, controller: 'orders/tax_lines', only: [:index, :show]
844
+ # Read-only — the registration frozen onto the order at completion.
845
+ resource :tax_identifier, controller: 'orders/tax_identifiers', only: [:show]
846
+ resources :discounts, controller: 'orders/discounts', only: [:index, :show, :create, :update, :destroy]
847
+ resources :discount_codes, controller: 'orders/discount_codes', only: [:create, :destroy]
848
+ resources :fees, controller: 'orders/fees', only: [:index, :show, :create, :update, :destroy]
391
849
  resources :gift_cards, controller: 'orders/gift_cards', only: [:create, :destroy]
392
850
  resource :store_credits, controller: 'orders/store_credits', only: [:create, :destroy]
393
851
  end
394
852
  end
395
853
 
854
+ # The marketplace seller panel. A branch of its own rather than a
855
+ # narrowing of :admin — every endpoint here scope-fetches through
856
+ # current_seller, which is what makes cross-seller access impossible by
857
+ # construction rather than by rule.
858
+ namespace :seller do
859
+ # Everything unauthenticated lives under auth/, so the refresh
860
+ # cookie's path covers it and nothing else.
861
+ post 'auth/login', to: 'auth#create'
862
+ post 'auth/refresh', to: 'auth#refresh'
863
+ post 'auth/logout', to: 'auth#logout'
864
+ get 'auth/providers', to: 'auth#providers'
865
+
866
+ # Public invitation acceptance — unauthenticated; the prefixed ID +
867
+ # token in the emailed link are the credential.
868
+ get 'auth/invitations/:id/lookup', to: 'invitation_acceptances#lookup'
869
+ post 'auth/invitations/:id/accept', to: 'invitation_acceptances#accept'
870
+
871
+ # Public password reset — unauthenticated; the emailed token is the
872
+ # credential. Under `auth/` so the refresh cookie issued on success
873
+ # shares its path with `/auth/refresh`.
874
+ post 'auth/password_resets', to: 'password_resets#create'
875
+ patch 'auth/password_resets/:id', to: 'password_resets#update'
876
+
877
+ get 'me', to: 'me#show'
878
+
879
+ # Singular: the seller in play is always `current_seller`.
880
+ resource :profile, only: [:show, :update], controller: 'profile'
881
+
882
+ # The seller's own registrations — a collection, like a company's: a
883
+ # business trading in several regimes holds one in each.
884
+ resources :tax_identifiers, only: [:index, :create, :update, :destroy],
885
+ controller: 'tax_identifiers' do
886
+ member do
887
+ post :validate
888
+ end
889
+ end
890
+
891
+ resources :team, only: [:index, :create, :destroy], controller: 'team'
892
+
893
+ # Creating an invitation is hiring, so it lives on `team`; chasing or
894
+ # withdrawing one is bookkeeping on the offer.
895
+ resources :invitations, only: [:index, :destroy], controller: 'invitations' do
896
+ member do
897
+ patch :resend
898
+ end
899
+ end
900
+
901
+ resources :products, only: [:index, :show, :create, :update, :destroy] do
902
+ # Status moves are actions, not an attribute: putting a product on
903
+ # sale is the marketplace's call, so a seller asks rather than sets.
904
+ member do
905
+ patch :submit
906
+ patch :draft
907
+ patch :archive
908
+ end
909
+
910
+ # The same three moves over a selection. Only the ones a seller may
911
+ # make alone: there is no bulk route onto `active`, because reaching
912
+ # it is the operator's decision on one listing at a time.
913
+ collection do
914
+ post :bulk_submit
915
+ post :bulk_status_update
916
+ delete :bulk_destroy
917
+ end
918
+ end
919
+
920
+
921
+ # What this seller has sold. Cancelling is a member action because it
922
+ # is a workflow with its own arguments, and fulfilling is nested: a
923
+ # parcel means nothing outside the order it belongs to.
924
+ #
925
+ # No `update`: an order is created by a shopper checking out and its
926
+ # terms are the marketplace's, so the branch routes no general write.
927
+ # Correcting a delivery address is the one exception a merchant of
928
+ # record needs, and it is its own named action rather than a PATCH
929
+ # that would accept whatever the order serializer happens to permit.
930
+ resources :orders, only: [:index, :show] do
931
+ member do
932
+ patch :cancel
933
+ patch :address
934
+ end
935
+
936
+ # Singular: an order has one set of notes, so they are a resource to
937
+ # read and update rather than a verb on the order.
938
+ resource :notes, only: [:show, :update], controller: 'orders/notes'
939
+
940
+ # No `mark_delivered`: that a parcel arrived is the buyer's word,
941
+ # not the sender's, so confirming receipt stays with the operator
942
+ # and the carrier feed.
943
+ resources :fulfillments, only: [:index, :show, :update], controller: 'orders/fulfillments' do
944
+ member do
945
+ patch :fulfill
946
+ patch :cancel
947
+ patch :split
948
+ end
949
+
950
+ # A parcel's consignments and its postage. Both hang off the
951
+ # fulfillment because that is what actually travels.
952
+ resources :deliveries, controller: 'orders/deliveries', only: [:index, :show, :create, :update, :destroy]
953
+ resources :labels, controller: 'orders/labels', only: [:index, :show, :create, :destroy] do
954
+ member do
955
+ get :download
956
+ end
957
+ end
958
+ end
959
+
960
+ # Putting a sale right. The seller is merchant of record for their
961
+ # own child order, so taking the goods back and giving the money
962
+ # back are theirs (docs/plans/6.0-seller-order-management.md).
963
+ # Every status move is its own action, because each carries
964
+ # arguments of its own — receiving records what actually arrived,
965
+ # refunding names a method and an amount.
966
+ resources :returns, only: [:index, :show, :create], controller: 'orders/returns' do
967
+ member do
968
+ patch :approve
969
+ patch :receive
970
+ patch :refund
971
+ patch :cancel
972
+ end
973
+ end
974
+
975
+ resources :exchanges, only: [:index, :show, :create], controller: 'orders/exchanges' do
976
+ member do
977
+ patch :approve
978
+ patch :receive
979
+ patch :fulfill
980
+ patch :cancel
981
+ end
982
+ end
983
+
984
+ resources :claims, only: [:index, :show, :create], controller: 'orders/claims' do
985
+ member do
986
+ patch :approve
987
+ patch :resolve
988
+ patch :deny
989
+ patch :cancel
990
+ end
991
+ end
992
+ end
993
+
994
+ # The marketplace's own vocabularies. Read-only: a seller picks a
995
+ # reason, the operator decides what the reasons are.
996
+ resources :return_reasons, only: [:index]
997
+ resources :claim_reasons, only: [:index]
998
+ resources :order_cancellation_reasons, only: [:index]
999
+
1000
+ # Registry data — which carriers a tracking number can be pinned to.
1001
+ resources :tracking_carriers, only: [:index]
1002
+
1003
+ resources :direct_uploads, only: [:create]
1004
+
1005
+ # CSV of what this seller sold, or of their catalogue. Created, polled
1006
+ # and downloaded — no index, since a seller has no history page to
1007
+ # list, and no destroy, since retention is the marketplace's business.
1008
+ resources :exports, only: [:create, :show] do
1009
+ member do
1010
+ get :download
1011
+ end
1012
+ end
1013
+
1014
+ # Bulk-listing a catalog by CSV. The operator's pipeline, narrowed to
1015
+ # this seller: rows may only resolve onto their own products, and the
1016
+ # products they create are theirs and land as drafts for review
1017
+ # (docs/plans/5.6-admin-spa-csv-import.md).
1018
+ resources :imports, only: [:index, :show, :create, :destroy] do
1019
+ collection do
1020
+ get :template
1021
+ get :example
1022
+ end
1023
+ member do
1024
+ patch :complete_mapping
1025
+ patch :retry_failed_rows
1026
+ get :download
1027
+ end
1028
+ resources :rows, only: [:index], controller: 'import_rows'
1029
+ end
1030
+
1031
+ # The types a seller may list against. Read only — defining a type is
1032
+ # the operator's (docs/plans/6.0-seller-product-submission.md).
1033
+ resources :product_types, only: [:index, :show]
1034
+
1035
+ # The marketplace's delivery vocabulary, for the product form's picker.
1036
+ # Read only: a seller assigns a profile, never creates one
1037
+ # (docs/plans/6.0-multi-vendor-marketplace.md, Decision 13).
1038
+ resources :delivery_profiles, only: [:index]
1039
+
1040
+ # The marketplace's zones, for the destination picker on a seller's
1041
+ # own method. Read only for the same reason profiles are: where the
1042
+ # marketplace ships is its own decision
1043
+ # (docs/plans/6.0-multi-vendor-marketplace.md, Decision 13).
1044
+ resources :delivery_zones, only: [:index]
1045
+
1046
+ # How this seller ships. The listing carries the marketplace methods
1047
+ # shared with sellers alongside the seller's own; only the seller's
1048
+ # own can be written.
1049
+ resources :delivery_methods do
1050
+ collection do
1051
+ get :calculators
1052
+ get :rule_types
1053
+ end
1054
+ end
1055
+
1056
+ # What this seller packs into. The listing carries the marketplace's
1057
+ # own packaging alongside the seller's; only the seller's own can be
1058
+ # written (docs/plans/6.0-seller-package-types.md).
1059
+ resources :package_types
1060
+
1061
+ # No destroy: a location holds stock levels and is named on historical
1062
+ # fulfillments, so a seller retires one by deactivating it.
1063
+ resources :stock_locations, only: [:index, :show, :create, :update]
1064
+
1065
+ resources :countries, only: [:index]
1066
+
1067
+ # The seller's own policy documents.
1068
+ resources :policies
1069
+
1070
+ # The seller's own books, read-only: where they stand, what each
1071
+ # order earned them, and what has been sent. Written by fulfilment
1072
+ # and the sweep, never by the seller.
1073
+ resources :balances, only: [:index]
1074
+ resources :transfers, only: [:index, :show]
1075
+ resources :payouts, only: [:index, :show]
1076
+
1077
+ # Singular: the checklist is always `current_seller`'s.
1078
+ resource :onboarding, only: [:show], controller: 'onboarding' do
1079
+ post :submit_for_review
1080
+ # A fresh link to the payout provider's own onboarding. A POST
1081
+ # because asking for one creates the account at the provider if the
1082
+ # seller has none.
1083
+ post :payout_account
1084
+ end
1085
+
1086
+ resources :requirements, only: [] do
1087
+ resources :submissions, only: [:create], controller: 'requirement_submissions'
1088
+ end
1089
+ resources :requirement_submissions, only: [] do
1090
+ member do
1091
+ get :download
1092
+ end
1093
+ end
1094
+ end
1095
+
396
1096
  # Webhooks (outside of store namespace — no API key authentication)
397
1097
  namespace :webhooks do
398
1098
  post 'payments/:payment_method_id', to: 'payments#create', as: :payment_webhook
1099
+ post 'fulfillments/:integration_id', to: 'fulfillments#create', as: :fulfillment_webhook
1100
+ # Marketplace events about sellers rather than about a payment —
1101
+ # whether a seller may be paid, and whether a payout reached their
1102
+ # bank. A separate endpoint because providers scope these separately:
1103
+ # events originating in a seller's own account arrive on a different
1104
+ # subscription, with a different signing secret, than the
1105
+ # marketplace's own payment events.
1106
+ post 'payouts/:payment_method_id', to: 'payouts#create', as: :payout_webhook
399
1107
  end
400
1108
  end
401
1109
  end