spree_api 5.6.1 → 6.0.0.beta2

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 (542) 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 +20 -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 +18 -9
  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 +164 -33
  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 +239 -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 +66 -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 +74 -16
  184. data/app/controllers/spree/api/v3/resource_controller.rb +170 -39
  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/actor_serializer.rb +28 -0
  282. data/app/serializers/spree/api/v3/admin/address_serializer.rb +27 -4
  283. data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +13 -10
  284. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +15 -2
  285. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +15 -0
  286. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +34 -0
  287. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +32 -0
  288. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +23 -0
  289. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +48 -0
  290. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +23 -0
  291. data/app/serializers/spree/api/v3/admin/catalog_product_serializer.rb +57 -0
  292. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +38 -0
  293. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +37 -0
  294. data/app/serializers/spree/api/v3/admin/catalog_serializer.rb +46 -0
  295. data/app/serializers/spree/api/v3/admin/category_serializer.rb +3 -2
  296. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +15 -1
  297. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +16 -0
  298. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +21 -0
  299. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +28 -0
  300. data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +22 -0
  301. data/app/serializers/spree/api/v3/admin/collection_serializer.rb +29 -0
  302. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +67 -0
  303. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +69 -0
  304. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +61 -0
  305. data/app/serializers/spree/api/v3/admin/company_invitation_serializer.rb +15 -0
  306. data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +11 -0
  307. data/app/serializers/spree/api/v3/admin/company_serializer.rb +37 -0
  308. data/app/serializers/spree/api/v3/admin/concerns/external_references_attribute.rb +33 -0
  309. data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +28 -0
  310. data/app/serializers/spree/api/v3/admin/country_serializer.rb +2 -2
  311. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -1
  312. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +2 -2
  313. data/app/serializers/spree/api/v3/admin/custom_field_serializer.rb +2 -2
  314. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +23 -22
  315. data/app/serializers/spree/api/v3/admin/dashboard_counter_serializer.rb +24 -0
  316. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +36 -0
  317. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +32 -0
  318. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +66 -1
  319. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +15 -0
  320. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +34 -0
  321. data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +65 -0
  322. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +10 -1
  323. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +20 -0
  324. data/app/serializers/spree/api/v3/admin/delivery_zone_member_serializer.rb +11 -0
  325. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +29 -0
  326. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +59 -0
  327. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -4
  328. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +16 -0
  329. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +34 -0
  330. data/app/serializers/spree/api/v3/admin/export_serializer.rb +20 -1
  331. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +14 -0
  332. data/app/serializers/spree/api/v3/admin/freight_summary_line_serializer.rb +46 -0
  333. data/app/serializers/spree/api/v3/admin/freight_summary_serializer.rb +16 -0
  334. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +39 -0
  335. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +31 -9
  336. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -3
  337. data/app/serializers/spree/api/v3/admin/import_serializer.rb +15 -2
  338. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +32 -0
  339. data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +4 -4
  340. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +46 -5
  341. data/app/serializers/spree/api/v3/admin/market_serializer.rb +5 -1
  342. data/app/serializers/spree/api/v3/admin/media_serializer.rb +50 -2
  343. data/app/serializers/spree/api/v3/admin/membership_product_serializer.rb +29 -0
  344. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +29 -0
  345. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +50 -0
  346. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  347. data/app/serializers/spree/api/v3/admin/order_serializer.rb +126 -31
  348. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +53 -0
  349. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +8 -2
  350. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -0
  351. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +41 -0
  352. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +39 -0
  353. data/app/serializers/spree/api/v3/admin/policy_serializer.rb +11 -0
  354. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +22 -0
  355. data/app/serializers/spree/api/v3/admin/price_list_product_serializer.rb +32 -0
  356. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +20 -8
  357. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -12
  358. data/app/serializers/spree/api/v3/admin/price_serializer.rb +3 -0
  359. data/app/serializers/spree/api/v3/admin/product_serializer.rb +54 -8
  360. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +39 -0
  361. data/app/serializers/spree/api/v3/admin/product_type_custom_field_definition_serializer.rb +44 -0
  362. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +34 -0
  363. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +6 -12
  364. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +17 -15
  365. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +80 -0
  366. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +94 -0
  367. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +27 -0
  368. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +6 -5
  369. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +72 -0
  370. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +16 -0
  371. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +21 -0
  372. data/app/serializers/spree/api/v3/admin/return_serializer.rb +58 -0
  373. data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
  374. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +32 -0
  375. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +37 -0
  376. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +46 -0
  377. data/app/serializers/spree/api/v3/admin/seller_requirement_serializer.rb +68 -0
  378. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +48 -0
  379. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +57 -0
  380. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +92 -0
  381. data/app/serializers/spree/api/v3/admin/seller_team_member_serializer.rb +29 -0
  382. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +53 -0
  383. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +82 -0
  384. data/app/serializers/spree/api/v3/admin/state_serializer.rb +1 -1
  385. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +65 -0
  386. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +20 -4
  387. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +116 -0
  388. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +57 -0
  389. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +48 -0
  390. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +5 -5
  391. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +57 -0
  392. data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +36 -16
  393. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +32 -0
  394. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +42 -7
  395. data/app/serializers/spree/api/v3/admin/store_serializer.rb +65 -1
  396. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +39 -0
  397. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +67 -0
  398. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +43 -0
  399. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +21 -0
  400. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +49 -0
  401. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +49 -8
  402. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +23 -0
  403. data/app/serializers/spree/api/v3/base_serializer.rb +61 -2
  404. data/app/serializers/spree/api/v3/cart_serializer.rb +90 -12
  405. data/app/serializers/spree/api/v3/category_serializer.rb +3 -3
  406. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +50 -0
  407. data/app/serializers/spree/api/v3/claim_reason_serializer.rb +20 -0
  408. data/app/serializers/spree/api/v3/claim_serializer.rb +62 -0
  409. data/app/serializers/spree/api/v3/collection_serializer.rb +41 -0
  410. data/app/serializers/spree/api/v3/company_invitation_serializer.rb +28 -0
  411. data/app/serializers/spree/api/v3/company_membership_serializer.rb +28 -0
  412. data/app/serializers/spree/api/v3/company_serializer.rb +33 -0
  413. data/app/serializers/spree/api/v3/custom_field_serializer.rb +2 -2
  414. data/app/serializers/spree/api/v3/customer_serializer.rb +9 -1
  415. data/app/serializers/spree/api/v3/data_request_event_serializer.rb +30 -0
  416. data/app/serializers/spree/api/v3/data_request_serializer.rb +40 -0
  417. data/app/serializers/spree/api/v3/delivery_method_serializer.rb +12 -2
  418. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +34 -17
  419. data/app/serializers/spree/api/v3/delivery_serializer.rb +29 -0
  420. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +29 -0
  421. data/app/serializers/spree/api/v3/delivery_zone_serializer.rb +13 -0
  422. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +23 -0
  423. data/app/serializers/spree/api/v3/digital_link_serializer.rb +6 -2
  424. data/app/serializers/spree/api/v3/discount_serializer.rb +21 -7
  425. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +53 -0
  426. data/app/serializers/spree/api/v3/exchange_serializer.rb +61 -0
  427. data/app/serializers/spree/api/v3/fee_serializer.rb +27 -0
  428. data/app/serializers/spree/api/v3/freight_summary_serializer.rb +38 -0
  429. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +28 -15
  430. data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
  431. data/app/serializers/spree/api/v3/import_row_serializer.rb +1 -1
  432. data/app/serializers/spree/api/v3/import_serializer.rb +18 -4
  433. data/app/serializers/spree/api/v3/invitation_serializer.rb +1 -1
  434. data/app/serializers/spree/api/v3/line_item_serializer.rb +18 -1
  435. data/app/serializers/spree/api/v3/market_serializer.rb +2 -2
  436. data/app/serializers/spree/api/v3/{asset_serializer.rb → media_event_serializer.rb} +4 -4
  437. data/app/serializers/spree/api/v3/media_serializer.rb +48 -7
  438. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +1 -1
  439. data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
  440. data/app/serializers/spree/api/v3/order_group_serializer.rb +60 -0
  441. data/app/serializers/spree/api/v3/order_serializer.rb +58 -6
  442. data/app/serializers/spree/api/v3/payment_method_serializer.rb +1 -1
  443. data/app/serializers/spree/api/v3/payment_serializer.rb +2 -6
  444. data/app/serializers/spree/api/v3/payment_session_serializer.rb +10 -3
  445. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
  446. data/app/serializers/spree/api/v3/policy_serializer.rb +7 -2
  447. data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
  448. data/app/serializers/spree/api/v3/product_serializer.rb +42 -10
  449. data/app/serializers/spree/api/v3/product_type_serializer.rb +17 -0
  450. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +11 -0
  451. data/app/serializers/spree/api/v3/refund_serializer.rb +9 -3
  452. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +42 -0
  453. data/app/serializers/spree/api/v3/return_reason_serializer.rb +20 -0
  454. data/app/serializers/spree/api/v3/return_serializer.rb +62 -0
  455. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +35 -0
  456. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +21 -0
  457. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +25 -0
  458. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +32 -0
  459. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +59 -0
  460. data/app/serializers/spree/api/v3/seller/delivery_profile_serializer.rb +26 -0
  461. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +35 -0
  462. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +17 -0
  463. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +26 -0
  464. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +29 -0
  465. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +30 -0
  466. data/app/serializers/spree/api/v3/seller/export_serializer.rb +44 -0
  467. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +43 -0
  468. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +76 -0
  469. data/app/serializers/spree/api/v3/seller/import_mapping_serializer.rb +20 -0
  470. data/app/serializers/spree/api/v3/seller/import_row_serializer.rb +17 -0
  471. data/app/serializers/spree/api/v3/seller/import_serializer.rb +77 -0
  472. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +29 -0
  473. data/app/serializers/spree/api/v3/seller/media_serializer.rb +26 -0
  474. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +44 -0
  475. data/app/serializers/spree/api/v3/seller/order_serializer.rb +119 -0
  476. data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +52 -0
  477. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +34 -0
  478. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +36 -0
  479. data/app/serializers/spree/api/v3/seller/policy_serializer.rb +11 -0
  480. data/app/serializers/spree/api/v3/seller/product_serializer.rb +60 -0
  481. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +30 -0
  482. data/app/serializers/spree/api/v3/seller/product_type_serializer.rb +29 -0
  483. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +77 -0
  484. data/app/serializers/spree/api/v3/seller/reason_serializer.rb +24 -0
  485. data/app/serializers/spree/api/v3/seller/requirement_custom_field_serializer.rb +36 -0
  486. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +62 -0
  487. data/app/serializers/spree/api/v3/seller/requirement_submission_serializer.rb +33 -0
  488. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +24 -0
  489. data/app/serializers/spree/api/v3/seller/return_serializer.rb +51 -0
  490. data/app/serializers/spree/api/v3/seller/shipping_label_serializer.rb +23 -0
  491. data/app/serializers/spree/api/v3/seller/stock_level_serializer.rb +27 -0
  492. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +17 -0
  493. data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +15 -0
  494. data/app/serializers/spree/api/v3/seller/team_member_serializer.rb +22 -0
  495. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +49 -0
  496. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +71 -0
  497. data/app/serializers/spree/api/v3/seller_serializer.rb +50 -0
  498. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +11 -0
  499. data/app/serializers/spree/api/v3/{stock_item_serializer.rb → stock_level_serializer.rb} +5 -5
  500. data/app/serializers/spree/api/v3/stock_location_serializer.rb +11 -7
  501. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +8 -15
  502. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +11 -0
  503. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +6 -6
  504. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +29 -0
  505. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +11 -0
  506. data/app/serializers/spree/api/v3/tax_identifier_serializer.rb +15 -0
  507. data/app/serializers/spree/api/v3/tax_line_serializer.rb +37 -0
  508. data/app/serializers/spree/api/v3/variant_serializer.rb +52 -2
  509. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +6 -6
  510. data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
  511. data/app/services/spree/api/v3/filters_aggregator.rb +14 -12
  512. data/app/services/spree/webhooks/deliver_webhook.rb +62 -26
  513. data/app/subscribers/spree/webhook_event_subscriber.rb +9 -5
  514. data/config/brakeman.ignore +1 -1
  515. data/config/initializers/typelizer.rb +51 -4
  516. data/config/locales/en.yml +5 -0
  517. data/config/routes.rb +730 -22
  518. data/lib/spree/api/configuration.rb +19 -19
  519. data/lib/spree/api/dependencies.rb +174 -227
  520. data/lib/spree/api/engine.rb +6 -0
  521. data/lib/spree/api/openapi/schema_helper.rb +179 -13
  522. data/lib/spree/api/testing_support/v3/base.rb +45 -15
  523. data/lib/spree/api.rb +10 -4
  524. data/lib/typelizer/open_enums.rb +35 -0
  525. metadata +342 -27
  526. data/app/controllers/spree/api/v3/admin/orders/adjustments_controller.rb +0 -25
  527. data/app/controllers/spree/api/v3/admin/stock_items_controller.rb +0 -42
  528. data/app/controllers/spree/api/v3/admin/store_credit_categories_controller.rb +0 -21
  529. data/app/controllers/spree/api/v3/store/digitals_controller.rb +0 -38
  530. data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +0 -24
  531. data/app/serializers/spree/api/v3/admin/dashboard_analytics_serializer.rb +0 -143
  532. data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +0 -15
  533. data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +0 -19
  534. data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +0 -34
  535. data/app/serializers/spree/api/v3/admin/store_credit_category_serializer.rb +0 -19
  536. data/app/serializers/spree/api/v3/customer_return_serializer.rb +0 -17
  537. data/app/serializers/spree/api/v3/digital_serializer.rb +0 -17
  538. data/app/serializers/spree/api/v3/reimbursement_serializer.rb +0 -27
  539. data/app/serializers/spree/api/v3/report_serializer.rb +0 -34
  540. data/app/serializers/spree/api/v3/return_authorization_serializer.rb +0 -31
  541. data/app/serializers/spree/api/v3/return_item_serializer.rb +0 -53
  542. data/app/serializers/spree/api/v3/shipping_category_serializer.rb +0 -11
