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
@@ -2,38 +2,101 @@ module Spree
2
2
  module Api
3
3
  module V3
4
4
  module Admin
5
- # Inventory movement between stock locations, or vendor location
6
- # for receives. Pass `source_location_id` for transfers; omit it to
7
- # record an external receive.
5
+ # Stock moving between two of the merchant's own warehouses.
6
+ #
7
+ # `create` persists a draft; nothing moves until the transfer is marked
8
+ # in transit. Receiving from a supplier is a
9
+ # {Spree::Api::V3::Admin::PurchaseOrdersController} order, not a
10
+ # transfer with a missing source.
11
+ #
12
+ # Every status change is its own member action rather than a PATCH that
13
+ # mass-assigns `status`, because each one is a workflow with its own
14
+ # arguments — receiving carries the quantities the warehouse counted,
15
+ # cancelling carries what happens to units already in flight.
8
16
  class StockTransfersController < ResourceController
9
- scoped_resource :stock
17
+ include Spree::Api::V3::Admin::ReceivableActions
10
18
 
11
- def create
12
- authorize!(:create, model_class)
19
+ scoped_resource :stock
13
20
 
14
- stock_locations = Spree::StockLocation.accessible_by(current_ability, :show)
15
- destination = stock_locations.find_by_prefix_id!(params[:destination_location_id])
16
- source = params[:source_location_id].present? ?
17
- stock_locations.find_by_prefix_id!(params[:source_location_id]) : nil
21
+ # The base registers this for show/update/destroy; a second
22
+ # `before_action :set_resource` replaces that registration rather than
23
+ # adding to it, so those three are listed again here.
24
+ before_action :set_resource, only: [:show, :update, :destroy, :mark_ready, :mark_in_transit, :mark_draft, :close, :cancel]
18
25
 
19
- variants_map = build_variants_map
20
- if variants_map.empty?
26
+ # DELETE /api/v3/admin/stock_transfers/:id
27
+ #
28
+ # A draft is the only transfer a merchant may throw away: past that
29
+ # it describes a box that physically exists, which is cancelled
30
+ # rather than deleted.
31
+ #
32
+ # Really deleted, not stamped. Soft deletion exists for the upgrade
33
+ # task's converted receives, whose numbers have to stay findable; a
34
+ # draft nobody sent has nothing to preserve, and `destroy` would
35
+ # hard-delete its lines regardless (they are not paranoid), leaving a
36
+ # soft-deleted row that could never be restored intact.
37
+ def destroy
38
+ unless @resource.draft?
21
39
  return render_error(
22
- code: 'invalid_variants',
23
- message: Spree.t('stock_transfer.errors.must_have_variant'),
40
+ code: 'invalid_status',
41
+ message: Spree.t('stock_transfer.errors.only_draft_can_be_deleted'),
24
42
  status: :unprocessable_content
25
43
  )
26
44
  end
27
45
 
28
- @resource = source ?
29
- Spree::StockTransfer.new(reference: params[:reference]).tap { |t| t.transfer(source, destination, variants_map) } :
30
- Spree::StockTransfer.new(reference: params[:reference]).tap { |t| t.receive(destination, variants_map) }
46
+ authorize_resource!(@resource, :destroy)
47
+ @resource.really_destroy!
48
+ head :no_content
49
+ end
31
50
 
