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,41 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module Orders
6
+ # The registration the order was taxed against, frozen at completion.
7
+ # Read-only because the row is: staff investigating why an invoice was
8
+ # zero-rated need to see the number and the verdict behind it, not
9
+ # change what the invoice already says.
10
+ class TaxIdentifiersController < BaseController
11
+ # A singular nested resource: there is no :id to look up, and the
12
+ # inherited lookup would reach for a plural association that does
13
+ # not exist. Mirrors Orders::StoreCreditsController.
14
+ skip_before_action :set_resource, raise: false
15
+
16
+ scoped_resource :orders
17
+
18
+ # GET /api/v3/admin/orders/:order_id/tax_identifier
19
+ def show
20
+ return head :not_found if @parent.tax_identifier.nil?
21
+
22
+ authorize_resource!(@parent.tax_identifier, :show)
23
+
24
+ render json: serialize_resource(@parent.tax_identifier)
25
+ end
26
+
27
+ protected
28
+
29
+ def model_class
30
+ Spree::TaxIdentifier
31
+ end
32
+
33
+ def serializer_class
34
+ Spree.api.admin_tax_identifier_serializer
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module Orders
6
+ # Read-only: tax lines are written exclusively by the tax provider.
7
+ class TaxLinesController < BaseController
8
+ scoped_resource :orders
9
+
10
+ protected
11
+
12
+ def model_class
13
+ Spree::TaxLine
14
+ end
15
+
16
+ def serializer_class
17
+ Spree.api.admin_tax_line_serializer
18
+ end
19
+
20
+ def scope
21
+ @parent.tax_lines
22
+ end
23
+
24
+ def collection_includes
25
+ [:tax_rate, :line_item, :fulfillment, :fee]
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -7,8 +7,14 @@ module Spree
7
7
 
8
8
  scoped_resource :orders
9
9
 
10
+ # The order accepts a `po_document` signed blob id and streams it back.
11
+ include ActiveStorage::SetCurrent
12
+
13
+ # A tampered signed id would otherwise surface as a 500.
14
+ rescue_from ActiveSupport::MessageVerifier::InvalidSignature, with: :render_invalid_po_document
15
+
10
16
  skip_before_action :set_resource, only: [:index, :create]
11
- before_action :set_resource, only: [:show, :update, :destroy, :complete, :cancel, :approve, :resume, :resend_confirmation]
17
+ before_action :set_resource, only: [:show, :update, :destroy, :complete, :cancel, :approve, :resend_confirmation, :resend_digital_links, :po_document]
12
18
 
13
19
  # POST /api/v3/admin/orders
14
20
  def create
@@ -16,7 +22,8 @@ module Spree
16
22
 
17
23
  result = Spree.order_create_service.call(
18
24
  store: current_store,
19
- user: resolve_user,
25
+ customer: resolve_customer,
26
+ created_by: try_spree_current_user,
20
27
  params: order_create_params
21
28
  )
22
29
 
@@ -49,7 +56,7 @@ module Spree
49
56
  with_order_lock do
50
57
  result = Spree.order_complete_service.call(
51
58
  order: @resource,
52
- payment_pending: ActiveModel::Type::Boolean.new.cast(params[:payment_pending]),
59
+ payment_pending: params[:payment_pending].to_b,
53
60
  notify_customer: ActiveModel::Type::Boolean.new.cast(params[:notify_customer])
54
61
  )
55
62
 
@@ -64,8 +71,21 @@ module Spree
64
71
  # PATCH /api/v3/admin/orders/:id/cancel
65
72
  def cancel
66
73
  with_order_lock do
