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,95 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The semantic reporting surface (docs/plans/6.0-analytics-semantic-layer.md):
6
+ # one query endpoint compiled against the Spree.reporting registry, plus
7
+ # registry introspection for pickers and agent tool schemas.
8
+ class ReportingController < Admin::BaseController
9
+ include ReportingAuthorization
10
+
11
+ scoped_resource :reports
12
+
13
+ rescue_from Spree::Reporting::UnknownMember, Spree::Reporting::InvalidQuery, with: :render_invalid_query
14
+
15
+ QUERY_KEYS = %w[metrics dimensions filters metric_filters time_range compare sort limit currency].freeze
16
+
17
+ # POST /api/v3/admin/reporting/query
18
+ def query
19
+ reporting_query = Spree::Reporting::Query.new(store: current_store, params: query_params)
20
+ authorize_reporting_members!(reporting_query)
21
+ return if performed?
22
+
23
+ result = reporting_query.execute
24
+
25
+ render json: ReportingResultSerializer.new(
26
+ result,
27
+ store: current_store,
28
+ params: serializer_params
29
+ ).to_h
30
+ end
31
+
32
+ # GET /api/v3/admin/reporting/schema
33
+ #
34
+ # Filtered to what this caller may reference: pickers never offer,
35
+ # and agents never propose, a member that would be refused.
36
+ def schema
37
+ render json: Spree::Reporting::Schema.new(
38
+ store: current_store,
39
+ allowed: ->(member) { member_allowed?(member) }
40
+ ).to_h
41
+ end
42
+
43
+ private
44
+
45
+ def action_kind
46
+ 'read'
47
+ end
48
+
49
+ # The contract owns shape validation (registry allowlist, loud
50
+ # rejection of unknown members) — nothing here is mass-assigned to a
51
+ # model, so strong-params filtering would only duplicate it.
52
+ def query_params
53
+ params.to_unsafe_h.slice(*QUERY_KEYS)
54
+ end
55
+
56
+ # Both credential types are authorized per referenced member:
57
+ # JWT admins via CanCanCan (`required_subjects`), secret keys via
58
+ # their scopes (`required_key_scopes` on top of the `read_reports`
59
+ # endpoint gate) — a key without `read_products` cannot query the
60
+ # product dimension any more than a limited staff role can.
61
+ def authorize_reporting_members!(reporting_query)
62
+ if current_api_key.present?
63
+ missing = reporting_query.required_key_scopes.reject { |scope| current_api_key.has_scope?(scope) }
64
+ return if missing.empty?
65
+
66
+ render_error(
67
+ code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:access_denied],
68
+ message: "API key lacks scope: #{missing.join(', ')}",
69
+ status: :forbidden,
70
+ details: { required_scopes: missing }
71
+ )
72
+ else
73
+ authorize!(:read, :reports)
74
+ forbidden = reporting_query.unreadable_subjects(current_ability).first
75
+ raise CanCan::AccessDenied.new(nil, :read, forbidden) if forbidden
76
+ end
77
+ end
78
+
79
+ # An unknown member carries what it was and what was valid instead.
80
+ # Passing those through as `details` lets a client correct the query
81
+ # without parsing the sentence — the same list the schema endpoint
82
+ # would have given it.
83
+ def render_invalid_query(error)
84
+ details = if error.is_a?(Spree::Reporting::UnknownMember)
85
+ { kind: error.kind, name: error.name.to_s, valid: error.valid.map(&:to_s) }
86
+ end
87
+
88
+ render_error(code: 'invalid_reporting_query', message: error.message,
89
+ status: :unprocessable_content, details: details)
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -6,8 +6,17 @@ module Spree
6
6
  # inheritance branches (V3::BaseController vs V3::ResourceController);
7
7
  # any concern added here MUST also be added to Admin::BaseController.
8
8
  class ResourceController < Spree::Api::V3::ResourceController
9
+ include Spree::Api::V3::Admin::StoreContext
9
10
  include Spree::Api::V3::AdminAuthentication
10
11
  include Spree::Api::V3::ScopedAuthorization
12
+ # External-identity addressing for every admin resource whose model
13
+ # opts in via Spree::HasExternalReferences — the concern's guards
14
+ # no-op for everything else. Sitting here rather than per controller
15
+ # means a newly synced resource cannot ship the half-supported state
16
+ # (readable references, unaddressable member paths) by forgetting an
17
+ # include.
18
+ include Spree::Api::V3::Admin::Concerns::ExternalReferences
19
+ include Spree::Api::V3::Admin::ValidationDetails
11
20
 