32
- if @resource.persisted?
33
- render json: serialize_resource(@resource), status: :created
34
- else
35
- render_validation_error(@resource.errors)
36
- end
51
+ # PATCH /api/v3/admin/stock_transfers/:id/mark_ready
52
+ def mark_ready
53
+ result = Spree.stock_transfer_mark_ready_workflow.call(stock_transfer: @resource)
54
+ return render_result_error(result) unless result.success?
55
+
56
+ render json: serialize_resource(result.value)
57
+ end
58
+
59
+ # PATCH /api/v3/admin/stock_transfers/:id/mark_in_transit
60
+ def mark_in_transit
61
+ result = Spree.stock_transfer_mark_in_transit_workflow.call(
62
+ stock_transfer: @resource,
63
+ force: params[:force].to_b
64
+ )
65
+ return render_result_error(result) unless result.success?
66
+
67
+ render json: serialize_resource(result.value)
68
+ end
69
+
70
+ # PATCH /api/v3/admin/stock_transfers/:id/mark_draft
71
+ def mark_draft
72
+ result = Spree.stock_transfer_mark_draft_workflow.call(stock_transfer: @resource)
73
+ return render_result_error(result) unless result.success?
74
+
75
+ render json: serialize_resource(result.value)
76
+ end
77
+
78
+ # PATCH /api/v3/admin/stock_transfers/:id/close
79
+ #
80
+ # Deliveries are recorded through the nested stock receipts; this is
81
+ # for units that left the source and are not going to turn up.
82
+ def close
83
+ result = Spree.stock_transfer_close_workflow.call(stock_transfer: @resource, reason: params[:reason])
84
+ return render_result_error(result) unless result.success?
85
+
86
+ render json: serialize_resource(result.value)
87
+ end
88
+
89
+ # PATCH /api/v3/admin/stock_transfers/:id/cancel
90
+ def cancel
91
+ result = Spree.stock_transfer_cancel_workflow.call(
92
+ stock_transfer: @resource,
93
+ on_in_transit: params[:on_in_transit],
94
+ reason: params[:reason],
95
+ canceler: try_spree_current_user
96
+ )
97
+ return render_result_error(result) unless result.success?
98
+
99
+ render json: serialize_resource(result.value)
37
100
  end
38
101
 
39
102
  protected
@@ -47,27 +110,60 @@ module Spree
47
110
  end
48
111
 
49
112
  def collection_includes
50
- [:source_location, :destination_location]
113
+ [:source_location, :destination_location, line_includes]
51
114
  end
52
115
 
53
- private
116
+ def create_workflow
117
+ Spree.stock_transfer_create_workflow
118
+ end
54
119
 
55
- # Variants the merchant doesn't have access to are dropped silently;
56
- # if the resulting map is empty the action surfaces a 422
57
- # `invalid_variants` so callers can distinguish "nothing supplied"
58
- # from "all variants were rejected." A single SELECT covers any
59
- # number of variants instead of N round-trips.
60
- def build_variants_map
61
- entries = params.permit(variants: [:variant_id, :quantity]).fetch(:variants, [])
62
- quantities_by_id = entries.each_with_object({}) do |entry, hash|
63
- decoded = Spree::PrefixedId.decode_prefixed_id(entry[:variant_id])
64
- hash[decoded.to_i] = entry[:quantity].to_i if decoded
65
- end
120
+ def update_workflow
121
+ Spree.stock_transfer_update_workflow
122
+ end
123
+
124
+ def create_workflow_arguments
125
+ {
126
+ store: current_store,
127
+ source_location: stock_location_from(:source_location_id),
128
+ destination_location: stock_location_from(:destination_location_id),
129
+ items: items_from_params(:quantity_shipped) || [],
130
+ reference: params[:reference],
131
+ notes: params[:notes],
132
+ created_by: try_spree_current_user
133
+ }
134
+ end
135
+
136
+ def update_workflow_arguments
137
+ {
138
+ stock_transfer: @resource,
139
+ attributes: editable_attributes,
140
+ items: items_from_params(:quantity_shipped)
141
+ }
142
+ end
66
143
 
67
- current_store.variants.accessible_by(current_ability, :update).where(id: quantities_by_id.keys).each_with_object({}) do |variant, acc|
68
- quantity = quantities_by_id[variant.id]
69
- acc[variant] = quantity if quantity&.positive?
144
+ # Only what mass assignment may safely carry. The two warehouses are
145
+ # resolved through the store instead, since an id the payload names
146
+ # has to be proved to belong here.
147
+ def resource_permitted_attributes
148
+ [:reference, :notes, { metadata: {} }]
149
+ end
150
+
151
+ # A transfer's status transitions are its own actions, so `update`
152
+ # only ever edits the document — and its two ends are objects the
153
+ # store handed us, never ids the payload asserted.
154
+ def editable_attributes
155
+ attributes = permitted_params.to_h.symbolize_keys
156
+ attributes[:source_location] = stock_location_from(:source_location_id) if params.key?(:source_location_id)
157
+ if params.key?(:destination_location_id)
158
+ attributes[:destination_location] = stock_location_from(:destination_location_id)
70
159
  end
