spree_api 6.0.0.beta4 → 6.0.0.rc2

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 (531) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -48
  3. data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
  4. data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
  5. data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
  6. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
  7. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +15 -29
  8. data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
  9. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +10 -2
  10. data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +3 -3
  11. data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
  12. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
  13. data/app/controllers/concerns/spree/api/v3/error_handler.rb +55 -4
  14. data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
  15. data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
  16. data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
  17. data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
  18. data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
  19. data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
  20. data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
  21. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +7 -11
  22. data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
  23. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +3 -15
  24. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
  25. data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
  26. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +8 -28
  27. data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
  28. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
  29. data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
  30. data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
  31. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
  32. data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
  33. data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
  34. data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
  35. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +8 -4
  36. data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
  37. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -8
  38. data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
  39. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +2 -6
  40. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -9
  41. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +61 -34
  42. data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
  43. data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
  44. data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -10
  45. data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
  46. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +5 -3
  47. data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
  48. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +62 -14
  49. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -4
  50. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
  51. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -5
  52. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +20 -27
  53. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -5
  54. data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -7
  55. data/app/controllers/spree/api/v3/admin/countries_controller.rb +6 -2
  56. data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
  57. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +22 -4
  58. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -9
  59. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -5
  60. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -11
  61. data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
  62. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -13
  63. data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
  64. data/app/controllers/spree/api/v3/admin/customers_controller.rb +37 -9
  65. data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
  66. data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
  67. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +16 -8
  68. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +95 -62
  69. data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
  70. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +14 -7
  71. data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
  72. data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +53 -0
  73. data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +34 -0
  74. data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +37 -0
  75. data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +42 -0
  76. data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
  77. data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
  78. data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +44 -0
  79. data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
  80. data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
  81. data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
  82. data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
  83. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
  84. data/app/controllers/spree/api/v3/admin/imports_controller.rb +37 -11
  85. data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
  86. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
  87. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -8
  88. data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
  89. data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
  90. data/app/controllers/spree/api/v3/admin/me_controller.rb +13 -4
  91. data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
  92. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +9 -5
  93. data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
  94. data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
  95. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -5
  96. data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
  97. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +20 -6
  98. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +6 -2
  99. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +30 -6
  100. data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
  101. data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
  102. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +83 -22
  103. data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +9 -5
  104. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
  105. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +37 -12
  106. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +18 -19
  107. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +7 -5
  108. data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
  109. data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
  110. data/app/controllers/spree/api/v3/admin/orders_controller.rb +76 -62
  111. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
  112. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +26 -7
  113. data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
  114. data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
  115. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +32 -67
  116. data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -8
  117. data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
  118. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +29 -16
  119. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -18
  120. data/app/controllers/spree/api/v3/admin/products_controller.rb +122 -71
  121. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -6
  122. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -5
  123. data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
  124. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +55 -8
  125. data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
  126. data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
  127. data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
  128. data/app/controllers/spree/api/v3/admin/resource_controller.rb +2 -1
  129. data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
  130. data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
  131. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +7 -9
  132. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +17 -10
  133. data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
  134. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
  135. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
  136. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
  137. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +77 -32
  138. data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -23
  139. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
  140. data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
  141. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +49 -8
  142. data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -48
  143. data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
  144. data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
  145. data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
  146. data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
  147. data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
  148. data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
  149. data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
  150. data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
  151. data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
  152. data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
  153. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +40 -13
  154. data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
  155. data/app/controllers/spree/api/v3/base_controller.rb +12 -0
  156. data/app/controllers/spree/api/v3/resource_controller.rb +99 -3
  157. data/app/controllers/spree/api/v3/seller/auth_controller.rb +10 -2
  158. data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
  159. data/app/controllers/spree/api/v3/seller/countries_controller.rb +3 -3
  160. data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
  161. data/app/controllers/spree/api/v3/seller/exports_controller.rb +21 -4
  162. data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
  163. data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
  164. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +12 -4
  165. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
  166. data/app/controllers/spree/api/v3/seller/me_controller.rb +15 -4
  167. data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
  168. data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
  169. data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
  170. data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
  171. data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
  172. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +23 -2
  173. data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
  174. data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
  175. data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
  176. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
  177. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +20 -11
  178. data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
  179. data/app/controllers/spree/api/v3/seller/products_controller.rb +115 -28
  180. data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
  181. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +13 -6
  182. data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
  183. data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
  184. data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
  185. data/app/controllers/spree/api/v3/seller/team_controller.rb +5 -1
  186. data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
  187. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +9 -2
  188. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +11 -11
  189. data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +13 -4
  190. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +23 -7
  191. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +21 -7
  192. data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +16 -3
  193. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +26 -28
  194. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +9 -1
  195. data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
  196. data/app/controllers/spree/api/v3/store/carts_controller.rb +64 -52
  197. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -8
  198. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
  199. data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
  200. data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
  201. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +10 -2
  202. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -11
  203. data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
  204. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -5
  205. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
  206. data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
  207. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
  208. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +25 -6
  209. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -9
  210. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
  211. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
  212. data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
  213. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
  214. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
  215. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +27 -14
  216. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +12 -7
  217. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +11 -6
  218. data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
  219. data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
  220. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -8
  221. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
  222. data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
  223. data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
  224. data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
  225. data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
  226. data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
  227. data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
  228. data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
  229. data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
  230. data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
  231. data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
  232. data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
  233. data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
  234. data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
  235. data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
  236. data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
  237. data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
  238. data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
  239. data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
  240. data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
  241. data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
  242. data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
  243. data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +29 -0
  244. data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
  245. data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
  246. data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
  247. data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
  248. data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
  249. data/app/serializers/spree/api/v3/admin/address_serializer.rb +8 -7
  250. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
  251. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
  252. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
  253. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
  254. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -8
  255. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
  256. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
  257. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
  258. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
  259. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +7 -10
  260. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
  261. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
  262. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
  263. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
  264. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
  265. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -5
  266. data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
  267. data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
  268. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
  269. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
  270. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +5 -17
  271. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
  272. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
  273. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +20 -30
  274. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
  275. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
  276. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
  277. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
  278. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
  279. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
  280. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
  281. data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
  282. data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
  283. data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
  284. data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
  285. data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
  286. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
  287. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +6 -3
  288. data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
  289. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
  290. data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
  291. data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
  292. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
  293. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -17
  294. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +4 -10
  295. data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
  296. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
  297. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +14 -18
  298. data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
  299. data/app/serializers/spree/api/v3/admin/market_serializer.rb +7 -2
  300. data/app/serializers/spree/api/v3/admin/media_serializer.rb +4 -5
  301. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
  302. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +5 -9
  303. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  304. data/app/serializers/spree/api/v3/admin/order_serializer.rb +38 -48
  305. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
  306. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -4
  307. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -8
  308. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
  309. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
  310. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
  311. data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +5 -2
  312. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
  313. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -6
  314. data/app/serializers/spree/api/v3/admin/price_serializer.rb +2 -0
  315. data/app/serializers/spree/api/v3/admin/product_serializer.rb +4 -10
  316. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
  317. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
  318. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +5 -9
  319. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -5
  320. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +6 -25
  321. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -17
  322. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
  323. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -0
  324. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
  325. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +9 -0
  326. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
  327. data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -12
  328. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
  329. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
  330. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +7 -7
  331. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
  332. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
  333. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +8 -16
  334. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +11 -10
  335. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +8 -21
  336. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
  337. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +4 -3
  338. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +3 -9
  339. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
  340. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
  341. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
  342. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
  343. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +6 -3
  344. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +11 -20
  345. data/app/serializers/spree/api/v3/admin/store_serializer.rb +21 -84
  346. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +2 -4
  347. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +6 -10
  348. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
  349. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +9 -3
  350. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +3 -19
  351. data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
  352. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +13 -10
  353. data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
  354. data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
  355. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
  356. data/app/serializers/spree/api/v3/base_serializer.rb +132 -7
  357. data/app/serializers/spree/api/v3/cart_serializer.rb +20 -66
  358. data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
  359. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +6 -29
  360. data/app/serializers/spree/api/v3/claim_serializer.rb +2 -16
  361. data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
  362. data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
  363. data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
  364. data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
  365. data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
  366. data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
  367. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -32
  368. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
  369. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
  370. data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
  371. data/app/serializers/spree/api/v3/discount_serializer.rb +4 -12
  372. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +6 -30
  373. data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -16
  374. data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
  375. data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
  376. data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
  377. data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
  378. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
  379. data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +3 -7
  380. data/app/serializers/spree/api/v3/gift_card_serializer.rb +7 -17
  381. data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
  382. data/app/serializers/spree/api/v3/import_serializer.rb +3 -26
  383. data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
  384. data/app/serializers/spree/api/v3/line_item_serializer.rb +19 -23
  385. data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
  386. data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
  387. data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
  388. data/app/serializers/spree/api/v3/media_serializer.rb +8 -5
  389. data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
  390. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
  391. data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
  392. data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -25
  393. data/app/serializers/spree/api/v3/order_serializer.rb +14 -58
  394. data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
  395. data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
  396. data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
  397. data/app/serializers/spree/api/v3/payment_session_serializer.rb +5 -13
  398. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
  399. data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
  400. data/app/serializers/spree/api/v3/price_history_serializer.rb +6 -8
  401. data/app/serializers/spree/api/v3/price_serializer.rb +7 -12
  402. data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
  403. data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
  404. data/app/serializers/spree/api/v3/product_serializer.rb +10 -24
  405. data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
  406. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
  407. data/app/serializers/spree/api/v3/refund_serializer.rb +11 -16
  408. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +6 -21
  409. data/app/serializers/spree/api/v3/return_serializer.rb +4 -16
  410. data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
  411. data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
  412. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
  413. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
  414. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
  415. data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
  416. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
  417. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +5 -15
  418. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +8 -13
  419. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
  420. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
  421. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
  422. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +6 -3
  423. data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
  424. data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
  425. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
  426. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
  427. data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
  428. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
  429. data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
  430. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +8 -13
  431. data/app/serializers/spree/api/v3/seller/order_serializer.rb +19 -40
  432. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
  433. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +6 -6
  434. data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +11 -0
  435. data/app/serializers/spree/api/v3/seller/price_serializer.rb +11 -0
  436. data/app/serializers/spree/api/v3/seller/product_serializer.rb +3 -7
  437. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
  438. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +9 -13
  439. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
  440. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
  441. data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -17
  442. data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
  443. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
  444. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +10 -9
  445. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
  446. data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
  447. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
  448. data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
  449. data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
  450. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
  451. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
  452. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
  453. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -13
  454. data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -27
  455. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
  456. data/app/serializers/spree/api/v3/tax_line_serializer.rb +11 -23
  457. data/app/serializers/spree/api/v3/variant_serializer.rb +10 -24
  458. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
  459. data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
  460. data/app/services/spree/api/v3/filter_predicates.rb +29 -0
  461. data/app/services/spree/api/v3/filter_table.rb +337 -0
  462. data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
  463. data/app/services/spree/api/v3/request_schema.rb +430 -0
  464. data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
  465. data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
  466. data/config/initializers/pagy.rb +1 -1
  467. data/config/initializers/typelizer.rb +7 -9
  468. data/config/locales/ar.yml +15 -0
  469. data/config/locales/be.yml +15 -0
  470. data/config/locales/bg.yml +15 -0
  471. data/config/locales/ca.yml +15 -0
  472. data/config/locales/cs.yml +15 -0
  473. data/config/locales/da.yml +15 -0
  474. data/config/locales/de-CH.yml +11 -0
  475. data/config/locales/de.yml +15 -0
  476. data/config/locales/el.yml +15 -0
  477. data/config/locales/en.yml +5 -40
  478. data/config/locales/es-CL.yml +10 -0
  479. data/config/locales/es-EC.yml +11 -0
  480. data/config/locales/es-MX.yml +12 -0
  481. data/config/locales/es.yml +15 -0
  482. data/config/locales/et.yml +15 -0
  483. data/config/locales/fa.yml +15 -0
  484. data/config/locales/fi.yml +15 -0
  485. data/config/locales/fr.yml +15 -0
  486. data/config/locales/hu.yml +15 -0
  487. data/config/locales/id.yml +15 -0
  488. data/config/locales/it.yml +15 -0
  489. data/config/locales/ja.yml +15 -0
  490. data/config/locales/km.yml +15 -0
  491. data/config/locales/ko.yml +15 -0
  492. data/config/locales/ku.yml +15 -0
  493. data/config/locales/lt.yml +15 -0
  494. data/config/locales/lv.yml +15 -0
  495. data/config/locales/nb.yml +15 -0
  496. data/config/locales/ne.yml +15 -0
  497. data/config/locales/nl.yml +15 -0
  498. data/config/locales/pl.yml +15 -0
  499. data/config/locales/pt-BR.yml +13 -0
  500. data/config/locales/pt.yml +15 -0
  501. data/config/locales/ro.yml +15 -0
  502. data/config/locales/ru.yml +15 -0
  503. data/config/locales/sk.yml +15 -0
  504. data/config/locales/sl-SI.yml +15 -0
  505. data/config/locales/sv.yml +15 -0
  506. data/config/locales/th.yml +15 -0
  507. data/config/locales/tr.yml +15 -0
  508. data/config/locales/uk.yml +15 -0
  509. data/config/locales/vi.yml +15 -0
  510. data/config/locales/zh-CN.yml +15 -0
  511. data/config/locales/zh-TW.yml +15 -0
  512. data/config/routes.rb +54 -102
  513. data/lib/spree/api/configuration.rb +5 -0
  514. data/lib/spree/api/dependencies.rb +54 -274
  515. data/lib/spree/api/middleware/request_size_limit.rb +24 -3
  516. data/lib/spree/api/openapi/filter_documentation.rb +136 -0
  517. data/lib/spree/api/openapi/schema_helper.rb +127 -81
  518. data/lib/spree/api/preference_families.rb +46 -0
  519. data/lib/spree/api/preference_types.rb +138 -0
  520. data/lib/spree/api/typelizer_generation.rb +39 -0
  521. data/lib/spree/api/webhook_event_types.rb +140 -0
  522. data/lib/spree/api.rb +0 -2
  523. data/lib/tasks/filters.rake +12 -0
  524. data/lib/typelizer/open_enums.rb +10 -0
  525. metadata +125 -40
  526. data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
  527. data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
  528. data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
  529. data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
  530. data/config/i18n-tasks.yml +0 -40
  531. data/config/initializers/alba.rb +0 -5