12
21
  protected
13
22
 
@@ -15,19 +24,27 @@ module Spree
15
24
  authenticate_admin!
16
25
  end
17
26
 
18
- # Render error from ServiceModule::Result, extracting ActiveModel::Errors
19
- # from the ResultError wrapper to get proper validation_error responses.
20
- def render_result_error(result)
21
- error = result.error
22
- errors = error.respond_to?(:value) ? error.value : error
27
+ # CanCanCan lives on the admin branch only. The shared base leaves
28
+ # these as no-ops because the Store API authorizes by ownership
29
+ # scoping; back-office callers are authorized per record and per
30
+ # collection by their role's catalog keys.
31
+ def scope
32
+ base_scope = super
33
+ return base_scope if @parent.present?
23
34
 
24
- if errors.is_a?(ActiveModel::Errors)
25
- render_validation_error(errors)
26
- else
27
- render_service_error(error)
28
- end
35
+ base_scope.accessible_by(current_ability, ability_action_for_request)
36
+ end
37
+
38
+ def authorize_resource!(resource = @resource, action = action_name.to_sym)
39
+ authorize!(action, resource)
29
40
  end
30
41
 
42
+ def authorize_parent!(parent)
43
+ authorize!(parent_ability_action, parent)
44
+ end
45
+
46
+ # Render error from ServiceModule::Result, extracting ActiveModel::Errors
47
+ # from the ResultError wrapper to get proper validation_error responses.
31
48
  def decode_ids(ids, klass)
32
49
  Array(ids).map do |id|
33
50
  Spree::PrefixedId.prefixed_id?(id) ? klass.find_by_param!(id).id : id
@@ -0,0 +1,25 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class ReturnReasonsController < ResourceController
6
+ scoped_resource :settings
7
+
8
+ protected
9
+
10
+ def model_class
11
+ Spree::ReturnReason
12
+ end
13
+
14
+ def serializer_class
15
+ Spree.api.admin_return_reason_serializer
16
+ end
17
+
18
+ def permitted_params
19
+ params.permit(*model_additional_permitted_attributes, :name, :active)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,31 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Cross-order listing of returns — "what is awaiting receipt across
6
+ # the whole store". Read-only by route: opening a return needs an
7
+ # order, so creation and the status transitions stay on the nested
8
+ # Orders::ReturnsController.
9
+ class ReturnsController < ResourceController
10
+ # Post-sale records are order data: a key that may read orders may
11
+ # read these, and nothing here writes.
12
+ scoped_resource :orders
13
+
14
+ protected
15
+
16
+ def model_class
17
+ Spree::Return
18
+ end
19
+
20
+ def serializer_class
21
+ Spree.api.admin_return_serializer
22
+ end
23
+
24
+ def collection_includes
25
+ [:order, :reason, :stock_location, { return_line_items: :variant }]
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -2,12 +2,32 @@ module Spree
2
2
  module Api
3
3
  module V3
4
4
  module Admin
5
- # Read-only list of roles available for staff role pickers (invite +
6
- # edit forms). Roles are global, not per-store; CRUD is handled
7
- # outside the SPA today and may grow into a richer permissions UI
8
- # later. The controller ignores `current_store` for that reason.
5
+ # Staff roles and their catalog permissions (docs/plans/6.0-admin-rbac.md).
6
+ # A role belongs to what it governs, so this surface reads and writes
7
+ # the current store's own roles; one owned by another resource — a
8
+ # marketplace seller's belongs to that panel. Protection of the admin
9
+ # role and host-locked rows lives on the model (`mutable` guards,
10
+ # `can_be_deleted?`).
9
11
  class RolesController < ResourceController
10
- scoped_resource :settings
12
+ include Spree::Api::V3::Admin::RoleGrantGuard
13
+
14
+ scoped_resource :staff
15
+
16
+ # POST /api/v3/admin/roles
17
+ # A caller may only grant permissions they effectively hold — the
18
+ # same anti-amplification rule as role grants and API-key minting.
19
+ def create
20
+ return if reject_unauthorized_permission_grant!(requested_permissions)
21
+
22
+ super
23
+ end
24
+
25
+ # PATCH /api/v3/admin/roles/:id
26
+ def update
27
+ return if params.key?(:permissions) && reject_unauthorized_permission_grant!(requested_permissions)
28
+
29
+ super
30
+ end
11
31
 
12
32
  protected
13
33
 
@@ -19,8 +39,32 @@ module Spree
19
39
  Spree.api.admin_role_serializer
20
40
  end
21
41
 