160
+ attributes
161
+ end
162
+
163
+ # The listing and the detail page both read a transfer's totals off
164
+ # its lines.
165
+ def scope_includes
166
+ [line_includes]
71
167
  end
72
168
  end
73
169
  end
@@ -5,6 +5,15 @@ module Spree
5
5
  class StoreController < Admin::BaseController
6
6
  scoped_resource :settings
7
7
 
8
+ # Reading the current store is shell data — the dashboard needs the
9
+ # name, logo, timezone, currency and locales to render anything at
10
+ # all, so every signed-in staff member can read it regardless of
11
+ # their permissions. Secret keys still need `read_settings`: a
12
+ # scope-limited integration has no business reading operational
13
+ # settings (support/notification emails, routing) it wasn't granted.
14
+ # Writing always requires `write_settings`.
15
+ skip_scope_check! only: :show, jwt_only: true
16
+
8
17
  # GET /api/v3/admin/store
9
18
  def show
10
19
  authorize! :show, current_store
@@ -22,8 +31,38 @@ module Spree
22
31
  end
23
32
  end
24
33
 
34
+ # GET /api/v3/admin/store/data_sources
35
+ #
36
+ # The pricing and inventory engines this store can choose between,
37
+ # with whether each is usable — a provider whose integration is not
38
+ # connected is listed but not selectable, so the dashboard can say
39
+ # why rather than hiding it.
40
+ def data_sources
41
+ authorize! :show, current_store
42
+
43
+ render json: {
44
+ data: {
45
+ pricing_providers: describe(Spree.pricing_providers),
46
+ inventory_providers: describe(Spree.inventory_providers),
47
+ failure_policies: Spree::ProviderFailurePolicy::VALUES
48
+ }
49
+ }
50
+ end
51
+
25
52
  private
26
53
 
54
+ def describe(provider_classes)
55
+ provider_classes.map do |provider_class|
56
+ {
57
+ key: provider_class.key,
58
+ name: provider_class.provider_name,
59
+ integration_class: provider_class.integration_class,
60
+ integration_type: provider_class.integration_class.presence&.safe_constantize&.api_type,
61
+ available: provider_class.available_for_store?(current_store)
62
+ }
63
+ end
64
+ end
65
+
27
66
  def serialize_store
28
67
  serializer_class.new(current_store, params: serializer_params).to_h
29
68
  end
@@ -42,7 +81,33 @@ module Spree
42
81
  :preferred_storefront_access,
43
82
  :preferred_storefront_url,
44
83
  :preferred_guest_checkout,
84
+ :preferred_company_field_enabled,
85
+ :preferred_address_requires_company,
86
+ :preferred_address_requires_phone,
87
+ :preferred_capture_method,
88
+ # @deprecated Superseded by preferred_capture_method; the model
89
+ # maps them onto it. Removed in 6.1.
90
+ :preferred_auto_capture,
91
+ :preferred_auto_capture_on_dispatch,
92
+ :preferred_track_inventory_levels,
93
+ :preferred_stock_reservations_enabled,
94
+ :preferred_low_stock_threshold,
95
+ :preferred_tax_using_ship_address,
96
+ :preferred_track_price_history,
97
+ :preferred_show_products_without_price,
98
+ :preferred_disable_sku_validation,
45
99
  :preferred_order_routing_strategy,