@@ -20,18 +20,10 @@ module Spree
20
20
  fulfillment_id: 'string | null',
21
21
  commission_rate_id: 'string | null',
22
22
  kind: [:string, enum: Spree::CommissionRate::KINDS],
23
- rate: :string,
24
- tax_rate: :string,
25
23
  taxability_reason: 'string | null',
26
- country_code: 'string | null',
24
+ country_code: [:string, nullable: true, enum: Spree::IsoData.country_codes, enum_type_name: 'CountryCode'],
27
25
  state_code: 'string | null',
28
- amount: :string,
29
- tax_amount: :string,
30
- total: :string,
31
- currency: :string,
32
- display_amount: :string,
33
- display_tax_amount: :string,
34
- display_total: :string
26
+ currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode']
35
27
 
36
28
  # The treatment, in Spree::TaxLine's vocabulary — a seller's invoice
37
29
  # has to explain why its fee was taxed the way it was, and the
@@ -39,14 +31,11 @@ module Spree
39
31
  attributes :kind, :currency, :taxability_reason, :country_code, :state_code,
40
32
  created_at: :iso8601, updated_at: :iso8601
41
33
 
42
- # Strings, so the figures a seller is invoiced round-trip exactly.
43
- %i[rate tax_rate amount tax_amount total].each do |decimal|
44
- attribute(decimal) { |line| line.public_send(decimal)&.to_s }
45
- end
46
-
47
- %i[display_amount display_tax_amount display_total].each do |formatted|
48
- attribute(formatted) { |line| line.public_send(formatted).to_s }
49
- end
34
+ rate_attributes :rate, :tax_rate
35
+ money_attributes :amount, :tax_amount, :total
36
+ typelize rate: [:string, nullable: false], tax_rate: [:string, nullable: false],
37
+ amount: [:string, nullable: false], tax_amount: [:string, nullable: false],
38
+ total: [:string, nullable: false]
50
39
 
