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
@@ -0,0 +1,169 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # Sign-in for the marketplace seller panel.
6
+ #
7
+ # Its own surface rather than a reuse of the admin one, so login policy
8
+ # can differ per panel: a store that requires SSO for its own staff can
9
+ # still let sellers sign in with a password, because the two read
10
+ # different strategy registries against the same user class.
11
+ class AuthController < Seller::BaseController
12
+ include Spree::Api::V3::Seller::AuthCookies
13
+ include Spree::Api::V3::AuthenticationStrategies
14
+
15
+ skip_scope_check!
16
+
17
+ # A distinct `name:` per declaration — without one Rails keys every
18
+ # counter in the controller on one cache entry, so the provider list
19
+ # a login page fetches on every load would spend the login budget.
20
+ rate_limit to: Spree::Api::Config[:rate_limit_login],
21
+ within: Spree::Api::Config[:rate_limit_window].seconds,
22
+ store: Rails.cache, only: :create, name: 'seller_login',
23
+ with: -> { render_rate_limited(limit: Spree::Api::Config[:rate_limit_login]) }
24
+ rate_limit to: Spree::Api::Config[:rate_limit_refresh],
25
+ within: Spree::Api::Config[:rate_limit_window].seconds,
26
+ store: Rails.cache, only: :providers, name: 'seller_providers',
27
+ with: -> { render_rate_limited(limit: Spree::Api::Config[:rate_limit_refresh]) }
28
+ rate_limit to: Spree::Api::Config[:rate_limit_refresh],
29
+ within: Spree::Api::Config[:rate_limit_window].seconds,
30
+ store: Rails.cache, only: [:refresh, :logout], name: 'seller_refresh',
31
+ with: -> { render_rate_limited(limit: Spree::Api::Config[:rate_limit_refresh]) }
32
+
33
+ # Signing in is what establishes which sellers the caller may act as,
34
+ # so these actions run before any seller is known.
35
+ skip_before_action :set_current_seller_context, only: [:create, :refresh, :logout, :providers]
36
+ skip_before_action :authenticate_seller!, only: [:create, :refresh, :logout, :providers]
37
+
38
+ # POST /api/v3/seller/auth/login
39
+ def create
40
+ strategy = authentication_strategy
41
+ return unless strategy
42
+
43
+ result = strategy.authenticate
44
+ return render_authentication_failed(result.error) unless result.success?
45
+
46
+ user = result.value
47
+ # A store's own staff share this user class, so authenticating is
48
+ # not enough: without a role on some seller there is no panel to
49
+ # sign in to, and minting a token would hand out an audience the
50
+ # holder can do nothing with.
51
+ return render_authentication_failed(Spree.t(:seller_membership_required)) unless user.seller_member?
52
+
53
+ set_refresh_cookie(
54
+ Spree::RefreshToken.create_for(
55
+ user,
56
+ audience: Spree::Api::V3::JwtAuthentication::JWT_AUDIENCE_SELLER,
57
+ request_env: request_env_for_token
58
+ )
59
+ )
60
+ render json: auth_response(user)
61
+ end
62
+
63
+ # GET /api/v3/seller/auth/providers
64
+ def providers
65
+ render json: { providers: Spree.seller_authentication_strategies.describe }
66
+ end
67
+
68
+ # POST /api/v3/seller/auth/refresh
69
+ def refresh
70
+ refresh_token_value = refresh_token_from_cookie
71
+
72
+ if refresh_token_value.blank?
73
+ return render_error(
74
+ code: ErrorHandler::ERROR_CODES[:invalid_refresh_token],
75
+ message: 'Refresh token cookie missing',
76
+ status: :unauthorized
77
+ )
78
+ end
79
+
80
+ # Narrowed by audience: a token minted on another surface must not
81
+ # be exchangeable for a seller one.
82
+ refresh_token = Spree::RefreshToken.active.
83
+ for_audience(Spree::Api::V3::JwtAuthentication::JWT_AUDIENCE_SELLER).
84
+ find_by(token: refresh_token_value)
85
+
86
+ if refresh_token.nil?
87
+ clear_refresh_cookie
88
+ return render_error(
89
+ code: ErrorHandler::ERROR_CODES[:invalid_refresh_token],
90
+ message: 'Invalid or expired refresh token',
91
+ status: :unauthorized
92
+ )
93
+ end
94
+
95
+ user = refresh_token.user
96
+ # Membership can be revoked while a session is live; the refresh is
97
+ # where that takes effect.
98
+ unless user.seller_member?
99
+ refresh_token.destroy
100
+ clear_refresh_cookie
101
+ return render_error(
102
+ code: ErrorHandler::ERROR_CODES[:access_denied],
103
+ message: Spree.t(:seller_membership_required),
104
+ status: :forbidden
105
+ )
106
+ end
107
+
108
+ set_refresh_cookie(refresh_token.rotate!(request_env: request_env_for_token))
109
+ render json: auth_response(user)
110
+ end
111
+
112
+ # POST /api/v3/seller/auth/logout
113
+ def logout
114
+ refresh_token_value = refresh_token_from_cookie
115
+
116
+ if refresh_token_value.present?
117
+ Spree::RefreshToken.
118
+ for_audience(Spree::Api::V3::JwtAuthentication::JWT_AUDIENCE_SELLER).
119
+ find_by(token: refresh_token_value)&.destroy
120
+ end
121
+
122
+ clear_refresh_cookie
123
+ head :no_content
124
+ end
125
+
126
+ private
127
+
128
+ def render_authentication_failed(message)
129
+ render_error(
130
+ code: ErrorHandler::ERROR_CODES[:authentication_failed],
131
+ message: message,
132
+ status: :unauthorized
133
+ )
134
+ end
135
+
136
+ def auth_response(user)
137
+ {
138
+ token: generate_jwt(user, audience: Spree::Api::V3::JwtAuthentication::JWT_AUDIENCE_SELLER),
139
+ user: Spree.api.seller_team_member_serializer.new(user, params: { store: user.sellers.first&.store }).to_h,
140
+ sellers: serialized_sellers(user)
141
+ }
142
+ end
143
+
144
+ # The panel needs these to choose an X-Spree-Seller-Id before it can
145
+ # make any other request.
146
+ def serialized_sellers(user)
147
+ user.sellers.map { |seller| { id: seller.prefixed_id, name: seller.name, status: seller.status } }
148
+ end
149
+
150
+ def authentication_strategies
151
+ Spree.seller_authentication_strategies
152
+ end
153
+
154
+ def authentication_user_class
155
+ Spree.admin_user_class
156
+ end
157
+
158
+ def jwt_expiration
159
+ Spree::Api::Config[:admin_jwt_expiration]
160
+ end
161
+
162
+ def request_env_for_token
163
+ { ip_address: request.remote_ip, user_agent: request.user_agent&.truncate(255) }
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,35 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # Where this seller stands: what they have earned, what has reached
6
+ # them, and what the marketplace still owes — one row per currency.
7
+ #
8
+ # A computed collection rather than a resource: nothing here is a
9
+ # record, so there is no id to fetch and nothing to page.
10
+ class BalancesController < Seller::BaseController
11
+ scoped_resource :seller_earnings
12
+
13
+ # GET /api/v3/seller/balances
14
+ def index
15
+ authorize! :index, :seller_earnings
16
+
17
+ render json: { data: current_seller.balances.map { |balance| serialize_balance(balance) } }
18
+ end
19
+
20
+ protected
21
+
22
+ def read_actions
23
+ %w[index]
24
+ end
25
+
26
+ private
27
+
28
+ def serialize_balance(balance)
29
+ Spree.api.seller_balance_serializer.new(balance, params: { store: current_store }).to_h
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # Anchor for the marketplace seller panel.
6
+ #
7
+ # Deliberately not a subclass of the admin anchor: the admin branch
8
+ # resolves everything through `current_store`, and inheriting those
9
+ # lookups is precisely how a seller would come to read the whole
10
+ # store. Concerns and workflows are shared; controllers are not.
11
+ #
12
+ # Mirrors Seller::ResourceController — they anchor parallel inheritance
13
+ # branches, so a concern added to one must be added to the other.
14
+ class BaseController < Spree::Api::V3::BaseController
15
+ include Spree::Api::V3::Seller::SellerContext
16
+ include Spree::Api::V3::SellerAuthentication
17
+
18
+ before_action :authenticate_seller!
19
+
20
+ include Spree::Api::V3::ScopedAuthorization
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # What went wrong with a delivery.
6
+ class ClaimReasonsController < ReasonsController
7
+ protected
8
+
9
+ def model_class
10
+ Spree::ClaimReason
11
+ end
12
+
13
+ def reasons_association
14
+ :claim_reasons
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,38 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # Countries for the panel's address forms.
6
+ #
7
+ # Public reference data — the same list the storefront and the
8
+ # operator's dashboard serve — so it is exempt from the key gate, as
9
+ # its admin twin is. A seller filling in a billing address needs every
10
+ # country, not the ones their marketplace happens to sell into.
11
+ class CountriesController < Seller::BaseController
12
+ skip_scope_check!
13
+
14
+ # GET /api/v3/seller/countries
15
+ #
16
+ # Unpaginated: there are ~250 countries and an address dropdown needs
17
+ # them all at once, which Pagy's global max_limit would prevent.
18
+ def index
19
+ countries = Spree::Country.all.sort_by(&:name)
20
+
21
+ render json: {
22
+ data: countries.map { |country| serialize_country(country) },
23
+ meta: { count: countries.size }
24
+ }
25
+ end
26
+
27
+ private
28
+
29
+ def serialize_country(country)
30
+ Spree.api.country_serializer.new(
31
+ country, params: { store: current_store, expand: ['states'] }
32
+ ).to_h
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,265 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # How this seller ships: the methods they create, price and retire
6
+ # against the marketplace's profiles and zones
7
+ # (docs/plans/6.0-multi-vendor-marketplace.md, Decision 13).
8
+ #
9
+ # The listing also carries the marketplace methods the operator shares
10
+ # with sellers, so a seller can see what already ships their goods
11
+ # before adding anything. Those rows are read-only — `find_resource`
12
+ # roots writes in the seller's own methods, so a shared method's id is
13
+ # a 404 on every action but `show`.
14
+ #
15
+ # Carriers stay the marketplace's: a seller's method prices through
16
+ # the internal rate provider and is fulfilled by hand, which is what
17
+ # `Spree::DeliveryMethod` validates and why neither provider is
18
+ # writable here.
19
+ class DeliveryMethodsController < Seller::ResourceController
20
+ scoped_resource :delivery_methods
21
+
22
+ # GET /api/v3/seller/delivery_methods/calculators
23
+ # The ways a seller can price a method, with the preference schema
24
+ # each one's form is rendered from.
25
+ def calculators
26
+ authorize! :create, model_class
27
+
28
+ data = Spree::DeliveryMethod.calculators.map do |calculator_class|
29
+ {
30
+ type: calculator_class.api_type,
31
+ name: calculator_class.description,
32
+ preference_schema: calculator_class.respond_to?(:serialized_preference_schema) ? calculator_class.serialized_preference_schema : []
33
+ }
34
+ end
35
+
36
+ render json: { data: data }
37
+ end
38
+
39
+ # GET /api/v3/seller/delivery_methods/rule_types
40
+ # The conditions a seller may put on a method. A subset of the
41
+ # operator's: the rest either segment the marketplace's own traffic
42
+ # or point at catalog rows this branch does not serve.
43
+ def rule_types
44
+ authorize! :create, model_class
45
+
46
+ data = seller_rule_classes.map do |klass|
47
+ {
48
+ type: klass.api_type,
49
+ name: klass.human_name,
50
+ description: klass.human_description,
51
+ preference_schema: klass.serialized_preference_schema
52
+ }
53
+ end
54
+
55
+ render json: { data: data }
56
+ end
57
+
58
+ # Built off `resource_scope` rather than the inherited
59
+ # `build_resource`: the row is born the seller's own that way, and
60
+ # the payload carries calculator fields that are not columns.
61
+ def create
62
+ @resource = resource_scope.new
63
+ @resource.store = current_store
64
+ @resource.assign_attributes(assignable_params)
65
+ authorize_resource!(@resource, :create)
66
+ rederive_origin_group(@resource)
67
+ assign_calculator(@resource)
68
+
69
+ if @resource.errors.empty? && @resource.save
70
+ render json: serialize_resource(@resource), status: :created
71
+ else
72
+ render_validation_error(@resource.errors)
73
+ end
74
+ end
75
+
76
+ def update
77
+ @resource.assign_attributes(assignable_params)
78
+ rederive_origin_group(@resource)
79
+ assign_calculator(@resource)
80
+
81
+ if @resource.errors.empty? && @resource.save
82
+ render json: serialize_resource(@resource)
83
+ else
84
+ render_validation_error(@resource.errors)
85
+ end
86
+ end
87
+
88
+ protected
89
+
90
+ def model_class
91
+ Spree::DeliveryMethod
92
+ end
93
+
94
+ def serializer_class
95
+ Spree.api.seller_delivery_method_serializer
96
+ end
97
+
98
+ # Reading shows the seller's own methods plus the marketplace ones
99
+ # shared with them — the same set the estimator will quote their
100
+ # packages by, so the page answers "how do my goods ship" rather
101
+ # than only "what have I made".
102
+ def scope
103
+ current_store.delivery_methods.
104
+ available_to_seller(current_seller).
105
+ includes(*collection_includes).
106
+ preload_associations_lazily
107
+ end
108
+
109
+ # Writes root in the seller's own methods, so a shared marketplace
110
+ # method cannot be edited or deleted through this branch.
111
+ def resource_scope
112
+ current_seller.delivery_methods
113
+ end
114
+
115
+ def find_resource
116
+ action_name == 'show' ? super : resource_scope.find_by_prefix_id!(params[:id])
117
+ end
118
+
119
+ # No provider fields: both are fixed for a seller's method, and
120
+ # permitting them would let a write fail validation for a choice the
121
+ # seller was never offered. No markup either — that prices a
122
+ # carrier's quote, and a seller has no carrier.
123
+ def permitted_params
124
+ params.permit(
125
+ *model_additional_permitted_attributes,
126
+ :name, :admin_name, :code, :storefront_visible, :tracking_url,
127
+ :estimated_transit_business_days_min, :estimated_transit_business_days_max,
128
+ :calculator_type,
129
+ :delivery_profile_id, :delivery_zone_id,
130
+ calculator_preferences: {},
131
+ rules: [:id, :type, :active, { preferences: {} }, *subclassed_rule_attributes]
132
+ )
133
+ end
134
+
135
+ # Association-backed config a rule declares on its own class. Empty
136
+ # today — the one core rule that declares any is withheld from this
137
+ # branch — but a seller-eligible rule that grows some would
138
+ # otherwise have them dropped by `permit` without a word.
139
+ #
140
+ # Read from the seller's own rule set, not every registered kind, so
141
+ # a withheld rule's attributes never become permitted here.
142
+ def subclassed_rule_attributes
143
+ seller_rule_classes.flat_map do |klass|
144
+ klass.respond_to?(:additional_permitted_attributes) ? klass.additional_permitted_attributes : []
145
+ end.uniq
146
+ end
147
+
148
+ def collection_includes
149
+ [:calculator, :delivery_zone, :delivery_profile, :delivery_method_rules]
150
+ end
151
+
152
+ private
153
+
154
+ # Rule kinds this branch does not offer. Channel rules segment the
155
+ # marketplace's own traffic, and the excluded-products rule points at
156
+ # a catalog picker the seller panel does not have — a seller who will
157
+ # not ship something does not list it.
158
+ #
159
+ # Matched by name rather than by class identity: in development the
160
+ # registry holds classes from an earlier reload, so comparing
161
+ # constants silently matches nothing and every kind stays on offer.
162
+ WITHHELD_RULE_TYPES = %w[
163
+ Spree::DeliveryMethodRules::ChannelRule
164
+ Spree::DeliveryMethodRules::ExcludedProductsRule
165
+ ].freeze
166
+
167
+ # The rule kinds a seller may put on their own method.
168
+ def seller_rule_classes
169
+ Spree.delivery_method_rules.reject { |klass| WITHHELD_RULE_TYPES.include?(klass.to_s) }
170
+ end
171
+
172
+ # Resolves the marketplace vocabulary a seller picks from, through
173
+ # the store: a profile or zone that is not this store's is a 404
174
+ # rather than a validation error, matching how the product form
175
+ # resolves its own pickers.
176
+ def assignable_params
177
+ attributes = permitted_params.except(
178
+ :delivery_profile_id, :delivery_zone_id, :calculator_type, :calculator_preferences, :rules
179
+ )
180
+
181
+ if params.key?(:delivery_profile_id)
182
+ attributes[:delivery_profile] = current_store.delivery_profiles.find_by_prefix_id!(params[:delivery_profile_id])
183
+ end
184
+
185
+ if params.key?(:delivery_zone_id)
186
+ attributes[:delivery_zone] =
187
+ params[:delivery_zone_id].present? ? current_store.delivery_zones.find_by_prefix_id!(params[:delivery_zone_id]) : nil
188
+ end
189
+
190
+ attributes[:rules] = permitted_rule_rows if params.key?(:rules)
191
+ attributes
192
+ end
193
+
194
+ # The origin group is derived, never chosen: a seller picks the kind
195
+ # of goods and where it ships, and which warehouses offer the method
196
+ # follows from those. The model derives it only on create, so a
197
+ # profile or zone change here has to re-derive it — otherwise the
198
+ # row keeps a group the new zone contradicts, and the composition
199
+ # validation refuses the save.
200
+ def rederive_origin_group(delivery_method)
201
+ return unless delivery_method.delivery_profile_id_changed? || delivery_method.delivery_zone_id_changed?
202
+
203
+ delivery_method.delivery_origin_group =
204
+ delivery_method.delivery_zone&.delivery_origin_group ||
205
+ delivery_method.delivery_profile&.default_origin_group
206
+ end
207
+
208
+ # A rule kind this branch does not offer is refused rather than
209
+ # dropped: silently ignoring it would report a save the seller can
210
+ # see did not take.
211
+ def permitted_rule_rows
212
+ allowed = seller_rule_classes.map(&:api_type)
213
+
214
+ Array(permitted_params[:rules]).map do |row|
215
+ row = row.to_h
216
+ raise ActiveRecord::RecordNotFound unless allowed.include?(row['type'].to_s)
217
+
218
+ row
219
+ end
220
+ end
221
+
222
+ def assign_calculator(delivery_method)
223
+ calculator_type = permitted_params[:calculator_type]
224
+ preferences = permitted_params[:calculator_preferences]
225
+
226
+ if calculator_type.present? && delivery_method.calculator&.class&.api_type != calculator_type
227
+ registered = Spree::DeliveryMethod.calculators.find do |klass|
228
+ klass.api_type == calculator_type
229
+ end
230
+ unless registered
231
+ delivery_method.errors.add(:calculator_type, :invalid)
232
+ return
233
+ end
234
+
235
+ # Resolved from the registry entry's OWN name, never the
236
+ # request's: nothing user-supplied reaches `constantize`. Going
237
+ # back through the name rather than instantiating `registered`
238
+ # directly is what survives a reload — in development the
239
+ # registry holds a class from an earlier one, and an instance of
240
+ # it fails the association's type check.
241
+ delivery_method.calculator = registered.to_s.constantize.new
242
+ end
243
+
244
+ return if preferences.blank?
245
+
246
+ # A payload may carry preferences without naming a calculator —
247
+ # editing the amount on a method that already has one, or creating
248
+ # with the default. The model only builds the default calculator
249
+ # at validation, so without this the preferences land on nothing
250
+ # and the amount the merchant typed is silently replaced by a free
251
+ # rate.
252
+ delivery_method.ensure_calculator
253
+ return if delivery_method.calculator.nil?
254
+
255
+ preferences.each do |key, value|
256
+ next unless delivery_method.calculator.has_preference?(key)
257
+
258
+ delivery_method.calculator.set_preference(key, value)
259
+ end
260
+ end
261
+ end
262
+ end
263
+ end
264
+ end
265
+ end
@@ -0,0 +1,65 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # The marketplace's delivery profiles — what kind of goods a product
6
+ # is (parcel, digital, pallet), which decides how it can be shipped.
7
+ #
8
+ # Read only: a seller assigns a profile to their product and never
9
+ # defines one, since the profile is the vocabulary the marketplace's
10
+ # zones and methods hang off
11
+ # (docs/plans/6.0-multi-vendor-marketplace.md, Decision 13).
12
+ #
13
+ # Gated on `read_products` rather than the operator's `settings` key,
14
+ # which a seller must never hold: this list exists for the product
15
+ # form's picker, so a key that may read products may read the
16
+ # vocabulary that form fills in.
17
+ #
18
+ # It backs the delivery-method form's picker too, so `delivery_methods`
19
+ # opens it as well — a member granted only that key would otherwise
20
+ # load the page and find an empty "kind of goods" list with no way to
21
+ # create a method.
22
+ class DeliveryProfilesController < Seller::ResourceController
23
+ scoped_resource :products
24
+
25
+ protected
26
+
27
+ # Either key reads this vocabulary. Answers whichever the caller
28
+ # actually holds so the gate passes for both surfaces; the declared
29
+ # resource stands as the default, which keeps the fail-closed
30
+ # behaviour when neither is held.
31
+ def scoped_resource_name
32
+ reads_through_delivery_methods? ? :delivery_methods : super
33
+ end
34
+
35
+ # Checked against whichever principal is on the request — a secret
36
+ # key answers by its scopes, a signed-in member by their role's keys.
37
+ def reads_through_delivery_methods?
38
+ return false if holds_key?('read_products')
39
+
40
+ holds_key?('read_delivery_methods')
41
+ end
42
+
43
+ def holds_key?(key)
44
+ return current_api_key.has_scope?(key) if current_api_key.present?
45
+
46
+ ability = current_ability
47
+ ability.respond_to?(:permission_keys) && ability.permission_keys.include?(key)
48
+ end
49
+
50
+ def model_class
51
+ Spree::DeliveryProfile
52
+ end
53
+
54
+ def serializer_class
55
+ Spree.api.seller_delivery_profile_serializer
56
+ end
57
+
58
+ def scope
59
+ current_store.delivery_profiles
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,41 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # The marketplace's delivery zones — where its methods may ship to.
6
+ #
7
+ # Read only: a seller narrows their own method to one of these and
8
+ # never draws one, because where the marketplace ships is its own
9
+ # decision (docs/plans/6.0-multi-vendor-marketplace.md, Decision 13).
10
+ #
11
+ # Filtered by profile through the usual Ransack parameters, so the
12
+ # panel asks for the zones under the profile a method belongs to.
13
+ class DeliveryZonesController < Seller::ResourceController
14
+ scoped_resource :delivery_methods
15
+
16
+ protected
17
+
18
+ def model_class
19
+ Spree::DeliveryZone
20
+ end
21
+
22
+ def serializer_class
23
+ Spree.api.seller_delivery_zone_serializer
24
+ end
25
+
26
+ # `delivery_profile_id` is an explicit filter rather than a Ransack
27
+ # predicate: a zone only means something under its profile, so the
28
+ # picker asks for one profile's zones and an id from another store
29
+ # is a 404 rather than an empty list.
30
+ def scope
31
+ zones = current_store.delivery_zones.includes(:delivery_profile)
32
+ return zones if params[:delivery_profile_id].blank?
33
+
34
+ profile = current_store.delivery_profiles.find_by_prefix_id!(params[:delivery_profile_id])
35
+ zones.where(delivery_profile_id: profile.id)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,21 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # Presigning for a seller's own uploads — today the documents their
6
+ # onboarding asks for.
7
+ #
8
+ # A blob created here is not attached to anything yet: it becomes a
9
+ # submission only when the seller posts its signed id, and that
10
+ # endpoint is the one that checks the requirement is theirs. So the
11
+ # narrowest meaningful gate is the seller's own profile, which every
12
+ # member of a seller's team holds.
13
+ class DirectUploadsController < Seller::BaseController
14
+ include Spree::Api::V3::DirectUploads
15
+
16
+ scoped_resource :seller_profile
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end