@@ -7,8 +7,8 @@ module Spree
7
7
  # `scope` chain narrows appropriately when we restrict to
8
8
  # `current_store.markets`.
9
9
  #
10
- # `country_isos` and `supported_locales` are accepted as arrays on the
11
- # wire and translated by model setters (`Spree::Market#country_isos=`,
10
+ # `country_codes` and `supported_locales` are accepted as arrays on the
11
+ # wire and translated by model setters (`Spree::Market#country_codes=`,
12
12
  # `#supported_locales=`).
13
13
  class MarketsController < ResourceController
14
14
  scoped_resource :settings
@@ -24,14 +24,18 @@ module Spree
24
24
  end
25
25
 
26
26
  def collection_includes
27
- [:countries]
27
+ [:market_countries]
28
+ end
29
+
30
+ def scope
31
+ super.ordered
28
32
  end
29
33
 
30
34
  def permitted_params
31
35
  normalize_params(
32
36
  params.permit(
33
- :name, :currency, :default_locale, :tax_inclusive,
34
- :default, :position, supported_locales: [], country_isos: []
37
+ :name, :currency, :default_locale, :tax_inclusive, :tax_provider,
38
+ :default, :position, supported_locales: [], country_codes: []
35
39
  )
36
40
  )
37
41
  end