100
+ :preferred_pricing_provider,
101
+ :preferred_inventory_provider,
102
+ :preferred_pricing_provider_failure_policy,
103
+ :preferred_inventory_provider_failure_policy,
104
+ :preferred_payout_provider,
105
+ :preferred_default_payouts_schedule_interval,
106
+ :preferred_default_minimum_payout_amount,
107
+ :preferred_document_number_format,
108
+ :preferred_order_number_prefix,
109
+ :preferred_order_number_suffix,
110
+ :preferred_order_number_sequence_start,
46
111
  :mail_from_address,
47
112
  :customer_support_email,
48
113
  :new_order_notifications_email,
@@ -0,0 +1,47 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module StoreCredits
6
+ # A store credit's ledger: how its balance got to where it is.
7
+ # Read-only — events are written by the credit itself as it is
8
+ # allocated, authorized, captured, voided and credited back.
9
+ class EventsController < ResourceController
10
+ scoped_resource :store_credits
11
+
12
+ protected
13
+
14
+ def model_class
15
+ Spree::StoreCreditEvent
16
+ end
17
+
18
+ def serializer_class
19
+ Spree.api.admin_store_credit_event_serializer
20
+ end
21
+
22
+ def parent_association
23
+ :store_credit_events
24
+ end
25
+
26
+ # A ledger reads newest first unless the caller asks otherwise.
27
+ def apply_collection_sort(collection)
28
+ return super if sort_param.present?
29
+
30
+ collection.reverse_chronological
31
+ end
32
+
33
+ # The parent credit is resolved through the store's own credits,
34
+ # so a credit belonging to another store 404s rather than leaking
35
+ # its ledger.
36
+ def set_parent
37
+ @parent = current_store.store_credits.
38
+ accessible_by(current_ability, parent_ability_action).
39
+ find_by_prefix_id!(params[:store_credit_id])
40
+ authorize_parent!(@parent)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,87 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Cross-customer view of what the store owes in prepaid balances.
6
+ #
7
+ # Read-only by design: a credit always belongs to one customer, and
8
+ # issuing, editing and deleting one stays nested under that customer
9
+ # (`Customers::StoreCreditsController`). This list is for seeing,
10
+ # filtering and auditing across all of them.
11
+ class StoreCreditsController < ResourceController
12
+ scoped_resource :store_credits
13
+
14
+ protected
15
+
16
+ def model_class
17
+ Spree::StoreCredit
18
+ end
19
+
20
+ def serializer_class
21
+ Spree.api.admin_store_credit_serializer
22
+ end
23
+
24
+ # Not `:originator`: the serializer encodes its id from the columns
25
+ # rather than loading the record, so preloading a polymorphic
26
+ # association would fire one query per originator kind on the page
27
+ # and discard every row it returned.
28
+ def collection_includes
29
+ [:customer, :created_by]
30
+ end
31
+
32
+ # Pagination metadata plus the outstanding balance, one row per
33
+ # currency, summed over the same filtered scope the page came from —
34
+ # so a customer filter answers "this customer's balance" and no
35
+ # filter answers "the store's liability".
36
+ def collection_meta(_collection)
37
+ super.merge(totals: currency_totals)
38
+ end
39
+
40
+ private
41
+
42
+ # @return [Array<Hash>] one entry per currency present in the
43
+ # filtered scope, ordered by currency.
44
+ def currency_totals
45
+ base = scope
46
+ table = Spree::StoreCredit.arel_table
47
+ # Summed over the matching ids rather than over the joined rows: a
48
+ # filter reaching through a `has_many` would match a credit once per
49
+ # joined row and count its amount that many times, overstating what
50
+ # the store owes.
51
+ # Without the sort key: the subquery only supplies ids, so carrying
52
+ # the page's ORDER BY (and any join it needs) buys nothing.
53
+ filtered = base.ransack(ransack_params.except('s')).result.select(:id)
54
+ rows = base.where(id: filtered).
55
+ reorder(nil).
56
+ order(:currency).
57
+ group(:currency).
58
+ pluck(
59
+ :currency,
60
+ table[:amount].sum,
61
+ table[:amount_used].sum,
62
+ table[:amount_authorized].sum
63
+ )
64
+
65
+ rows.map do |currency, amount, used, authorized|
66
+ # `SUM` answers an Integer on a whole-number total, and these
67
+ # totals render beside rows that serialize decimal strings — so
68
+ # "50" must not appear against their "50.0".
69
+ figures = {
70
+ amount: amount.to_d,
71
+ amount_used: used.to_d,
72
+ amount_authorized: authorized.to_d
73
+ }
74
+ figures[:amount_remaining] =
75
+ figures[:amount] - figures[:amount_used] - figures[:amount_authorized]
76
+
77
+ displays = figures.transform_keys { |name| :"display_#{name}" }.
78
+ transform_values { |value| Spree::Money.new(value, currency: currency).to_s }
79
+
80
+ { currency: currency }.merge(figures.transform_values(&:to_s)).merge(displays)
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,30 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The merchant's supplier address book. Buying goods in is its own
6
+ # permission resource: `write_stock` moves the stock you have, and must
7
+ # not also mean "may place orders with suppliers".
8
+ class SuppliersController < ResourceController
9
+ scoped_resource :purchasing
10
+
11
+ protected
12
+
13
+ def model_class
14
+ Spree::Supplier
15
+ end
16
+
17
+ def serializer_class
18
+ Spree.api.admin_supplier_serializer
19
+ end
20
+
21
+ def resource_permitted_attributes
22
+ [:name, :contact_name, :email, :phone, :notes,
23
+ :address1, :address2, :city, :state_name, :state_code,
24
+ :country_code, :postal_code, { metadata: {} }]
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -19,7 +19,7 @@ module Spree
19
19
  {
20
20
  'Spree::Product' => 'read_products',
21
21
  'Spree::Order' => 'read_orders',
22
- Spree.user_class.to_s => 'read_customers'
22
+ Spree.customer_class.to_s => 'read_customers'
23
23
  }
