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
@@ -6,18 +6,51 @@ module Spree
6
6
  # Full product data including admin-only fields
7
7
  # Extends the store serializer with additional attributes
8
8
  class ProductSerializer < V3::ProductSerializer
9
+ include Concerns::ExternalReferencesAttribute
10
+
9
11
  include Spree::Api::V3::Admin::Translatable
10
12
 
11
- typelize status: :string,
13
+ typelize status: [:string, enum: Spree::Product.statuses, enum_type_name: 'ProductStatus'],
12
14
  tax_category_id: [:string, nullable: true],
15
+ product_type_id: [:string, nullable: true],
16
+ delivery_profile_id: [:string, nullable: true],
17
+ seller_name: [:string, nullable: true],
13
18
  price: ['Price', nullable: true],
14
19
  deleted_at: [:string, nullable: true],
15
- metadata: 'Record<string, unknown>'
20
+ metadata: 'Record<string, unknown>',
21
+ submission: ['ProductSubmission', nullable: true]
16
22
 
17
23
  attributes :status,
18
24
  :metadata, deleted_at: :iso8601,
19
25
  created_at: :iso8601, updated_at: :iso8601
20
26
 
27
+ attribute :delivery_profile_id do |product|
28
+ product.delivery_profile&.prefixed_id
29
+ end
30
+
31
+ # The live row in the review trail: who submitted, who decided,
32
+ # when, and what the seller was told. Expanded rather than always
33
+ # sent — it is a per-product query that the index has no use for.
34
+ one :latest_submission,
35
+ key: :submission,
36
+ resource: proc { Spree.api.admin_product_submission_serializer },
37
+ if: proc { expand?('submission') }
38
+
39
+ # `seller_id` comes from the store serializer. The name rides along
40
+ # so the products list can show who sells a row without expanding —
41
+ # the full profile is `?expand=seller`.
42
+ attribute :seller_name do |product|
43
+ product.seller&.name
44
+ end
45
+
46
+ one :seller,
47
+ resource: proc { Spree.api.admin_seller_serializer },
48
+ if: proc { expand?('seller') }
49
+
50
+ attribute :product_type_id do |product|
51
+ product.product_type&.prefixed_id
52
+ end
53
+
21
54
  attribute :tax_category_id do |product|
22
55
  product.tax_category&.prefixed_id
23
56
  end
@@ -55,6 +88,12 @@ module Spree
55
88
  resource: proc { Spree.api.admin_media_serializer },
56
89
  if: proc { expand?('media') }
57
90
 
91
+ # Read/write symmetry: the product accepts inline `digital_assets` on
92
+ # create, so it exposes them (opt-in via ?expand=digital_assets).
93
+ many :digital_assets,
94
+ resource: proc { Spree.api.admin_digital_asset_serializer },
95
+ if: proc { expand?('digital_assets') }
96
+
58
97
  many :option_types,
59
98
  resource: proc { Spree.api.admin_option_type_serializer },
60
99
  if: proc { expand?('option_types') }
@@ -63,16 +102,19 @@ module Spree
63
102
  resource: proc { Spree.api.admin_option_value_serializer },
64
103
  if: proc { expand?('option_values') }
65
104
 