@@ -3,6 +3,8 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class MeController < Admin::BaseController
6
+ include Spree::Api::V3::PermissionSerialization
7
+
6
8
  skip_scope_check!
7
9
 
8
10
  before_action :require_current_user!
@@ -63,39 +65,11 @@ module Spree
63
65
  def me_response
64
66
  {
65
67
  user: admin_user_serializer.new(current_user, params: serializer_params).to_h,
66
- permissions: serialize_permissions(current_ability)
68
+ permissions: serialize_permissions(current_ability),
69
+ permission_keys: serialize_permission_keys(current_ability)
67
70
  }
68
71
  end
69
72
 
70
- # Serializes CanCanCan's rules into a flat, JSON-safe list of permission rules.
71
- #
72
- # - Rule order is preserved so the frontend matcher can apply
73
- # CanCanCan's "last matching rule wins" semantics.
74
- # - Per-record conditions are NOT serialized (they often reference
75
- # scopes or blocks that don't translate to JSON). The frontend
76
- # receives `has_conditions: true` as a hint that the action might
77
- # be denied at the per-record level — in practice the SPA shows
78
- # the action optimistically and handles 403 from the API.
79
- def serialize_permissions(ability)
80
- ability.send(:rules).map do |rule|
81
- {
82
- allow: rule.base_behavior,
83
- actions: Array(rule.actions).map(&:to_s),
84
- subjects: Array(rule.subjects).map { |s| s.is_a?(Class) ? s.name : s.to_s },
85
- has_conditions: rule_has_conditions?(rule)
86
- }
87
- end
88
- end
89
-
90
- def rule_has_conditions?(rule)
91
- return true if rule.block.present?
92
- conditions = rule.conditions
93
- return false if conditions.nil?
94
- return !conditions.empty? if conditions.respond_to?(:empty?)
95
-
96
- true
97
- end
98
-
99
73
  def admin_user_serializer