67
- @resource.canceled_by(try_spree_current_user)
68
- render json: serialize_resource(@resource.reload)
74
+ result = Spree.order_cancel_workflow.call(
75
+ order: @resource,
76
+ canceler: try_spree_current_user,
77
+ reason: cancel_reason,
78
+ note: params[:cancel_note].presence,
79
+ refund_payments: params[:refund_payments].to_b,
80
+ refund_amount: params[:refund_amount].presence,
81
+ notify_customer: params[:notify_customer].to_b
82
+ )
83
+
84
+ if result.success?
85
+ render json: serialize_resource(@resource.reload)
86
+ else
87
+ render_service_error(@resource.errors.presence || result.error)
88
+ end
69
89
  end
70
90
  end
71
91
 
@@ -77,22 +97,50 @@ module Spree
77
97
  end
78
98
  end
79
99
 
80
- # PATCH /api/v3/admin/orders/:id/resume
81
- def resume
82
- with_order_lock do
83
- @resource.resume!
84
- render json: serialize_resource(@resource.reload)
85
- end
86
- end
87
-
88
100
  # POST /api/v3/admin/orders/:id/resend_confirmation
89
101
  def resend_confirmation
90
- @resource.publish_event('order.completed')
102
+ @resource.publish_event('order.resend_confirmation_email')
91
103
  render json: serialize_resource(@resource)
92
104
  end
93
105
 
106
+ # POST /api/v3/admin/orders/:id/resend_digital_links
107
+ def resend_digital_links
108
+ @resource.publish_event('order.resend_digital_links_email')
109
+ render json: serialize_resource(@resource)
110
+ end
111
+
112
+ # GET /api/v3/admin/orders/:id/po_document
113
+ #
114
+ # The buyer's purchase order, streamed rather than redirected so the
115
+ # document is never reachable without admin credentials.
116
+ def po_document
117
+ unless @resource.po_document.attached?
118
+ return render_error(
119
+ code: ERROR_CODES[:validation_error],
120
+ message: Spree.t(:po_document_missing),
121
+ status: :unprocessable_content
122
+ )
123
+ end
124
+
125
+ send_data(
126
+ @resource.po_document.download,
127
+ filename: @resource.po_document.filename.to_s,
128
+ type: @resource.po_document.content_type || 'application/octet-stream',
129
+ disposition: 'attachment'
130
+ )
131
+ end
132
+
94
133
  protected
95
134
 
135
+ # Fetching the document is a read of the order, so it takes the read
136
+ # scope rather than being classed as a write for not being index or
137
+ # show.
138
+ READ_ACTIONS = %w[index show po_document].freeze
139
+
140
+ def read_actions
141
+ READ_ACTIONS
142
+ end
143
+
96
144
  def model_class
97
145
  Spree::Order
98
146
  end
@@ -101,13 +149,25 @@ module Spree
101
149
  Spree.api.admin_order_serializer
102
150
  end
103
151
 
104
- # Override scope — Order uses SingleStoreResource (for_store)
152
+ # Override scope — Order uses SingleStoreResource (for_store).
153
+ # Variant prices are preloaded here rather than via scope_includes,
154
+ # which this override bypasses; the serializer reads them per row.
105
155
  def scope
106
- current_store.orders.accessible_by(current_ability, :show).preload_associations_lazily
156
+ base = current_store.orders.accessible_by(current_ability, :show).
157
+ includes(line_items: { variant: :prices }).preload_associations_lazily
158
+
159
+ # Transient completion drafts (status draft + cart_id set) belong
160
+ # to in-flight checkouts, never to the admin. Admin drafts are the
161
+ # cart-less ones.
162
+ base.where(cart_id: nil).or(base.where.not(status: 'draft'))
107
163
  end
108
164
 
165
+ # Through find_resource, not find_by_prefix_id! directly, so the
166
+ # external:<system>:<id> addressing the concern provides reaches
167
+ # orders — an ERP that pushed its order number wants to read the
168
+ # order back by it.
109
169
  def set_resource
110
- @resource = scope.find_by_prefix_id!(params[:id])
170
+ @resource = find_resource
111
171
  @order = @resource # needed for OrderLock
112
172
  authorize_resource!(@resource)
113
173
  end