51
40
  %i[order seller line_item fulfillment commission_rate].each do |association|
52
41
  attribute(:"#{association}_id") { |line| line.public_send(association)&.prefixed_id }
@@ -10,21 +10,16 @@ module Spree
10
10
  # were actually charged (Spree::CommissionLine) on their own branch,
11
11
  # never the rules that produced it.
12
12
  class CommissionRateSerializer < V3::BaseSerializer
13
- # Decimals serialize as strings, like every other money-ish field on
14
- # the admin API: a rate has to round-trip exactly, and a float does
15
- # not promise that.
16
13
  typelize name: :string,
17
14
  code: 'string | null',
18
15
  enabled: :boolean,
19
16
  position: :number,
20
17
  global: :boolean,
21
18
  kind: [:string, enum: Spree::CommissionRate::KINDS],
22
- value: :string,
23
19
  amounts: 'Record<string, string>',
24
20
  bounds: 'Record<string, { min_amount: string | null; max_amount: string | null }>',
25
21
  tax_inclusive: :boolean,
26
22
  include_shipping: :boolean,
27
- commission_tax_rate: 'string | null',
28
23
  metadata: 'Record<string, unknown> | null',
29
24
  deleted_at: 'string | null'
30
25
 
@@ -32,22 +27,23 @@ module Spree
32
27
  :tax_inclusive, :include_shipping, :metadata,