100
74
  Spree.api.admin_admin_user_serializer
101
75
  end
@@ -6,111 +6,161 @@ module Spree
6
6
  scoped_resource :products
7
7
 
8
8
  def create
9
- if permitted_params[:url].present?
9
+ # An external video has no file, so it takes the plain create path
10
+ # even though a URL is present — `url` means "fetch this image from
11
+ # here" and only applies to image rows.
12
+ if permitted_params[:source_media_id].present?
13
+ create_from_library
14
+ elsif permitted_params[:url].present? && !external_video_request?
10
15
  create_from_url
11
16
  elsif permitted_params[:signed_id].present?
12
17
  create_from_signed_id
13
18
  else
14
- @resource = build_resource
15
- authorize_resource!(@resource, :create)
16
-
17
- if @resource.save
18
- render json: serialize_resource(@resource), status: :created
19
- else
20
- render_validation_error(@resource.errors)
21
- end
19
+ authorize_and_create(build_resource)
22
20
  end
23
21
  end
24
22
 
25
23
  protected
26
24
 
25
+ # `url` and `signed_id` say how to *fetch* the bytes; neither is an
26
+ # attribute on the row. A re-synced asset already has its file, so
27
+ # the replay only carries them as leftovers from the create shape.
28
+ def normalize_upsert_params!
29
+ params.delete(:url)
30
+ params.delete(:signed_id)
31
+ end
32
+
27
33
  def model_class