24
24
  end
25
25
 
@@ -99,7 +99,7 @@ module Spree
99
99
  # Sourced from `Spree.taggable_types` (registered in
100
100
  # `Spree::Core::Engine`'s after_initialize block). Apps extend the
101
101
  # list in an initializer without overriding this controller:
102
- # Spree.taggable_types << 'MyApp::Vendor'
102
+ # Spree.taggable_types << 'MyApp::Seller'
103
103
  def allowed_taggable_types
104
104
  Spree.taggable_types
105
105
  end
@@ -14,6 +14,10 @@ module Spree
14
14
  def serializer_class
15
15
  Spree.api.admin_tax_category_serializer
16
16
  end
17
+
18
+ def resource_permitted_attributes
19
+ [:name, :tax_code, :description, :is_default]
20
+ end
17
21
  end
18
22
  end
19
23
  end
@@ -0,0 +1,25 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Which tax engines this installation can point a market at, and what
6
+ # each of them cannot do. Discovery rather than CRUD: providers are
7
+ # classes registered in code, not rows — so there is no serializer, and
8
+ # each class describes itself (`to_api_hash`), the same shape
9
+ # `/promotion_rules/types` and `/collection_rules/types` use.
10
+ #
11
+ # The capability list is the point — a merchant selling into US states
12
+ # needs to be told at configuration time that the built-in engine has no
13
+ # local-tax data, rather than discovering it from a tax bill.
14
+ class TaxProvidersController < BaseController
15
+ scoped_resource :settings
16
+
17
+ # GET /api/v3/admin/tax_providers
18
+ def index
19
+ render json: { data: Spree.tax_providers.map { |provider| provider.to_api_hash(current_store) } }
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Tax rates are the whole configuration of the internal tax provider, so
6
+ # these endpoints are how the default engine is set up and inspected.
7
+ class TaxRatesController < ResourceController
8
+ scoped_resource :settings
9
+
10
+ protected
11
+
12
+ def model_class
13
+ Spree::TaxRate
14
+ end
15
+
16
+ def serializer_class
17
+ Spree.api.admin_tax_rate_serializer
18
+ end
19
+
20
+ def collection_includes
21
+ [:tax_category]
22
+ end
23
+
24
+ def permitted_params
25
+ params.permit(*model_additional_permitted_attributes, :name, :amount, :amount_percentage, :included_in_price,
26
+ :show_rate_in_label, :tax_category_id,
27
+ :country_code, :state_code, metadata: {})
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class TrackingCarriersController < ResourceController
6
+ scoped_resource :fulfillments
7
+
8
+ # GET /api/v3/admin/tracking_carriers
9
+ #
10
+ # The registered carriers a tracking number can be pinned to
11
+ # (Spree.tracking_carriers), so the carrier picker renders from the
12
+ # registry — extensions and host apps that add carriers appear
13
+ # without any client change.
14
+ def index
15
+ authorize! :update, Spree::Fulfillment
16
+
17
+ data = Spree.tracking_carriers.map do |slug, carrier|
18
+ { id: slug, name: carrier[:name] }
19
+ end
20
+
21
+ render json: { data: data.sort_by { |carrier| carrier[:name] } }
22
+ end
23
+
24
+ protected
25
+
26
+ def model_class
27
+ Spree::Fulfillment
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -9,18 +9,12 @@ module Spree
9
9
  class TranslatableResourcesController < Admin::BaseController