33
28
  deleted_at: :iso8601, created_at: :iso8601, updated_at: :iso8601
34
29
 
35
- %i[value commission_tax_rate].each do |decimal|
36
- attribute(decimal) { |rate| rate.public_send(decimal)&.to_s }
37
- end
30
+ # +value+ is the percentage a percentage rate charges; a flat fee's
31
+ # money lives in +amounts+, per currency.
32
+ rate_attributes :value, :commission_tax_rate
33
+ typelize value: [:string, nullable: false]
38
34
 
39
35
  # What a flat fee charges, per currency. Empty on a percentage rate,
40
36
  # which needs no amount of its own.
41
37
  attribute :amounts do |rate|
42
- rate.amounts.transform_values(&:to_s)
38
+ rate.amounts.to_h { |currency, amount| [currency, Spree::Money::Rounding.format(amount, currency)] }
43
39
  end
44
40
 
45
41
  # The floor and cap a percentage charges within, per currency. Each
46
42
  # holds only in its own currency, so a rate may bound some and leave
47
43
  # others unbounded.
48
44
  attribute :bounds do |rate|
49
- rate.bounds.transform_values do |bound|
50
- bound.transform_values { |amount| amount&.to_s }
45
+ rate.bounds.to_h do |currency, bound|
46
+ [currency, bound.transform_values { |amount| Spree::Money::Rounding.format(amount, currency) }]
51
47
  end
52
48
  end
53
49
 
@@ -13,7 +13,6 @@ module Spree
13
13
  typelize type: [:string, comment: 'Rule type. Built-in: seller_rule, category_rule, product_rule, item_total_rule. Extensions may register more.'],
14
14
  commission_rate_id: :string,
15
15
  preferences: 'Record<string, unknown>',
16
- preference_schema: 'Array<{ key: string; type: string; default: unknown }>',
17
16
  product_ids: 'Array<string> | null',
18
17
  seller_ids: 'Array<string> | null',
19
18
  category_ids: 'Array<string> | null'
@@ -24,12 +23,9 @@ module Spree
24
23
  rule.class.api_type
25
24
  end
26
25
 
27
- attribute :commission_rate_id do |rule|
28
- rule.commission_rate&.prefixed_id
29
- end
26
+ prefixed_id_attributes :commission_rate
30
27
 
31
28
  attribute :preferences, &:serialized_preferences
32
- attribute :preference_schema, &:serialized_preference_schema
33
29
 
34
30
  # Reference lists are returned as prefixed IDs to match the rest of
35
31
  # the API. Product ids are read through a join table; seller and
@@ -4,7 +4,11 @@ module Spree
4
4
  module Admin
5
5
  # No timestamps: countries are reference data supplied by the countries
6
6
  # gem rather than records, so they have no created_at/updated_at.