@@ -115,35 +175,81 @@ module Spree
115
175
  # Map state transition actions to :update permission
116
176
  def authorize_resource!(resource = @resource, action = action_name.to_sym)
117
177
  mapped_action = case action
118
- when :complete, :cancel, :approve, :resume, :resend_confirmation
178
+ when :complete, :cancel, :approve, :resend_confirmation, :resend_digital_links
119
179
  :update
180
+ when :po_document
181
+ :show
120
182
  else
121
183
  action
122
184
  end
123
185
  authorize!(mapped_action, resource)
124
186
  end
125
187
 
188
+ # seller is preloaded because its id is read on every row and an
189
+ # expanded list renders the whole profile; order_group is not, since
190
+ # only its id is reported and that comes off the order's own column.
191
+ # Variant prices ride along because the admin line-item serializer
192
+ # reads the base catalog price for every row (the negotiated-price
193
+ # comparison); without it each line costs its own price query.
126
194
  def collection_includes
127
- [:line_items, :user, :channel, :rich_text_internal_note]
195
+ # `market` is the withdrawal deadline's other input. Fulfillments
196
+ # are loaded with their selected rate because the freight summary
197
+ # reads it — otherwise a page of orders costs a query per
198
+ # fulfillment for a field that is nil on every parcel order.
199
+ [:customer, :channel, :seller, :external_references, :cancel_reason,
200
+ :market, { fulfillments: :selected_delivery_rate },
201
+ { line_items: { variant: :prices } }, { po_document_attachment: :blob }]
202
+ end
203
+
204
+ # Read through the store's own vocabulary, so a reason belonging to
205
+ # another store is a 404 rather than a silent mislabel.
206
+ def cancel_reason
207
+ id = params[:cancel_reason_id].presence
208
+ return if id.nil?
209
+
210
+ current_store.order_cancellation_reasons.find_by_prefix_id!(id)
128
211
  end
129
212
 
130
213
  private
131
214
 
132
- def resolve_user
133
- customer_param = params[:customer_id].presence || params[:user_id].presence
215
+ def render_invalid_po_document
216
+ render_error(
217
+ code: ERROR_CODES[:validation_error],
218
+ message: Spree.t(:po_document_invalid_signed_id),
219
+ status: :unprocessable_content
220
+ )
221
+ end
222
+
223
+ def resolve_customer
224
+ customer_param = params[:customer_id].presence
134
225
  return unless customer_param
135
226
 
136
- Spree.user_class.find_by_param!(customer_param)
227
+ Spree.customer_class.
228
+ accessible_by(current_ability, :show).
229
+ find_by_prefix_id!(customer_param)
230
+ end
231
+
232
+ # An upsert arrives on the create action, so addresses come in under
233
+ # the create names. Translate them to the ones update accepts, or a
234
+ # replayed feed row would silently lose the address it sent.
235
+ def normalize_upsert_params!
236
+ # update runs under with_order_lock, which reads @order — normally
237
+ # set by set_resource, which the create path never runs.
238
+ @order = @resource
137
239
  end
138
240
 
139
241
  def order_create_params