10
10
  scoped_resource :settings
11
11
 
12
- # Public resource types with a dedicated nested read route
13
- # (`…/:id/translations`). Other registered types are writable via the
14
- # batch endpoint and readable inline (e.g. option values are returned
15
- # as children of an option type), so the dashboard must not GET a
16
- # standalone matrix for them. Keep in sync with the `:translatable`
17
- # route concern mounts in `spree/api/config/routes.rb`.
18
- READABLE_RESOURCE_TYPES = %w[product category option_type].freeze
19
-
20
12
  # GET /api/v3/admin/translatable_resources
21
13
  def index
14
+ readable = readable_resource_types
15
+
22
16
  data = Spree::Translations.registry.map do |entry|
23
- entry.merge('readable' => READABLE_RESOURCE_TYPES.include?(entry['resource_type']))
17
+ entry.merge('readable' => readable.include?(entry['resource_type']))
24
18
  end
25
19
 
26
20
  render json: { data: data }
@@ -28,6 +22,40 @@ module Spree
28
22
 
29
23
  private
30
24
 
25
+ # Public resource types with a dedicated nested read route
26
+ # (`…/:id/translations`). Other registered types are writable via the
27
+ # batch endpoint and readable inline (e.g. option values are returned
28
+ # as children of an option type), so the dashboard must not GET a
29
+ # standalone matrix for them.
30
+ #
31
+ # Derived from the routes rather than restated as a constant: the
32
+ # `:translatable` concern is mounted per resource, and a hand-kept
33
+ # list silently drifts the moment one is added (it had, for
34
+ # collections and policies).
35
+ #
36
+ # @return [Set<String>]
37
+ # Walked once and held on the class: the route set is immutable after
38
+ # boot, and in development the reloader replaces the class itself, so
39
+ # a route change is picked up without a cache to invalidate.
40
+ def readable_resource_types
41
+ self.class.readable_resource_types
42
+ end
43
+
44
+ def self.readable_resource_types
45
+ @readable_resource_types ||=
46
+ Spree::Core::Engine.routes.routes.each_with_object(Set.new) do |route, types|
47
+ next unless route.defaults[:controller] == 'spree/api/v3/admin/translations'
48
+ next unless route.defaults[:action] == 'index'
49
+
50
+ # ".../admin/<segment>/:<segment>_id/translations" — the parent
51
+ # segment is what the registry token has to match.
52
+ segment = route.path.spec.to_s[%r{/([^/]+)/:\w+_id/translations}, 1]
53
+ next if segment.blank?
54
+
55
+ types << segment.singularize
56
+ end
57
+ end
58
+
31
59
  def action_kind
32
60
  'read'
33
61
  end