66
- many :taxons,
67
- proc { |taxons, params|
68
- taxons.select { |t| t.taxonomy.store_id == params[:store].id }
105
+ many :categories,
106
+ proc { |categories, params|
107
+ store_id = params[:store].id
108
+ categories.select { |c| c.store_id == store_id }
69
109
  },
70
- key: :categories,
71
110
  resource: proc { Spree.api.admin_category_serializer },
72
111
  if: proc { expand?('categories') }
73
112
 
74
- many :metafields,
75
- key: :custom_fields,
113
+ many :collections,
114
+ resource: proc { Spree.api.admin_collection_serializer },
115
+ if: proc { expand?('collections') }
116
+
117
+ many :custom_fields,
76
118
  resource: proc { Spree.api.admin_custom_field_serializer },
77
119
  if: proc { expand?('custom_fields') }
78
120
 
@@ -83,6 +125,10 @@ module Spree
83
125
  many :channels,
84
126
  resource: proc { Spree.api.admin_channel_serializer },
85
127
  if: proc { expand?('channels') }
128
+
129
+ one :product_type,
130
+ resource: proc { Spree.api.admin_product_type_serializer },
131
+ if: proc { expand?('product_type') }
86
132
  end
87
133
  end
88
134
  end
@@ -0,0 +1,39 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # A seller's request to put a product on sale, and what the
6
+ # marketplace made of it. Extends the seller's own view with who
7
+ # decided — the part only the operator sees.
8
+ class ProductSubmissionSerializer < V3::Seller::ProductSubmissionSerializer
9
+ typelize submitted_by_id: [:string, nullable: true],
10
+ reviewed_by_id: [:string, nullable: true],
11
+ reviewed_by_name: [:string, nullable: true],
12
+ auto_approved: :boolean,
13
+ metadata: 'Record<string, unknown> | null'
14
+
15
+ attributes :metadata, updated_at: :iso8601
16
+
17
+ attribute :submitted_by_id do |submission|
18
+ submission.submitted_by&.prefixed_id
19
+ end
20
+
21
+ attribute :reviewed_by_id do |submission|
22
+ submission.reviewed_by&.prefixed_id
23
+ end
24
+
25
+ # An operator reading the trail wants a name, not an id to resolve.
26
+ attribute :reviewed_by_name do |submission|
27
+ submission.reviewed_by&.name
28
+ end
29
+
30
+ # Distinguishes "the store approves listings automatically" from a
31
+ # decision whose author we failed to record.
32
+ attribute :auto_approved do |submission|
33
+ submission.auto_approved?
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,44 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # A custom field definition as used by one product type: the definition's
6
+ # own schema fields, plus how this type uses it (required, sort order).
7
+ #
8
+ # `id` is the definition's prefixed id (`cfdef_…`), not the join row's —
9
+ # that is what clients send back on PATCH.
10
+ class ProductTypeCustomFieldDefinitionSerializer < BaseSerializer
11
+ typelize id: :string,
12
+ key: :string,
13
+ namespace: :string,
14
+ label: :string,
15
+ field_type: Spree::CustomField::FIELD_TYPE_TOKENS,
16
+ required: :boolean,
17
+ sort_order: :number
18
+
19
+ attribute :id do |join|
20
+ join.custom_field_definition.prefixed_id
21
+ end
22
+
23
+ attribute :key do |join|
24
+ join.custom_field_definition.key
25
+ end
26
+
27
+ attribute :namespace do |join|
28
+ join.custom_field_definition.namespace
29
+ end
30
+
31
+ attribute :label do |join|
32
+ join.custom_field_definition.label
33
+ end
34
+
35
+ attribute :field_type do |join|
36
+ join.custom_field_definition.field_type
37
+ end
38
+
39
+ attributes :required, :sort_order
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,34 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class ProductTypeSerializer < V3::ProductTypeSerializer
6
+ include Spree::Api::V3::Admin::Translatable
7
+
8
+ typelize delivery_profile_id: [:string, nullable: true],
9
+ products_count: :number,
10
+ option_type_ids: [:string, multi: true],
11
+ category_ids: [:string, multi: true]
12
+
13
+ attributes :products_count,
14
+ created_at: :iso8601, updated_at: :iso8601
15
+
16
+ # The creation-time template: stamped onto products at creation,
17
+ # never synced afterwards.
18
+ attribute :delivery_profile_id do |record|
19
+ record.delivery_profile&.prefixed_id
20
+ end
21
+
22
+ # Prefixed ids of the option types and categories this type seeds onto
23
+ # new products — the same payload the client sends back on PATCH.
24
+ attribute :option_type_ids, &:option_type_prefixed_ids
25
+ attribute :category_ids, &:category_prefixed_ids
26
+
27
+ many :product_type_custom_field_definitions,
28
+ key: :custom_field_definitions,
29
+ resource: proc { Spree.api.admin_product_type_custom_field_definition_serializer }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -9,12 +9,11 @@ module Spree
9
9
  # single component can render any subclass — `preferences` is the
10
10
  # current value hash, `preference_schema` describes its fields.
11
11
  class PromotionActionSerializer < BaseSerializer
12
- typelize type: :string,
12
+ typelize type: [:string, comment: 'Action type. Built-in: create_adjustment, create_item_adjustments, create_line_items, free_shipping. Extensions may register more.'],
13
13
  promotion_id: :string,
14
14
  preferences: 'Record<string, unknown>',
15
- preference_schema: "Array<{ key: string; type: string; default: unknown }>",
16
- label: :string,
17
- calculator: "{ type: string; label: string; preferences: Record<string, unknown>; preference_schema: Array<{ key: string; type: string; default: unknown }> } | null",
15
+ preference_schema: "Array<{ key: string; type: string; default: unknown; choices?: string[] }>",
16
+ calculator: "{ type: string; preferences: Record<string, unknown>; preference_schema: Array<{ key: string; type: string; default: unknown }> } | null",
18
17
  line_items: 'Array<{ variant_id: string; quantity: number }> | null'
19
18
 
20
19
  attributes created_at: :iso8601, updated_at: :iso8601
@@ -30,22 +29,17 @@ module Spree
30
29
  attribute :preferences, &:serialized_preferences
31
30
  attribute :preference_schema, &:serialized_preference_schema
32
31
 
33
- attribute :label do |action|
34
- action.respond_to?(:human_name) ? action.human_name : action.type.to_s.demodulize
35
- end
36
-
37
32
  # Calculator is exposed as a nested object so the SPA can render
38
33
  # the calculator picker + its own preference fields. Null for
39
- # actions that don't include CalculatedAdjustments. The SPA
40
- # formats the row summary itself off `label` + `preferences`
41
- # see the action-summary helper in the admin promotion editor.
34
+ # actions that don't include CalculatedAdjustments. The SPA names
35
+ # the calculator from its `type` and formats the row summary off
36
+ # `preferences` — see the action-summary helper in the promotion editor.
42
37
  attribute :calculator do |action|
43
38
  next nil unless action.respond_to?(:calculator) && action.calculator
44
39
 
45
40
  calc = action.calculator
46
41
  {
47
42
  type: calc.class.api_type,
48
- label: calc.class.respond_to?(:description) ? calc.class.description : calc.class.to_s.demodulize.titleize,
49
43
  preferences: calc.serialized_preferences,
50
44
  preference_schema: calc.serialized_preference_schema
51
45
  }
@@ -8,14 +8,14 @@ module Spree
8
8
  # admin promotion editor. Same shape as PromotionAction so the
9
9
  # frontend renders both with the same generic component.
10
10
  class PromotionRuleSerializer < BaseSerializer
11
- typelize type: :string,
11
+ typelize type: [:string, comment: 'Rule type. Built-in: currency, country, channel, market, item_total, product, customer, customer_group, first_order, customer_logged_in, one_use_per_user, category, option_value. Extensions may register more.'],
12
12
  promotion_id: :string,
13
13
  preferences: 'Record<string, unknown>',
14
- preference_schema: "Array<{ key: string; type: string; default: unknown }>",
15
- label: :string,
14
+ preference_schema: "Array<{ key: string; type: string; default: unknown; choices?: string[] }>",
16
15
  product_ids: 'Array<string> | null',
17
16
  category_ids: 'Array<string> | null',
18
- customer_ids: 'Array<string> | null'
17
+ customer_ids: 'Array<string> | null',
18
+ option_value_ids: 'Array<string> | null'
19
19
 
20
20
  attributes created_at: :iso8601, updated_at: :iso8601
21
21
 
@@ -30,10 +30,6 @@ module Spree
30
30
  attribute :preferences, &:serialized_preferences
31
31
  attribute :preference_schema, &:serialized_preference_schema
32
32
 
33
- attribute :label do |rule|
34
- rule.respond_to?(:human_name) ? rule.human_name : rule.class.to_s.demodulize
35
- end
36
-
37
33
  # Association IDs for rules that wire products/taxons/users through
38
34
  # join tables. Returned as prefixed IDs to match the rest of the
39
35
  # API; null on rules that don't have the association. The matching
@@ -45,13 +41,17 @@ module Spree
45
41
  end
46
42
 
47
43
  attribute :category_ids do |rule|
48
- rule.taxons.map(&:prefixed_id) if rule.respond_to?(:taxons)
44
+ rule.categories.map(&:prefixed_id) if rule.respond_to?(:categories)
49
45
  end
50
46
 
51
47
  attribute :customer_ids do |rule|
52
48
  rule.users.map(&:prefixed_id) if rule.respond_to?(:users)
53
49
  end
54
50
 
51
+ attribute :option_value_ids do |rule|
52
+ rule.option_values.map(&:prefixed_id) if rule.respond_to?(:option_values)
53
+ end
54
+
55
55
  # Embed the related records so promotion-row summaries can render
56
56
  # names + extra info without a separate fetch. Rules that don't
57
57
  # carry a given collection (e.g. an ItemTotal rule has no
@@ -61,15 +61,13 @@ module Spree
61
61
  resource: proc { Spree.api.admin_product_serializer },
62
62
  if: proc { |rule| rule.respond_to?(:products) }
63
63
 
64
- many :taxons,
65
- key: :categories,
64
+ many :categories,
66
65
  resource: proc { Spree.api.admin_category_serializer },
67
- if: proc { |rule| rule.respond_to?(:taxons) }
66
+ if: proc { |rule| rule.respond_to?(:categories) }
68
67
 
69
- many :users,
70
- key: :customers,
68
+ many :customers,
71
69
  resource: proc { Spree.api.admin_customer_serializer },
72
- if: proc { |rule| rule.respond_to?(:users) }
70
+ if: proc { |rule| rule.respond_to?(:customers) }
73
71
 
74
72
  many :customer_groups,
75
73
  resource: proc { Spree.api.admin_customer_group_serializer },
@@ -86,6 +84,10 @@ module Spree
86
84
  many :markets,
87
85
  resource: Spree.api.admin_market_serializer,
88
86
  if: proc { |rule| rule.respond_to?(:markets) }
87
+
88
+ many :option_values,
89
+ resource: proc { Spree.api.admin_option_value_serializer },
90
+ if: proc { |rule| rule.respond_to?(:option_values) }
89
91
  end
90
92
  end
91
93
  end
@@ -0,0 +1,80 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # One SKU on a purchase order, with the price the merchant agreed to.
6
+ class PurchaseOrderItemSerializer < V3::BaseSerializer
7
+ typelize quantity_ordered: :number,
8
+ quantity_received: :number,
9
+ quantity_rejected: :number,
10
+ quantity_over: :number,
11
+ outstanding: :number,
12
+ unit_cost: :string,
13
+ display_unit_cost: :string,
14
+ total_cost: :string,
15
+ display_total_cost: :string,
16
+ currency: 'string | null',
17
+ purchase_order_id: 'string | null',
18
+ thumbnail_url: 'string | null',
19
+ product_id: 'string | null',
20
+ variant_id: 'string | null',
21
+ variant_name: 'string | null',
22
+ variant_sku: 'string | null',
23
+ options_text: 'string | null'
24
+
25
+ attributes :quantity_ordered, :quantity_received, :quantity_rejected, :quantity_over,
26
+ :outstanding, :currency,
27
+ created_at: :iso8601, updated_at: :iso8601
28
+
29
+ # Money on the wire is a decimal string: a float would round the
30
+ # merchant's own figure.
31
+ attribute :unit_cost do |item|
32
+ item.unit_cost&.to_s
33
+ end
34
+
35
+ attribute :total_cost do |item|
36
+ item.total_cost.to_s
37
+ end
38
+
39
+ attribute :display_unit_cost do |item|
40
+ item.display_unit_cost.to_s
41
+ end
42
+
43
+ attribute :display_total_cost do |item|
44
+ item.display_total_cost.to_s
45
+ end
46
+
47
+ attribute :purchase_order_id do |item|
48
+ Spree::PurchaseOrder.prefixed_id_for(item.purchase_order_id)
49
+ end
50
+
51
+ attribute :variant_id do |item|
52
+ item.variant&.prefixed_id
53
+ end
54
+
55
+ # The product the line's variant belongs to, so a line can link
56
+ # straight to the screen where that SKU's stock lives.
57
+ attribute :product_id do |item|
58
+ item.variant&.product&.prefixed_id
59
+ end
60
+
61
+ attribute :variant_name do |item|
62
+ item.variant&.product&.name
63
+ end
64
+
65
+ attribute :variant_sku do |item|
66
+ item.variant&.sku
67
+ end
68
+
69
+ attribute :options_text do |item|
70
+ item.variant&.options_text
71
+ end
72
+
73
+ attribute :thumbnail_url do |item|
74
+ image_url_for(item.thumbnail)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,94 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Goods bought from a supplier. Admin-only — a purchase order is what
6
+ # the merchant owes and expects, which no customer ever sees.
7
+ class PurchaseOrderSerializer < V3::BaseSerializer
8
+ typelize number: :string,
9
+ status: :string,
10
+ currency: :string,
11
+ reference: 'string | null',
12
+ notes: 'string | null',
13
+ supplier_id: 'string | null',
14
+ destination_location_id: 'string | null',
15
+ expected_at: 'string | null',
16
+ cancel_by: 'string | null',
17
+ closed_short_at: 'string | null',
18
+ close_reason: 'string | null',
19
+ closed_short: :boolean,
20
+ items_count: :number,
21
+ quantity_rejected_total: :number,
22
+ quantity_ordered_total: :number,
23
+ quantity_received_total: :number,
24
+ subtotal: :string,
25
+ display_subtotal: :string,
26
+ editable: :boolean,
27
+ ordered_at: 'string | null',
28
+ received_at: 'string | null',
29
+ metadata: 'Record<string, unknown>'
30
+
31
+ attributes :number, :status, :currency, :reference, :notes, :metadata, :close_reason,
32
+ :items_count, :quantity_received_total, :quantity_rejected_total,
33
+ ordered_at: :iso8601, received_at: :iso8601, closed_short_at: :iso8601,
34
+ created_at: :iso8601, updated_at: :iso8601
35
+
36
+ # A calendar date, not an instant: the day a supplier promised, which
37
+ # means the same day in every timezone. `yyyy-mm-dd`, which is what
38
+ # the dashboard's date-only picker both sends and reads. The
39
+ # `:iso8601` type is for instants and would ask a Date for
40
+ # millisecond precision it has no argument for.
41
+ attribute :expected_at do |purchase_order|
42
+ purchase_order.expected_at&.iso8601
43
+ end
44
+
45
+ # The day after which the merchant no longer wants the goods — a
46
+ # date for the same reason.
47
+ attribute :cancel_by do |purchase_order|
48
+ purchase_order.cancel_by&.iso8601
49
+ end
50
+
51
+ attribute :closed_short, &:closed_short?
52
+
53
+ # Named for the merchant's own vocabulary — a purchase order orders,
54
+ # a transfer ships — over the concern's neutral `quantity_expected`.
55
+ attribute :quantity_ordered_total, &:quantity_expected_total
56
+
57
+ attribute :editable, &:editable?
58
+
59
+ attribute :subtotal do |purchase_order|
60
+ purchase_order.subtotal.to_s
61
+ end
62
+
63
+ attribute :display_subtotal do |purchase_order|
64
+ purchase_order.display_subtotal.to_s
65
+ end
66
+
67
+ attribute :supplier_id do |purchase_order|
68
+ purchase_order.supplier&.prefixed_id
69
+ end
70
+
71
+ attribute :destination_location_id do |purchase_order|
72
+ purchase_order.destination_location&.prefixed_id
73
+ end
74
+
75
+ many :items,
76
+ resource: proc { Spree.api.admin_purchase_order_item_serializer },
77
+ if: proc { expand?('items') }
78
+
79
+ many :stock_receipts,
80
+ resource: proc { Spree.api.admin_stock_receipt_serializer },
81
+ if: proc { expand?('stock_receipts') }
82
+
83
+ one :supplier,
84
+ resource: proc { Spree.api.admin_supplier_serializer },
85
+ if: proc { expand?('supplier') }
86
+
87
+ one :destination_location,
88
+ resource: proc { Spree.api.admin_stock_location_serializer },
89
+ if: proc { expand?('destination_location') }
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,27 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin-only: reasons are back-office vocabulary and have no Store API
6
+ # controller, so there is no store serializer to extend.
7
+ #
8
+ # The three reason serializers are deliberately parallel rather than
9
+ # sharing a base class: Typelizer emits one TS type per serializer, so
10
+ # a shared parent would publish an abstract `Reason` type into the
11
+ # admin SDK that no endpoint returns.
12
+ class RefundReasonSerializer < V3::BaseSerializer
13
+ typelize name: :string, active: :boolean, can_be_deleted: :boolean
14
+
15
+ attributes :name, :active,
16
+ created_at: :iso8601, updated_at: :iso8601
17
+
18
+ # Lets the dashboard hide destructive controls instead of offering a
19
+ # delete that the model will refuse.
20
+ attribute :can_be_deleted do |reason|
21
+ reason.can_be_deleted?
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -5,7 +5,6 @@ module Spree
5
5
  class RefundSerializer < V3::RefundSerializer
6
6
  typelize payment_id: [:string, nullable: true],
7
7
  refund_reason_id: [:string, nullable: true],
8
- reimbursement_id: [:string, nullable: true],
9
8
  metadata: 'Record<string, unknown>'
10
9
 
11
10
  attributes :metadata,
@@ -14,10 +13,6 @@ module Spree
14
13
  one :payment,
15
14
  resource: proc { Spree.api.admin_payment_serializer },
16
15
  if: proc { expand?('payment') }
17
-
18
- one :reimbursement,
19
- resource: proc { Spree.api.admin_reimbursement_serializer },
20
- if: proc { expand?('reimbursement') }
21
16
  end
22
17
  end
23
18
  end
@@ -0,0 +1,72 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Decorates a Spree::Reporting::Result for the wire: money display
6
+ # strings, ISO ranges, and dimension hydration (raw group keys become
7
+ # { id, label, meta } display payloads — see Spree::Reporting::Hydration).
8
+ class ReportingResultSerializer
9
+ attr_reader :result, :store, :params
10
+
11
+ def initialize(result, store:, params: {})
12
+ @result = result
13
+ @store = store
14
+ @params = params
15
+ end
16
+
17
+ def to_h
18
+ {
19
+ meta: result.meta.merge(
20
+ time_range: iso_range(result.meta[:time_range]),
21
+ previous_time_range: iso_range(result.meta[:previous_time_range])
22
+ ),
23
+ totals: result.totals.to_h { |name, payload| [name, metric_payload(name, payload)] },
24
+ rows: result.rows.map do |row|
25
+ {
26
+ dimensions: row[:dimensions].to_h { |name, raw| [name, dimension_value(name, raw)] },
27
+ metrics: row[:metrics].to_h { |name, payload| [name, metric_payload(name, payload)] }
28
+ }
29
+ end
30
+ }
31
+ end
32
+
33
+ private
34
+
35
+ def iso_range(range)
36
+ return unless range
37
+
38
+ { since: range.first.iso8601, until: range.last.iso8601 }
39
+ end
40
+
41
+ def metric_payload(name, payload)
42
+ output = payload.dup
43
+ output[:display] = money(payload[:value]) if money_metrics.include?(name)
44
+ output
45
+ end
46
+
47
+ # Resolved once per response rather than per cell — a 1000-row report
48
+ # with five metrics would otherwise build 5000 Money objects.
49
+ def money_metrics
50
+ @money_metrics ||= result.meta[:metrics].select { |name| Spree.reporting.metrics[name]&.money? }.to_set
51
+ end
52
+
53
+ def currency
54
+ @currency ||= ::Money::Currency.find(result.meta[:currency])
55
+ end
56
+
57
+ def money(amount)
58
+ Spree::Money.new(amount, currency: currency).to_s
59
+ end
60
+
61
+ def dimension_value(name, raw)
62
+ hydration.value(name, raw)
63
+ end
64
+
65
+ def hydration
66
+ @hydration ||= Spree::Reporting::Hydration.new(result, store: store, params: params)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ module Admin
7
+ class ReturnLineItemSerializer < V3::ReturnLineItemSerializer
8
+ attributes created_at: :iso8601, updated_at: :iso8601
9
+
10
+ one :variant, resource: proc { Spree.api.admin_variant_serializer }, if: proc { expand?('variant') }
11
+ one :line_item, resource: proc { Spree.api.admin_line_item_serializer }, if: proc { expand?('line_item') }
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ module Admin
7
+ class ReturnReasonSerializer < V3::ReturnReasonSerializer
8
+ typelize can_be_deleted: :boolean
9
+
10
+ attributes created_at: :iso8601, updated_at: :iso8601
11
+
12
+ # Lets the dashboard hide destructive controls instead of offering a
13
+ # delete that the model will refuse.
14
+ attribute :can_be_deleted do |reason|
15
+ reason.can_be_deleted?
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end