28
- Spree::Asset
34
+ Spree::Media
29
35
  end
30
36
 
31
37
  def serializer_class
32
38
  Spree.api.admin_media_serializer
33
39
  end
34
40
 
41
+ # A product's gallery is part of the product: authorizing the product
42
+ # here is the whole check, and the per-record hook stays a no-op so a
43
+ # media key is never required to manage a product's own pictures.
44
+ # The media keys govern the library.
45
+ def authorize_resource!(resource = @resource, action = action_name.to_sym); end
46
+
35
47
  def set_parent
36
48
  @product = current_store.products.find_by_prefix_id!(params[:product_id])
37
49
  authorize!(:update, @product)
38
50
 
39
51
  @parent = if params[:variant_id].present?
40
- @product.variants_including_master.find_by_prefix_id!(params[:variant_id])
52
+ @product.variants.find_by_prefix_id!(params[:variant_id])
41
53
  else
42
54
  @product
43
55
  end
44
56
  end
45
57
 
46
58
  # Variants store assets via the polymorphic `images` association; products own
47
- # their gallery via `media`. Both resolve to `Spree::Asset` rows with different
59
+ # their gallery via `media`. Both resolve to `Spree::Media` rows with different
48
60
  # `viewable_type` values.
49
61
  def parent_association
50
62
  params[:variant_id].present? ? :images : :media
51
63
  end
52
64
 
53
65
  # For product-scoped listings we surface BOTH product-level assets and any
54
- # legacy master-pinned assets, so existing data keeps showing up while
55
- # merchants migrate. New uploads land on `Spree::Product` (see #set_parent).
66
+ # legacy assets still pinned to the default variant, so existing data keeps
67
+ # showing up while merchants migrate. New uploads land on `Spree::Product`
68
+ # (see #set_parent).
56
69
  def scope
57
70
  return super if params[:variant_id].present?
58
71
 