7
+ # The dashboard names countries with Intl.DisplayNames in the admin's
8
+ # own language, so the Admin API sends the ISO code alone.
7
9
  class CountrySerializer < V3::CountrySerializer
10
+ _attributes.delete(:name)
11
+
8
12
  many :states,
9
13
  resource: proc { Spree.api.admin_state_serializer },
10
14
  if: proc { params[:expand]&.include?('states') }
@@ -16,13 +16,7 @@ module Spree
16
16
  attributes :code, :state,
17
17
  created_at: :iso8601, updated_at: :iso8601
18
18
 
19
- attribute :promotion_id do |coupon|
20
- coupon.promotion&.prefixed_id
21
- end
22
-
23
- attribute :order_id do |coupon|
24
- coupon.order&.prefixed_id
25
- end
19
+ prefixed_id_attributes :promotion, :order
26
20
  end
27
21
  end
28
22
  end
@@ -7,13 +7,7 @@ module Spree
7
7
  payment_method_id: [:string, nullable: true],
8
8
  metadata: 'Record<string, unknown>'
9
9
 
10
- attribute :customer_id do |credit_card|
11
- credit_card.customer&.prefixed_id
12
- end
13
-
14
- attribute :payment_method_id do |credit_card|
15
- credit_card.payment_method&.prefixed_id
16
- end
10
+ prefixed_id_attributes :customer, :payment_method
17
11
 
18
12
  attributes :metadata,
19
13
  created_at: :iso8601, updated_at: :iso8601
@@ -9,15 +9,19 @@ module Spree
9
9
  key: :string,
10
10
  label: :string,
11
11
  field_type: Spree::CustomField::FIELD_TYPE_TOKENS,
12
- resource_type: [:string, comment: 'Class name of the resource the field attaches to, for example Spree::Product, Spree::Order or Spree::Customer. Extensions may register more.'],
12
+ resource_type: [:string, comment: 'Shorthand of the resource the field attaches to, for example product, variant, order, customer or category. Discover the full list from the resource_types endpoint; extensions may register more.'],
13
13
  storefront_visible: :boolean,
14
14
  searchable: :boolean,
15
15
  sortable: :boolean,
16
16
  filter_key: :string
17
17
 
18
- attributes :namespace, :key, :label, :field_type, :resource_type, :storefront_visible,
18
+ attributes :namespace, :key, :label, :field_type, :storefront_visible,
19
19
  :searchable, :sortable, :filter_key,
20
20
  created_at: :iso8601, updated_at: :iso8601
21
+
22
+ attribute :resource_type do |definition|
23
+ Spree::Base.polymorphic_api_type(definition.resource_type)
24
+ end
21
25
  end
22
26
  end
23
27
  end
@@ -5,13 +5,14 @@ module Spree
5
5
  # Admin API Customer Serializer
6
6
  # Full customer data including admin-only fields
7
7
  class CustomerSerializer < V3::CustomerSerializer
8
+ without_formatted_money
9
+
8
10
  typelize failed_attempts: :number,
9
11
  tags: [:string, multi: true],
10
12
  internal_note: [:string, nullable: true], internal_note_html: [:string, nullable: true],
11
13
  metadata: 'Record<string, unknown>',
12
14
  orders_count: :number,
13
15
  total_spent: :string,
14
- display_total_spent: :string,
15
16
  last_order_completed_at: [:string, nullable: true],
16
17
  default_billing_address_id: [:string, nullable: true],
17
18
  default_shipping_address_id: [:string, nullable: true],
@@ -28,9 +29,7 @@ module Spree
28
29
  user.anonymized_at&.iso8601
29
30
  end
30
31
 
31
- attribute :anonymized do |user|
32
- user.anonymized?
33
- end
32
+ attribute :anonymized, &:anonymized?
34
33
 
35
34
  attribute :tags do |user|
36
35
  user.tags.map(&:name) # not pluck as we preload tags
@@ -44,13 +43,7 @@ module Spree
44
43
  user.respond_to?(:internal_note) ? user.internal_note.presence : nil
45
44
  end
46
45
 
47
- attribute :default_billing_address_id do |user|
48
- user.bill_address&.prefixed_id
49
- end
50
-
51
- attribute :default_shipping_address_id do |user|
52
- user.ship_address&.prefixed_id
53
- end
46
+ prefixed_id_attributes default_billing_address_id: :bill_address, default_shipping_address_id: :ship_address
54
47
 
55
48
  # Order aggregates: prefer attributes precomputed on the scope (see
56
49
  # CustomersController#scope) to avoid N+1 on list endpoints. Fall
@@ -61,13 +54,8 @@ module Spree
61
54
  end
62
55
 
63
56
  attribute :total_spent do |user|
64
- (user.attributes['total_spent'] || user.orders.complete.sum(:total)).to_s
65
- end
66
-
67
- attribute :display_total_spent do |user|
68
57
  amount = user.attributes['total_spent'] || user.orders.complete.sum(:total)
69
- currency = Spree::Current.currency || Spree::Current.store&.default_currency
70
- Spree::Money.new(amount, currency: currency).to_s
58
+ Spree::Money::Rounding.format(amount, (current_store || Spree::Current.store)&.default_currency)
71
59
  end