42
+ # The store's own roles. A role belonging to another resource — a
43
+ # marketplace seller's — is managed from that panel and never appears
44
+ # in the staff role picker.
22
45
  def scope
23
- Spree::Role.accessible_by(current_ability, :show)
46
+ current_store.roles.accessible_by(current_ability, :show)
47
+ end
48
+
49
+ def collection_includes
50
+ [:role_users]
51
+ end
52
+
53
+ # Roles created here belong to the store being administered. The base
54
+ # builder stamps `store`, which a role does not have — its owner is
55
+ # polymorphic — so it would leave the resource unset.
56
+ def build_resource
57
+ current_store.roles.build(permitted_params)
58
+ end
59
+
60
+ def permitted_params
61
+ params.permit(*model_additional_permitted_attributes, :name, :description, permissions: [])
62
+ end
63
+
64
+ private
65
+
66
+ def requested_permissions
67
+ Array(params[:permissions]).map(&:to_s).reject(&:blank?)
24
68
  end
25
69
  end
26
70
  end
@@ -0,0 +1,83 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Settlements to sellers — what has been sent, and what is still owed.
6
+ #
7
+ # A payout is created by the sweep on the seller's own schedule rather
8
+ # than by a caller, so there is no create or update here. The one thing
9
+ # an operator does to a payout is say it landed, which is what the
10
+ # built-in provider expects: it records the settlement and waits to be
11
+ # told the bank transfer went out.
12
+ class SellerPayoutsController < ResourceController
13
+ scoped_resource :payouts
14
+
15
+ # PATCH /api/v3/admin/seller_payouts/:id/complete
16
+ #
17
+ # What the built-in provider waits for: the operator saying the bank
18
+ # transfer went out, with the reference it went out under.
19
+ #
20
+ # Authorized as an update, like every other custom member action —
21
+ # naming the action itself would only pass while the ability grants
22
+ # `manage`, and a host narrowing that would get a 403 the scope gate
23
+ # had already allowed.
24
+ def complete
25
+ @resource = find_resource
26
+ authorize! :update, @resource
27
+
28
+ result = Spree.seller_payout_complete_workflow.call(
29
+ seller_payout: @resource,
30
+ reference: params[:reference].to_s.presence
31
+ )
32
+
33
+ if result.success?
34
+ render json: serialize_resource(result.value)
35
+ else
36
+ render_result_error(result)
37
+ end
38
+ end
39
+
40
+ protected
41
+
42
+ def model_class
43
+ Spree::SellerPayout
44
+ end
45
+
46
+ def serializer_class
47
+ Spree.api.admin_seller_payout_serializer
48
+ end
49
+
50
+ def scope
51
+ super.for_store(current_store)
52
+ end
53
+
54
+ # Deliberately without `transfers`: the serializer wants their number,
55
+ # not the rows, and a monthly settlement can hold hundreds.
56
+ def collection_includes
57
+ [:seller]
58
+ end
59
+
60
+ # One grouped count for the page, handed to the serializer — asking
61
+ # each row for its own would be a query per settlement, and a
62
+ # counter column cannot work here because the sweep claims transfers
63
+ # with `update_all`, which no callback sees.
64
+ #
65
+ # Only for the listing. Every action shares this method, and building
66
+ # the count needs `collection` — so a member action would run a whole
67
+ # paginated index query to serialize its one record, then read that
68
+ # record's count out of a page it may not even be on. The serializer
69
+ # asks a single payout for its own count, which is one query.
70
+ def serializer_params
71
+ return super unless action_name == 'index'
72
+
73
+ super.merge(transfer_counts: transfer_counts)
74
+ end
75
+
76
+ def transfer_counts
77
+ @transfer_counts ||= Spree::SellerTransfer.where(payout_id: collection.map(&:id)).group(:payout_id).count
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,139 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The operator's review queue: what sellers have submitted about the
6
+ # marketplace's requirements, and the decisions on them.
7
+ #
8
+ # Each decision is its own member action because each is a workflow
9
+ # carrying its own arguments — a rejection carries the reason the
10
+ # seller needs in order to fix it — and because a status moved by
11
+ # PATCH would skip the mail and the extension hooks.
12
+ class SellerRequirementSubmissionsController < ResourceController
13
+ scoped_resource :sellers
14
+
15
+ before_action :set_resource, only: [:show, :accept, :reject, :download]
16
+
17
+ # POST /api/v3/admin/sellers/:seller_id/requirement_submissions
18
+ #
19
+ # The operator excusing one seller from something the marketplace
20
+ # asks of everyone. Creating anything else here would be the
21
+ # operator submitting on the seller's behalf, which is what the
22
+ # seller's own branch is for.
23
+ def create
24
+ authorize! :create, Spree::SellerRequirementSubmission
25
+
26
+ result = Spree.seller_requirement_submission_waive_workflow.call(
27
+ seller: seller,
28
+ requirement: requirement_from_params,
29
+ reviewed_by: try_spree_current_user,
30
+ review_note: params[:review_note]
31
+ )
32
+
33
+ if result.success?
34
+ render json: serialize_resource(result.value), status: :created
35
+ else
36
+ render_result_error(result)
37
+ end
38
+ end
39
+
40
+ # PATCH /api/v3/admin/sellers/:seller_id/requirement_submissions/:id/accept
41
+ def accept
42
+ run_workflow(Spree.seller_requirement_submission_accept_workflow)
43
+ end
44
+
45
+ # PATCH /api/v3/admin/sellers/:seller_id/requirement_submissions/:id/reject
46
+ def reject
47
+ run_workflow(Spree.seller_requirement_submission_reject_workflow)
48
+ end
49
+
50
+ # GET /api/v3/admin/sellers/:seller_id/requirement_submissions/:id/download
51
+ #
52
+ # Served through the API rather than as a storage link: these are
53
+ # business registrations and identity documents, so each read is
54
+ # authorized instead of being open to anyone holding a URL.
55
+ def download
56
+ unless @resource.file.attached?
57
+ return render_error(
58
+ code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
59
+ message: 'Submission has no attached file',
60
+ status: :unprocessable_content
61
+ )
62
+ end
63
+
64
+ send_data(
65
+ @resource.file.download,
66
+ filename: @resource.file.filename.to_s,
67
+ type: @resource.file.content_type,
68
+ disposition: 'attachment'
69
+ )
70
+ end
71
+
72
+ protected
73
+
74
+ def model_class
75
+ Spree::SellerRequirementSubmission
76
+ end
77
+
78
+ def serializer_class
79
+ Spree.api.admin_seller_requirement_submission_serializer
80
+ end
81
+
82
+ # The parent is set and authorized by the base controller, and the
83
+ # scope hangs off it — so a submission belonging to another
84
+ # marketplace is a 404 rather than a document.
85
+ def parent_association
86
+ :requirement_submissions
87
+ end
88
+
89
+ # The serializer reads each row's file and its seller, so both are
90
+ # loaded with the page rather than per row.
91
+ def collection_includes
92
+ [:requirement, :reviewed_by, :seller, { file_attachment: :blob }]
93
+ end
94
+
95
+ def read_actions
96
+ super + %w[download]
97
+ end
98
+
99
+ # Scope-fetched through the store, then filtered by what this role may
100
+ # do with it: reading a seller is not licence to decide its
101
+ # submissions, which `authorize_parent!` enforces per action.
102
+ def set_parent
103
+ @parent = current_store.sellers.
104
+ accessible_by(current_ability, parent_ability_action).
105
+ find_by_prefix_id!(params[:seller_id])
106
+ authorize_parent!(@parent)
107
+ end
108
+
109
+ private
110
+
111
+ def seller
112
+ @parent
113
+ end
114
+
115
+ # Through the store's own requirements: an id from elsewhere is a
116
+ # 404 here rather than a waiver written against another
117
+ # marketplace's checklist.
118
+ def requirement_from_params
119
+ current_store.seller_requirements.find_by_prefix_id!(params[:requirement_id])
120
+ end
121
+
122
+ def run_workflow(workflow)
123
+ result = workflow.call(
124
+ submission: @resource,
125
+ reviewed_by: try_spree_current_user,
126
+ review_note: params[:review_note]
127
+ )
128
+
129
+ if result.success?
130
+ render json: serialize_resource(result.value)
131
+ else
132
+ render_result_error(result)
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,115 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # What this marketplace asks of a seller before it will let them
6
+ # trade (docs/plans/6.0-seller-onboarding-requirements.md).
7
+ #
8
+ # Under `write_sellers` rather than `settings`: who decides admission
9
+ # is who admits, and a key that can approve sellers is the same key
10
+ # that should be able to change what approval requires.
11
+ class SellerRequirementsController < ResourceController
12
+ include Spree::Api::V3::Admin::SubclassedResource
13
+
14
+ scoped_resource :sellers
15
+
16
+ subclassed_via -> { Spree.seller_requirements },
17
+ unknown_type_error: 'unknown_seller_requirement_type'
18
+
19
+ # GET /api/v3/admin/seller_requirements/types
20
+ #
21
+ # The kinds an operator can add, with the shape of each one's
22
+ # configuration form. A marketplace's own kinds appear here the
23
+ # moment they are registered, which is what keeps the picker from
24
+ # being a hardcoded list in the dashboard.
25
+ def types
26
+ # `:read`, matching its place in `read_actions`: this lists the
27
+ # kinds a marketplace has registered and nothing about any store,
28
+ # so a staffer who can see the checklist can see what it is made
29
+ # of. Asking for `:create` here 403s exactly those people.
30
+ authorize! :read, model_class
31
+
32
+ data = Spree.seller_requirements.map do |klass|
33
+ {
34
+ type: klass.api_type,
35
+ name: klass.human_name,
36
+ description: klass.human_description,
37
+ allow_multiple: klass.allow_multiple?,
38
+ accepts_submissions: klass.accepts_submissions?,
39
+ reviewed_by_operator: klass.reviewed_by_operator?,
40
+ # Whether the store already has one, and whether it may add
41
+ # another — the uniqueness rule is the model's, so the picker
42
+ # reads the answer rather than reimplementing it.
43
+ configured: configured_types.include?(klass.to_s),
44
+ addable: klass.allow_multiple? || configured_types.exclude?(klass.to_s),
45
+ # What a seller may upload, for kinds that collect a file.
46
+ # Told to the operator, never asked of them — the answer is
47
+ # the same for every marketplace.
48
+ accepted_content_types: klass.accepted_content_types,
49
+ # Config a kind takes beyond its preferences — a reference
50
+ # list gets its own picker, not a text box.
51
+ association_fields: association_fields_for(klass),
52
+ preference_schema: klass.serialized_preference_schema
53
+ }
54
+ end
55
+
56
+ render json: { data: data }
57
+ end
58
+
59
+ protected
60
+
61
+ def model_class
62
+ Spree::SellerRequirement
63
+ end
64
+
65
+ def serializer_class
66
+ Spree.api.admin_seller_requirement_serializer
67
+ end
68
+
69
+ def scope
70
+ super.ordered
71
+ end
72
+
73
+ # `type` is stripped before assignment by the subclassed-resource
74
+ # flow, so a saved row's kind can never change — which matters
75
+ # because its submissions answered the old one.
76
+ def permitted_params
77
+ params.permit(:type, :name, :description, :position, :active, :required,
78
+ preferences: {}, metadata: {})
79
+ end
80
+
81
+ # `types` is read-only discovery — maps to the read scope.
82
+ def read_actions
83
+ super + %w[types]
84
+ end
85
+
86
+ private
87
+
88
+ # `additional_permitted_attributes` entries are either bare symbols
89
+ # or `{ custom_field_definition_ids: [] }` hashes; both reduce to
90
+ # field names an editor can render a picker for.
91
+ def association_fields_for(klass)
92
+ return [] unless klass.respond_to?(:additional_permitted_attributes)
93
+
94
+ klass.additional_permitted_attributes.flat_map do |attribute|
95
+ attribute.is_a?(Hash) ? attribute.keys : attribute
96
+ end.map(&:to_s)
97
+ end
98
+
99
+ def build_subclassed_resource(klass, attrs)
100
+ current_store.seller_requirements.build(attrs.merge(type: klass.sti_name))
101
+ end
102
+
103
+ # `pluck` queries whether or not the association is already loaded,
104
+ # so a warm `current_store` cannot leave this answering with a kind
105
+ # the store no longer has. `reorder(nil)` because the association
106
+ # orders by position, and PostgreSQL refuses SELECT DISTINCT with an
107
+ # ORDER BY on a column it does not select.
108
+ def configured_types
109
+ @configured_types ||= current_store.seller_requirements.reorder(nil).distinct.pluck(:type)
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,36 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # What each seller has earned, order by order.
6
+ #
7
+ # Read-only, enforced by the routes: a transfer records money that
8
+ # moved. Correcting one is a reversal — another row, written by the
9
+ # refund that caused it — rather than an edit.
10
+ class SellerTransfersController < ResourceController
11
+ scoped_resource :payouts
12
+
13
+ protected
14
+
15
+ def model_class
16
+ Spree::SellerTransfer
17
+ end
18
+
19
+ def serializer_class
20
+ Spree.api.admin_seller_transfer_serializer
21
+ end
22
+
23
+ def scope
24
+ super.for_store(current_store)
25
+ end
26
+
27
+ # Every association the serializer reads, so a page of rows costs a
28
+ # fixed number of queries rather than one per row.
29
+ def collection_includes
30
+ [:seller, :order, :payout, :reversed_from, :refund]
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end