59
- Spree::Asset.where(
72
+ Spree::Media.where(
60
73
  viewable_type: 'Spree::Product', viewable_id: @product.id
61
74
  ).or(
62
- Spree::Asset.where(
63
- viewable_type: 'Spree::Variant', viewable_id: @product.master&.id
75
+ Spree::Media.where(
76
+ viewable_type: 'Spree::Variant', viewable_id: @product.default_variant&.id
64
77
  )
65
78
  ).order(:position)
66
79
  end
67
80
 
68
- ALLOWED_MEDIA_TYPES = -> { [Spree::Asset, *Spree::Asset.descendants].map(&:name).to_set.freeze }
69
-
70
81
  def build_resource
71
- media_type = permitted_params[:type] || 'Spree::Image'
72
-
73
- unless ALLOWED_MEDIA_TYPES.call.include?(media_type)
74
- raise ArgumentError, "Invalid media type: #{media_type}"
75
- end
76
-
77
- media = @parent.send(parent_association).build(permitted_params.except(:type, :url, :signed_id))
78
- media.type = media_type
82
+ @parent.send(parent_association).build(media_attributes)
83
+ end
79
84
 
80
- media
85
+ # Everything the client sent minus the transport keys — a direct file,
86
+ # the URL to fetch one from, and the library row to copy are ways of
87
+ # getting at a file, not attributes of the row. Leaving `attachment`
88
+ # in let a request carrying it alongside `source_media_id` overwrite
89
+ # the shared blob with an upload, defeating the reuse.
90
+ def media_attributes
91
+ permitted_params.except(:attachment, :url, :signed_id, :source_media_id)
81
92
  end
82
93
 
94
+ # The media file, a URL to fetch one from, and the library row to copy
95
+ # are transport, not attributes — everything a client can set lives on
96
+ # the model.
83
97
  def permitted_params
84
- params.permit(:type, :alt, :position, :attachment, :url, :signed_id, variant_ids: [])
98
+ params.permit(
99
+ *model_additional_permitted_attributes,
100
+ *Spree::Media::WRITABLE_ATTRIBUTES,
101
+ :attachment, :url, :signed_id, :source_media_id,
102
+ variant_ids: []
103
+ )
85
104
  end
86
105
 
87
- def create_from_url
88
- authorize!(:create, Spree::Asset)
106
+ def external_video_request?
107
+ permitted_params[:media_type] == 'external_video'
108
+ end
89
109
 
110
+ def create_from_url
90
111
  url = permitted_params[:url]
91
112
  position = permitted_params[:position]
92
113
 
114
+ # The job runs later, so the identities the connector sent ride
115
+ # along and are written on the media once it exists. All of them:
116
+ # a DAM and a PIM may both name the same asset.
117
+ references = external_reference_params.map { |entry| entry.transform_keys(&:to_s) }
118
+ references = references.presence
119
+
93
120
  Spree::Images::SaveFromUrlJob.perform_later(
94
121
  @parent.id,
95
122
  @parent.class.name,
96
123
  url,
97
- nil,
124
+ references,
98
125
  position
99
126
  )
100
127
 
101
128
  head :accepted
102
129
  end
103
130
 
131
+ # Places a file already in the library onto this product or variant.
132
+ # The copy shares the source's blob, so nothing is uploaded and no
133
+ # rendition is regenerated; it gets its own alt, position and variant
134
+ # links from there on.
135
+ #
136
+ # The source is fetched through the store's own library, so a media id
137
+ # belonging to another store reads as a 404 rather than copying a
138
+ # file across the tenancy boundary.
139
+ def create_from_library
140
+ source = current_store.media.find_by_prefix_id!(permitted_params[:source_media_id])
141
+
142
+ @resource = source.duplicate_for(@parent)
143
+ # Anything the client sent alongside the source wins over what was
144
+ # copied, so a merchant can place a file and correct its alt text
145
+ # for the new context in one request.
146
+ @resource.assign_attributes(media_attributes)
147
+
148
+ authorize_and_create(@resource)
149
+ end
150
+
104
151
  def create_from_signed_id
105
152
  @resource = build_resource
106
153
  @resource.attachment.attach(permitted_params[:signed_id])
107
- authorize_resource!(@resource, :create)
108
154
 
109
- if @resource.save
110
- render json: serialize_resource(@resource), status: :created
111
- else
112
- render_validation_error(@resource.errors)
113
- end
155
+ authorize_and_create(@resource)
156
+ end
157
+
158
+ # The common tail of every create branch. Wraps the base class's
159
+ # save_and_render with the per-record authorization the branches
160
+ # share, since each builds its record a different way.
161
+ def authorize_and_create(media)
162
+ authorize_resource!(media, :create)
163
+ save_and_render(media, status: :created)
114
164
  end
115
165
  end
116
166
  end
@@ -0,0 +1,156 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The media library: every file in the store, whether or not it has been
6
+ # placed on a product yet.
7
+ #
8
+ # Subclasses the product-scoped media controller for its create
9
+ # branches, but drops the parent: a row created here has no viewable,
10
+ # which is what makes uploading before deciding where a file goes
11
+ # possible. Putting a file ON a product is the nested controller's job —
12
+ # POST that product's media with this row's id as `source_media_id`.
13
+ #
14
+ # `source_media_id` works here too, and means "copy this file into the
15
+ # library again" — an unplaced row sharing the original's blob.
16
+ class MediaLibraryController < MediaController
17
+ # The library reaches across products, categories and collections, so
18
+ # it is not a product endpoint. The nested gallery routes keep
19
+ # `products` — those are one product's own media, reached through a
20
+ # product the caller can already see.
21
+ scoped_resource :media
22
+ # Restates the base class's member actions with `usage` added — a
23
+ # second `before_action :set_resource` would replace that filter
24
+ # rather than extend it, leaving show/update/destroy without a record.
25
+ before_action :set_resource, only: %i[show update destroy usage]
26
+
27
+ # Deleting from the library means deleting the file. A file still in
28
+ # use needs the caller to say so — `detach=true`, which the dashboard
29
+ # sends after a confirmation showing the places — and then the file
30
+ # is removed from all of them in one pass. Without it the delete is
31
+ # refused with the usage list, so an API client can't take a file out
32
+ # from under a catalog by accident. Removing a file from one
33
+ # product's gallery is the nested endpoint's destroy, which stays
34
+ # unguarded: that is removing a placement, not the file.
35
+ def destroy
36
+ references = Spree::Media::Usage.call(media: @resource).value
37
+ return super if references.empty?
38
+
39
+ unless detach_requested?
40
+ return render_error(
41
+ code: ERROR_CODES[:resource_invalid],
42
+ message: Spree.t(
43
+ 'api.errors.media_in_use',
44
+ places: references.filter_map(&:name).uniq.first(5).to_sentence
45
+ ),
46
+ status: :unprocessable_content,
47
+ details: { usage: references.map { |reference| reference_payload(reference) } }
48
+ )
49
+ end
50
+
51
+ result = Spree::Media::Destroy.call(media: @resource)
52
+ return head :no_content if result.success?
53
+
54
+ # A rolled-back delete carries no validation errors, so
55
+ # render_service_error would produce an empty message.
56
+ render_error(
57
+ code: ERROR_CODES[:processing_error],
58
+ message: Spree.t('api.errors.media_not_deleted'),
59
+ status: :unprocessable_content
60
+ )
61
+ end
62
+
63
+ # Where this file is in use — other products it has been placed on,
64
+ # plain image fields sharing it, and descriptions embedding it. What
65
+ # the dashboard shows before a merchant deletes something.
66
+ def usage
67
+ references = Spree::Media::Usage.call(media: @resource).value
68
+
69
+ render json: { data: references.map { |reference| reference_payload(reference) } }
70
+ end
71
+
72
+ protected
73
+
74
+ def detach_requested?
75
+ ActiveModel::Type::Boolean.new.cast(params[:detach])
76
+ end
77
+
78
+ def reference_payload(reference)
79
+ {
80
+ kind: reference.kind,
81
+ name: reference.name,
82
+ owner_type: reference.owner_type,
83
+ owner_id: reference.owner_id,
84
+ field: reference.field
85
+ }
86
+ end
87
+
88
+ # Reading where a file is used is reading the file, for the key gate
89
+ # and for CanCanCan alike. The latter needs saying twice: `read_actions`
90
+ # settles the required API-key scope, while this maps the action onto
91
+ # an ability a role actually grants — CanCanCan's `:read` alias covers
92
+ # only index and show, so a staffer with read access would otherwise
93
+ # be refused.
94
+ def read_actions
95
+ super + %w[usage]
96
+ end
97
+
98
+ # The library authorizes the media record itself; the product-nested
99
+ # controller authorizes its product instead, so this restores the
100
+ # per-record check its no-op skips. `usage` maps to `:show` because
101
+ # CanCanCan's `:read` alias covers only index and show.
102
+ def authorize_resource!(resource = @resource, action = action_name.to_sym)
103
+ authorize!(action == :usage ? :show : action, resource || Spree::Media)
104
+ end
105
+
106
+ # No parent to resolve. The library is the store's own collection, so
107
+ # tenancy comes from the store_id on the rows themselves rather than
108
+ # from a product two hops away.
109
+ def set_parent
110
+ @parent = nil
111
+ end
112
+
113
+ # The listing shows one row per file; member actions resolve any row.
114
+ #
115
+ # Reuse shares a blob across rows, so a picture placed on three
116
+ # products is three rows of the same image — the library shows files,
117
+ # and `usage` says where each one appears. But a row the grouping
118
+ # hides is still a real record a client may hold the id of, so
119
+ # narrowing every lookup would 404 it on show or destroy.
120
+ # The library has no parent, so this is the one media endpoint where
121
+ # the admin base's `accessible_by` would apply — a role's
122
+ # record-level rules must still filter it. `super` is skipped
123
+ # deliberately: the parent controller's scope reads @product, which
124
+ # a library request does not have.
125
+ def scope
126
+ media = current_store.media
127
+ .accessible_by(current_ability, ability_action_for_request)
128
+ .order(created_at: :desc)
129
+ listing? ? media.distinct_by_file : media
130
+ end
131
+
132
+ def listing?
133
+ action_name == 'index'
134
+ end
135
+
136
+ # A library row is born unplaced. `viewable` stays nil until someone
137
+ # copies the file onto a product.
138
+ def build_resource
139
+ current_store.media.build(media_attributes)
140
+ end
141
+
142
+ # There is no product to fetch into, so the URL import job — which
143
+ # takes a viewable — has nothing to target. A merchant importing by
144
+ # URL does it from the product they are filling.
145
+ def create_from_url
146
+ render_error(
147
+ code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:resource_invalid],
148
+ message: Spree.t('api.errors.media_url_import_requires_product'),
149
+ status: :unprocessable_content
150
+ )
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
@@ -21,6 +21,7 @@ module Spree
21
21
 
22
22
  def permitted_params
23
23
  params.permit(
24
+ *model_additional_permitted_attributes,
24
25
  :name, :label, :position, :filterable, :kind,
25
26
  option_values: [
26
27
  :id, :name, :label, :position, :color_code, :image
@@ -0,0 +1,25 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class OrderCancellationReasonsController < ResourceController
6
+ scoped_resource :settings
7
+
8
+ protected
9
+
10
+ def model_class
11
+ Spree::OrderCancellationReason
12
+ end
13
+
14
+ def serializer_class
15
+ Spree.api.admin_order_cancellation_reason_serializer
16
+ end
17
+
18
+ def permitted_params
19
+ params.permit(*model_additional_permitted_attributes, :name, :active)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,43 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The multi-order transaction container — what a customer bought in one
6
+ # checkout when it was fulfilled by more than one seller.
7
+ #
8
+ # Read-only, enforced by the routes: a group records a checkout that
9
+ # already happened, and everything an operator can act on lives on the
10
+ # orders inside it or on the payment it holds.
11
+ class OrderGroupsController < ResourceController
12
+ scoped_resource :orders
13
+
14
+ protected
15
+
16
+ def model_class
17
+ Spree::OrderGroup
18
+ end
19
+
20
+ def serializer_class
21
+ Spree.api.admin_order_group_serializer
22
+ end
23
+
24
+ def scope
25
+ super.where(store_id: current_store.id)
26
+ end
27
+
28
+ # Everything both serializers touch. The group's figures are summed
29
+ # from its children and its payments are rendered in full, so a page
30
+ # of groups that did not preload them would issue a query per row for
31
+ # each.
32
+ def collection_includes
33
+ [
34
+ :customer, :ship_address, :bill_address,
35
+ { payments: %i[payment_method source] },
36
+ { orders: %i[market gift_card] }
37
+ ]
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -30,7 +30,7 @@ module Spree
30
30
  end
31
31
 
32
32
  def permitted_params
33
- params.permit(:type, :active, :position, preferences: {})
33
+ params.permit(*model_additional_permitted_attributes, :type, :active, :position, preferences: {})
34
34
  end
35
35
 
36
36
  # `types` is read-only discovery — maps to the read scope + :show ability.
@@ -0,0 +1,56 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module Orders
6
+ # Claims on a completed order.
7
+ class ClaimsController < BaseController
8
+ include Spree::Api::V3::Orders::ClaimActions
9
+
10
+ # Claims are a subject of the `orders` catalog resource, so
11
+ # `read_orders`/`write_orders` gate these endpoints. `:claims`
12
+ # would name a key no catalog knows.
13
+ scoped_resource :orders
14
+
15
+ before_action :set_resource, only: [:show, :update, :approve, :resolve, :deny, :cancel]
16
+
17
+ # PATCH /api/v3/admin/orders/:order_id/claims/:id
18
+ #
19
+ # Editable fields only — status moves through the member actions.
20
+ def update
21
+ if @resource.update(permitted_params)
22
+ render json: serialize_resource(@resource.reload)
23
+ else
24
+ render_validation_error(@resource.errors)
25
+ end
26
+ end
27
+
28
+ protected
29
+
30
+ def serializer_class
31
+ Spree.api.admin_claim_serializer
32
+ end
33
+
34
+ def collection_includes
35
+ [:reason, { claim_line_items: [:variant, :replacement_variant] }]
36
+ end
37
+
38
+ def permitted_params
39
+ params.permit(:memo, :reason_id, metadata: {})
40
+ end
41
+
42
+ private
43
+
44
+ # The whole store's catalogue: an operator may promise anything
45
+ # the store sells as a replacement.
46
+ def replacement_variant_for(variant_id)
47
+ return nil if variant_id.blank?
48
+
49
+ current_store.variants.find_by_prefix_id!(variant_id)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,66 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module Orders
6
+ # The consignments of one fulfillment, under
7
+ # /orders/:order_id/fulfillments/:fulfillment_id/deliveries.
8
+ #
9
+ # CRUD lives in the shared concern; what is here is the store-wide
10
+ # scope and the one action only an operator has. The
11
+ # fulfillment-level mark_delivered stays beside it for parcels that
12
+ # have no delivery row at all.
13
+ class DeliveriesController < BaseController
14
+ include Spree::Api::V3::Orders::DeliveryActions
15
+
16
+ before_action :set_resource, only: [:show, :update, :destroy, :mark_delivered]
17
+
18
+ # PATCH .../deliveries/:id/mark_delivered — staff saying this one
19
+ # consignment arrived; the fulfillment follows once every
20
+ # consignment has.
21
+ def mark_delivered
22
+ with_order_lock do
23
+ result = Spree.delivery_update_tracking_workflow.call(
24
+ delivery: @resource,
25
+ tracking_status: 'delivered',
26
+ delivered_at: mark_delivered_params[:delivered_at],
27
+ notify_customer: notify_customer?(mark_delivered_params[:notify_customer])
28
+ )
29
+
30
+ if result.success?
31
+ render json: serialize_resource(result.value)
32
+ else
33
+ render_result_error(result)
34
+ end
35
+ end
36
+ end
37
+
38
+ protected
39
+
40
+ def serializer_class
41
+ Spree.api.admin_delivery_serializer
42
+ end
43
+
44
+ # The consignments hang off the fulfillment, not the order, so
45
+ # the parent is narrowed one step past the base's.
46
+ def set_parent
47
+ super
48
+ @parent = @order.fulfillments.find_by_prefix_id!(params[:fulfillment_id])
49
+ end
50
+
51
+ private
52
+
53
+ def mark_delivered_params
54
+ @mark_delivered_params ||= params.permit(:delivered_at, :notify_customer)
55
+ end
56
+
57
+ # Only an explicit false suppresses the email.
58
+ def notify_customer?(value)
59
+ !ActiveModel::Type::Boolean.new.cast(value).equal?(false)
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end