72
60
 
73
61
  attribute :last_order_completed_at do |user|
@@ -19,14 +19,10 @@ module Spree
19
19
 
20
20
  attributes :email, :error_message, created_at: :iso8601, updated_at: :iso8601
21
21
 
22
- attribute :customer_id do |data_request|
23
- data_request.customer&.prefixed_id
24
- end
22
+ prefixed_id_attributes :customer
25
23
 
26
24
  # Null when the subject asked for it themselves.
27
- attribute :requested_by_id do |data_request|
28
- data_request.requested_by&.prefixed_id
29
- end
25
+ prefixed_id_attributes :requested_by
30
26
 
31
27
  one :customer, resource: proc { Spree.api.admin_customer_serializer }, if: proc { expand?('customer') }
32
28
  end
@@ -6,7 +6,6 @@ module Spree
6
6
  typelize type: [:string, comment: 'Rule type. Built-in: item_total_rule, weight_rule, excluded_products_rule, channel_rule, volume_rule, company_rule. Extensions may register more.'],
7
7
  active: :boolean,
8
8
  preferences: 'Record<string, unknown>',
9
- preference_schema: "Array<{ key: string; type: string; default: unknown; choices?: string[] }>",
10
9
  product_ids: [:string, multi: true]
11
10
 
12
11
  attributes :active, created_at: :iso8601, updated_at: :iso8601
@@ -18,7 +17,6 @@ module Spree
18
17
  end
19
18
 
20
19
  attribute :preferences, &:serialized_preferences
21
- attribute :preference_schema, &:serialized_preference_schema
22
20
 
23
21
  # Association-backed config (ExcludedProductsRule); empty for
24
22
  # preference-only rules. Same name read and written.
@@ -4,33 +4,38 @@ module Spree
4
4
  module Admin
5
5
  class DeliveryMethodSerializer < V3::DeliveryMethodSerializer
6
6
  typelize admin_name: [:string, nullable: true],
7
- fulfillment_provider: :string, pickup_point_provider: [:string, nullable: true],
8
- rate_provider: [:string, nullable: true],
7
+ fulfillment_provider: [:string, comment: 'Fulfillment provider. Built-in: manual, digital, pickup, pickup_point. Provider gems register more (e.g. easy_post).'],
8
+ pickup_point_provider: [:string, nullable: true, comment: 'Pickup point network. None built in; provider gems register them.'],
9
+ rate_provider: [:string, nullable: true, comment: 'Rate provider; null prices through the calculator. Built-in: internal, freight. Provider gems register more (e.g. easy_post).'],
9
10
  storefront_visible: :boolean, tracking_url: [:string, nullable: true],
10
11
  tax_category_id: [:string, nullable: true],
11
12
  delivery_profile_id: :string,
12
13
  delivery_origin_group_id: [:string, nullable: true],
13
14
  delivery_zone_id: [:string, nullable: true],
14
15
  stock_location_ids: [:string, multi: true],
15
- calculator_type: [:string, nullable: true],
16
- calculator_preferences: ['Record<string, unknown>', nullable: true],
16
+ calculator: 'TypedDeliveryCalculator | null',
17
17
  markup_flat: [:string, nullable: true],
18
18
  markup_percent: [:string, nullable: true],
19
19
  available_to_sellers: :boolean,
20
20
  seller_id: [:string, nullable: true],
21
21
  seller_name: [:string, nullable: true]
22
22
 
23
- attributes :admin_name, :fulfillment_provider, :pickup_point_provider,
24
- :rate_provider, :storefront_visible, :tracking_url,
25
- :markup_flat, :markup_percent, :available_to_sellers,
23
+ attributes :admin_name, :storefront_visible, :tracking_url, :available_to_sellers,
26
24
  created_at: :iso8601, updated_at: :iso8601, deleted_at: :iso8601
27
25
 
26
+ # The flat markup is charged in whatever currency the rate is quoted
27
+ # in, so it is shown as stored rather than rounded to one currency:
28
+ # a rounded figure would be saved back.
29
+ attribute :markup_flat do |record|
30
+ Spree::Money::Rounding.format(record.markup_flat, (current_store || Spree::Current.store)&.default_currency, unit_price: true)
31
+ end
32
+
33
+ rate_attributes :markup_percent
34
+
28
35
  # Which seller runs this method, so the operator's list can say
29
36
  # whose it is. Null is the marketplace's own
30
37
  # (docs/plans/6.0-multi-vendor-marketplace.md, Decision 13).
31
- attribute :seller_id do |record|
32
- record.seller&.prefixed_id
33
- end
38
+ prefixed_id_attributes :seller
34
39
 
35
40
  attribute :seller_name do |record|
36
41
  record.seller&.name
@@ -42,32 +47,17 @@ module Spree
42
47
  # eligibility without a request per method.
43
48
  many :delivery_method_rules, key: :rules, resource: proc { Spree.api.admin_delivery_method_rule_serializer }
44
49
 