140
- normalize_params(
242
+ permitted = normalize_params(
141
243
  params.permit(
142
- :email, :customer_id, :user_id, :use_customer_default_address,
244
+ :email, :customer_id, :use_customer_default_address,
143
245
  :currency, :market_id, :channel_id, :locale,
144
246
  :customer_note, :internal_note,
247
+ # The buyer's own purchase-order reference, and the signed blob
248
+ # id of the document behind it — a PO arriving by email and
249
+ # keyed in is the draft-order flow plus these two fields.
250
+ :po_number, :po_document,
145
251
  :shipping_address_id, :billing_address_id,
146
- :preferred_stock_location_id,
252
+ :preferred_stock_location_id, :company_id,
147
253
  :coupon_code,
148
254
  metadata: {},
149
255
  tags: [],
@@ -152,36 +258,55 @@ module Spree
152
258
  items: item_permitted_keys
153
259
  )
154
260
  )
261
+ resolve_company_param(permitted)
155
262
  end
156
263
 
157
264
  def order_update_params
158
- normalize_params(
265
+ permitted = normalize_params(
159
266
  params.permit(
160
- :email, :customer_id, :user_id,
267
+ :email, :customer_id,
161
268
  :customer_note, :internal_note,
269
+ :po_number, :po_document,
162
270
  :currency, :locale, :market_id, :channel_id,
163
- :preferred_stock_location_id,
271
+ :preferred_stock_location_id, :company_id,
164
272
  metadata: {},
165
273
  tags: [],
166
- ship_address: address_permitted_keys,
167
- bill_address: address_permitted_keys,
274
+ shipping_address: address_permitted_keys,
275
+ billing_address: address_permitted_keys,
168
276
  items: item_permitted_keys
169
277
  )
170
278
  )
279
+ resolve_company_param(permitted)
280
+ end
281
+
282
+ # An incidental lookup like any other: resolved through the store so
283
+ # another tenant's node 404s instead of surfacing as a validation
284
+ # error (which would confirm the id exists). Reads the raw param —
285
+ # normalize_params has already decoded the prefixed id.
286
+ def resolve_company_param(permitted)
287
+ return permitted unless permitted.key?(:company_id)
288
+
289
+ permitted[:company_id] =
290
+ if params[:company_id].present?
291
+ current_store.companies.find_by_prefix_id!(params[:company_id]).id
292
+ else
293
+ nil
294
+ end
295
+ permitted
171
296
  end
172
297
 
173
298
  def address_permitted_keys
174
299
  [
175
300
  :firstname, :lastname, :first_name, :last_name,
176
301
  :address1, :address2, :city,
177
- :country_iso, :state_abbr, :country_id, :state_id,
302
+ :country_code, :state_code,
178
303
  :zipcode, :postal_code, :phone, :alternative_phone,
179
304
  :state_name, :company, :label
180
305
  ]
181
306
  end
182
307
 
183
308
  def item_permitted_keys
184
- [:variant_id, :quantity, { metadata: {} }]
309
+ [:variant_id, :quantity, :price, { metadata: {} }]
185
310
  end
186
311
  end
187
312
  end
@@ -0,0 +1,39 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The store's packaging vocabulary. Marking one row default makes it
6
+ # the box the store's own parcel quotes are built on; the model
7
+ # demotes whichever row held the flag before.
8
+ #
9
+ # On a marketplace this lists every row in the store, the operator's
10
+ # and each seller's, so `q[seller_id_eq]` narrows it to one owner. A
11
+ # row the operator writes here is the marketplace's: `seller_id` is
12
+ # not writable, and a seller's own packaging is theirs to edit through
13
+ # the seller API (docs/plans/6.0-seller-package-types.md).
14
+ class PackageTypesController < ResourceController
15
+ scoped_resource :package_types
16
+
17
+ protected
18
+
19
+ def model_class
20
+ Spree::PackageType
21
+ end
22
+
23
+ def serializer_class
24
+ Spree.api.admin_package_type_serializer
25
+ end
26
+
27
+ def collection_includes
28
+ [:seller]
29
+ end
30
+
31
+ def resource_permitted_attributes
32
+ [:name, :kind, :length, :width, :height, :dimensions_unit,
33
+ :weight, :max_weight, :weight_unit, :default, { metadata: {} }]
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -60,7 +60,7 @@ module Spree
60
60
  # password. Revoke first, then mint the fresh token for this
61
61
  # browser (the auto-sign-in below).
62
62
  Spree::RefreshToken.revoke_all_for(user)
63
- refresh_token = Spree::RefreshToken.create_for(user, request_env: request_env_for_token)
63
+ refresh_token = Spree::RefreshToken.create_for(user, audience: JWT_AUDIENCE_ADMIN, request_env: request_env_for_token)
64
64
  set_refresh_cookie(refresh_token)
65
65
 
66
66
  render json: auth_response(user)
@@ -43,12 +43,23 @@ module Spree
43
43
  Spree.api.admin_payment_method_serializer
44
44
  end
45
45
 
46
- # Explicit allowlist per the v3 convention — flat params, no
47
- # reach into the global `Spree::PermittedAttributes` registry
48
- # (which is the legacy Rails admin's surface). `type` and
46
+ # Explicit allowlist per the v3 convention — flat params. `type` and
49
47
  # `preferences` are added by `SubclassedResource` on top.
48
+ # Deliberately NOT routed through `normalize_params`: gateway
49
+ # `preferences` are opaque provider values, and prefixed-ID resolution
50
+ # recurses into nested hashes — a Stripe `webhook_endpoint_id` like
51
+ # `we_1MqJ8b...` matches the prefixed-ID shape and would be decoded to
52
+ # an integer. `type` and `preferences` are added by `SubclassedResource`.
50
53
  def permitted_params
51
- params.permit(:name, :description, :active, :storefront_visible, :auto_capture, :position, metadata: {}, preferences: {})
54
+ params.permit(
55
+ :name, :description, :active, :storefront_visible, :auto_capture, :capture_method, :position,
56
+ *model_additional_permitted_attributes,
57
+ metadata: {}, preferences: {}
58
+ )
59
+ end
60
+
61
+ def scope
62
+ super.ordered
52
63
  end
53
64
 
54
65
  # `types` is read-only discovery — maps to the read scope + :show ability.
@@ -0,0 +1,27 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # How this installation can pay its sellers, and which of those a store
6
+ # could use today.
7
+ #
8
+ # Discovery rather than CRUD: providers are classes registered in code,
9
+ # not rows — so there is no serializer, and each class describes itself
10
+ # (`to_api_hash`), the same shape `/tax_providers` uses.
11
+ #
12
+ # Whether a provider needs sellers to hold an account with it is the
13
+ # part worth surfacing at selection time: choosing one changes what a
14
+ # marketplace has to ask of its sellers before it can pay them, which
15
+ # is better known before the choice than after.
16
+ class PayoutProvidersController < BaseController
17
+ scoped_resource :settings
18
+
19
+ # GET /api/v3/admin/payout_providers
20
+ def index
21
+ render json: { data: Spree.payout_providers.map { |provider| provider.to_api_hash(current_store) } }
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The permission catalog discovery endpoint — the vocabulary the role
6
+ # editor and the API-key scope picker render. It is vocabulary, not
7
+ # data, so any authenticated admin credential may read it (same class
8
+ # of exemption as `/tags`).
9
+ #
10
+ # Staff keys only. Both surfaces this feeds build something owned by
11
+ # the store — a store role, a secret key — and a key another audience
12
+ # holds (a seller's own profile or books) would render as an option
13
+ # that fails validation the moment it is picked.
14
+ class PermissionsController < Admin::BaseController
15
+ skip_scope_check!
16
+
17
+ # GET /api/v3/admin/permissions
18
+ def index
19
+ entries = Spree.permissions.entries
20
+
21
+ render json: {
22
+ data: entries.map { |entry| Spree.api.admin_permission_serializer.new(entry).to_h },
23
+ meta: { count: entries.size }
24
+ }
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,42 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The store's own legal documents. A seller's policies belong to the
6
+ # seller and are managed on the seller branch — this controller never
7
+ # reaches them, since its scope is the store's own association.
8
+ class PoliciesController < ResourceController
9
+ scoped_resource :settings
10
+
11
+ protected
12
+
13
+ def model_class
14
+ Spree::Policy
15
+ end
16
+
17
+ def serializer_class
18
+ Spree.api.admin_policy_serializer
19
+ end
20
+
21
+ def resource_permitted_attributes
22
+ [:name, :slug, :body]
23
+ end
24
+
25
+ # Accept slug (e.g. returns-policy) or prefixed ID (e.g. pol_abc123),
26
+ # matching the storefront's lookup.
27
+ def find_resource
28
+ if params[:id].to_s.start_with?('pol_')
29
+ scope.find_by_prefix_id!(params[:id])
30
+ else
31
+ scope.friendly.find(params[:id])
32
+ end
33
+ end
34
+
35
+ def scope
36
+ super.order(:name)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,93 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module PriceLists
6
+ # The products a price list covers — the uniform nested membership
7
+ # surface (see Spree::Api::V3::Admin::ProductMembership). Membership
8
+ # is derived from the list's price rows: adding a product
9
+ # materializes a placeholder price for every variant × store
10
+ # currency (the spreadsheet's empty cells), removing hard-deletes
11
+ # its price rows. Unordered — a price list prices, it never
12
+ # merchandises — so listing is by name.
13
+ class ProductsController < ResourceController
14
+ include Spree::Api::V3::Admin::ProductMembership
15
+
16
+ # Price lists ride the products scope like their parent
17
+ # controller — no separate read_price_lists scope.
18
+ scoped_resource :products
19
+
20
+ protected
21
+
22
+ def serializer_class
23
+ Spree.api.admin_price_list_product_serializer
24
+ end
25
+
26
+ # The resolver rides along in the serializer params, preloaded
27
+ # with this page's variants — one query for the page rather than
28
+ # one per row (see Catalogs::ProductsController, the same shape).
29
+ def serializer_params
30
+ return super unless expanded_keys.include?('price_list_price')
31
+
32
+ super.merge(price_list_price_resolver: price_list_price_resolver)
33
+ end
34
+
35
+ # The list read as it stands, draft or not: this is its editor.
36
+ def price_list_price_resolver
37
+ @price_list_price_resolver ||=
38
+ Spree::Catalogs::ResolvePrices.new(price_list: @price_list, currency: current_currency).
39
+ tap { |resolver| resolver.preload(priced_variants) }
40
+ end
41
+
42
+ def priced_variants
43
+ Array(@collection).flat_map { |product| product.variants.to_a }
44
+ end
45
+
46
+ # Every row lists its variants and prices each of them, so what
47
+ # the rows read comes down with the page: the prices the resolver
48
+ # picks from, the option values that name the variant, the stock
49
+ # levels behind the flags. `default_variant` separately, since it
50
+ # is its own belongs_to with a cache of its own.
51
+ # Only what this page reads: the card's thumbnail, and every
52
+ # variant with the rows and option values the resolver and the
53
+ # variant rows need. `default_variant` is deliberately absent —
54
+ # it is a separate `belongs_to` with a cache of its own, so
55
+ # reading it here would re-query option values per row. Publications, stock levels and the default
56
+ # variant's own prices are deliberately absent — the serializer
57
+ # here is not the admin product serializer and never asks for them.
58
+ def collection_includes
59
+ [
60
+ :primary_media,
61
+ { variants: [:prices, { option_values: :option_type }] }
62
+ ]
63
+ end
64
+
65
+ # DISTINCT (the base default): a product joins once per
66
+ # variant × currency price row.
67
+ def scope
68
+ product_scope.
69
+ joins(variants: :prices).
70
+ where(Spree::Price.table_name => { price_list_id: @price_list.id }).
71
+ order(:name)
72
+ end
73
+
74
+ def add_member_products(products)
75
+ @price_list.add_products(products.map(&:id))
76
+ end
77
+
78
+ def remove_member_products(products)
79
+ @price_list.remove_products(products.map(&:id))
80
+ end
81
+
82
+ def set_parent
83
+ @price_list = current_store.price_lists.
84
+ accessible_by(current_ability, parent_ability_action).
85
+ find_by_prefix_id!(params[:price_list_id])
86
+ authorize_parent!(@price_list)
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end