45
- attribute :tax_category_id do |record|
46
- record.tax_category&.prefixed_id
47
- end
48
-
49
- attribute :delivery_profile_id do |record|
50
- record.delivery_profile&.prefixed_id
51
- end
52
-
53
- attribute :delivery_origin_group_id do |record|
54
- record.delivery_origin_group&.prefixed_id
55
- end
56
-
57
- attribute :delivery_zone_id do |record|
58
- record.delivery_zone&.prefixed_id
59
- end
50
+ prefixed_id_attributes :tax_category, :delivery_profile, :delivery_origin_group, :delivery_zone
60
51
 
61
52
  attribute :stock_location_ids do |record|
62
53
  record.pickup_locations.map(&:prefixed_id)
63
54
  end
64
55
 
65
- attribute :calculator_type do |record|
66
- record.calculator&.class&.api_type
67
- end
56
+ api_type_attributes :fulfillment_provider, :pickup_point_provider, :rate_provider
68
57
 
69
- attribute :calculator_preferences do |record|
70
- record.calculator.respond_to?(:serialized_preferences) ? record.calculator.serialized_preferences : record.calculator&.preferences
58
+ attribute :calculator do |record|
59
+ calculator = record.calculator
60
+ { type: calculator.class.api_type, preferences: calculator.serialized_preferences } if calculator
71
61
  end
72
62
  end
73
63
  end
@@ -7,7 +7,15 @@ module Spree
7
7
  markup_flat: [:string, nullable: true], markup_percent: [:string, nullable: true],
8
8
  position: :number
9
9
 
10
- attributes :carrier, :service, :label, :markup_flat, :markup_percent, :position
10
+ attributes :carrier, :service, :label
11
+
12
+ attribute :markup_flat do |record|
13
+ Spree::Money::Rounding.format(record.markup_flat, (current_store || Spree::Current.store)&.default_currency, unit_price: true)
14
+ end
15
+
16
+ rate_attributes :markup_percent
17
+
18
+ attributes :position
11
19
  end
12
20
  end
13
21
  end
@@ -11,9 +11,7 @@ module Spree
11
11
  attributes :name, :position,
12
12
  created_at: :iso8601, updated_at: :iso8601
13
13
 
14
- attribute :delivery_profile_id do |record|
15
- record.delivery_profile&.prefixed_id
16
- end
14
+ prefixed_id_attributes :delivery_profile
17
15
 
18
16
  # Empty means every store location.
19
17
  attribute :stock_location_ids do |record|
@@ -3,6 +3,14 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class DeliveryRateSerializer < V3::DeliveryRateSerializer
6
+ without_formatted_money
7
+
8
+ # No guest price gating here, so the inherited money fields are always present.
9
+ typelize cost: [:string, nullable: false],
10
+ total: [:string, nullable: false],
11
+ additional_tax_total: [:string, nullable: false],
12
+ included_tax_total: [:string, nullable: false], tax_total: [:string, nullable: false]
13
+
6
14
  typelize metadata: ['Record<string, unknown>', nullable: true]
7
15
 
8
16
  # Raw carrier payload (quote ids, service codes) — operational
@@ -10,9 +10,7 @@ module Spree
10
10
  # Operational detail, so admin-only.
11
11
  attributes :details, created_at: :iso8601, updated_at: :iso8601
12
12
 
13
- attribute :shipping_label_id do |delivery|
14
- delivery.shipping_label&.prefixed_id
15
- end
13
+ prefixed_id_attributes :shipping_label
16
14
  end
17
15
  end
18
16
  end
@@ -9,13 +9,7 @@ module Spree
9
9
 
10
10
  attributes created_at: :iso8601, updated_at: :iso8601
11
11
 
12
- attribute :delivery_profile_id do |record|
13
- record.delivery_profile&.prefixed_id
14
- end
15
-
16
- attribute :delivery_origin_group_id do |record|
17
- record.delivery_origin_group&.prefixed_id
18
- end
12
+ prefixed_id_attributes :delivery_profile, :delivery_origin_group
19
13
 
20
14
  attribute :delivery_method_ids do |record|
21
15
  record.delivery_methods.map(&:prefixed_id)
@@ -10,14 +10,16 @@ module Spree
10
10
  authorized_days: [:number, nullable: true],
11
11
  effective_authorized_clicks: :number,
12
12
  effective_authorized_days: :number,
13
- provider_type: [:string, nullable: true],
13
+ provider_type: [:string, nullable: true, comment: 'Digital asset provider; null is an uploaded file. Built-in: file. Extensions may register more.'],
14
14
  provider_name: [:string, comment: 'Digital asset provider name. Built-in: File. Extensions may register more.'],
15
15
  provider_settings: 'Record<string, unknown>',
16
16
  download_url: [:string, nullable: true]
17
17
 
18
- attributes :authorized_clicks, :authorized_days, :byte_size, :provider_type, :provider_settings
18
+ attributes :authorized_clicks, :authorized_days, :byte_size, :provider_settings
19
19
  attributes created_at: :iso8601, updated_at: :iso8601
20
20
 
21
+ api_type_attributes :provider_type
22
+
21
23
  # Human-readable source for the admin listing. Blank provider_type is
22
24
  # the uploaded-file default, so this reads "File" there.
23
25
  attribute :provider_name do |digital_asset|
@@ -3,7 +3,9 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class DiscountSerializer < V3::DiscountSerializer
6
- typelize amount: [:string, nullable: false], display_amount: [:string, nullable: false],
6
+ without_formatted_money
7
+
8
+ typelize amount: [:string, nullable: false],
7
9
  metadata: ['Record<string, unknown>', nullable: true]
8
10
 
9
11
  attributes :metadata, created_at: :iso8601, updated_at: :iso8601
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class EmailTemplateDraftSerializer < V3::BaseSerializer
6
+ typelize subject: [:string, nullable: true],
7
+ body: :string,
8
+ lock_version: :number,
9
+ updated_by_id: [:string, nullable: true],
10
+ updated_by_type: [:string, nullable: true, enum: Spree::Actor::BUILT_IN_KINDS, enum_type_name: 'ActorKind']
11
+
12
+ attributes :subject, :body, :lock_version, created_at: :iso8601, updated_at: :iso8601
13
+
14
+ actor_attributes :updated_by
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,38 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # A rendered preview of an email template, with the variables it was
6
+ # rendered with, as example values for the editor.
7
+ class EmailTemplatePreviewSerializer < V3::BaseSerializer
8
+ typelize id: [:string, nullable: true],
9
+ subject: :string,
10
+ html: :string,
11
+ text: :string,
12
+ email_key: :string,
13
+ variables: 'Record<string, unknown>'
14
+
15
+ attribute :subject do |preview|
16
+ preview.rendered.subject
17
+ end
18
+
19
+ attribute :html do |preview|
20
+ preview.rendered.html
21
+ end
22
+
23
+ attribute :text do |preview|
24
+ preview.rendered.text
25
+ end
26
+
27
+ # The email the preview renders: the template itself, or for the
28
+ # layout and partials, the email shown around them.
29
+ attribute :email_key do |preview|
30
+ preview.email.key.tr('/', '.')
31
+ end
32
+
33
+ attribute :variables, &:variables
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,18 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class EmailTemplateRevisionSerializer < V3::BaseSerializer
6
+ typelize subject: [:string, nullable: true],
7
+ body: :string,
8
+ published_by_id: [:string, nullable: true],
9
+ published_by_type: [:string, nullable: true, enum: Spree::Actor::BUILT_IN_KINDS, enum_type_name: 'ActorKind']
10
+
11
+ attributes :subject, :body, created_at: :iso8601
12
+
13
+ actor_attributes :published_by
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class EmailTemplateSampleRecordSerializer < V3::BaseSerializer
6
+ typelize label: :string, created_at: :string
7
+
8
+ attributes :label, created_at: :iso8601
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,61 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # An editable email template for one language: what customers receive
6
+ # now (the store's published version, else Spree's default), Spree's
7
+ # default, and the draft in progress.
8
+ class EmailTemplateSerializer < V3::BaseSerializer
9
+ typelize key: :string,
10
+ kind: [:string, enum: Spree::Emails::EditableTemplates::KINDS.map(&:to_s)],
11
+ language: :string,
12
+ customized: :boolean,
13
+ customized_languages: [:string, multi: true],
14
+ subject: [:string, nullable: true],
15
+ body: :string,
16
+ published_at: [:string, nullable: true],
17
+ published_language: [:string, nullable: true],
18
+ default_subject: [:string, nullable: true],
19
+ default_body: :string,
20
+ default_changed: :boolean,
21
+ base_subject: [:string, nullable: true],
22
+ base_body: [:string, nullable: true],
23
+ draft: ['EmailTemplateDraft', nullable: true]
24
+
25
+ attributes :key, :subject, :body
26
+
27
+ # A language code, or `any` for the version every language uses.
28
+ attribute :language, &:locale
29
+
30
+ attribute :customized_languages, &:customized_locales
31
+
32
+ attribute :kind do |entry|
33
+ entry.kind.to_s
34
+ end
35
+
36
+ attribute :customized, &:customized?
37
+
38
+ attribute :published_at do |entry|
39
+ entry.published&.published_at&.iso8601
40
+ end
41
+
42
+ attributes :default_subject, :default_body
43
+
44
+ # `any` when this language has no version of its own and customers
45
+ # receive the one for every language.
46
+ attribute :published_language, &:published_locale
47
+
48
+ attribute :default_changed do |entry|
49
+ entry.outdated_version.present?
50
+ end
51
+
52
+ # The default the store's version started from, when Spree's default
53
+ # has changed since: compare it with `default_body` to see what changed.
54
+ attributes :base_subject, :base_body
55
+
56
+ one :draft, resource: proc { Spree.api.admin_email_template_draft_serializer }
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -5,6 +5,11 @@ module Spree
5
5
  module V3
6
6
  module Admin
7
7
  class ExchangeLineItemSerializer < V3::ExchangeLineItemSerializer
8
+ # No guest price gating here, so the inherited money fields are always present.
9
+ typelize original_price: [:string, nullable: false], new_variant_price: [:string, nullable: false],
10
+ price_difference: [:string, nullable: false], original_tax_total: [:string, nullable: false],
11
+ new_tax_total: [:string, nullable: false]
12
+
8
13
  attributes created_at: :iso8601, updated_at: :iso8601
9
14
 
10
15
  one :original_variant, resource: proc { Spree.api.admin_variant_serializer }, if: proc { expand?('original_variant') }