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
@@ -11,23 +11,22 @@ module Spree
11
11
  AMOUNTS = %i[authorized_amount captured_amount refunded_amount claimed_amount
12
12
  net_captured_amount refundable_amount].freeze
13
13
 
14
- typelize currency: :string,
14
+ typelize currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
15
15
  payment_id: :string,
16
16
  payment_number: 'string | null',
17
17
  order_id: :string,
18
18
  order_number: 'string | null',
19
- authorized_amount: :string, display_authorized_amount: :string,
20
- captured_amount: :string, display_captured_amount: :string,
21
- refunded_amount: :string, display_refunded_amount: :string,
22
- claimed_amount: :string, display_claimed_amount: :string,
23
- net_captured_amount: :string, display_net_captured_amount: :string,
24
- refundable_amount: :string, display_refundable_amount: :string
19
+ authorized_amount: :string,
20
+ captured_amount: :string,
21
+ refunded_amount: :string,
22
+ claimed_amount: :string,
23
+ net_captured_amount: :string,
24
+ refundable_amount: :string
25
25
 
26
26
  attributes :currency, created_at: :iso8601, updated_at: :iso8601
27
27
 
28
28
  AMOUNTS.each do |amount|
29
- attribute(amount) { |split| split.public_send(amount).to_s }
30
- attribute(:"display_#{amount}") { |split| split.public_send(:"display_#{amount}").to_s }
29
+ attribute(amount) { |split| Spree::Money::Rounding.format(split.public_send(amount), split.currency) }
31
30
  end
32
31
 
33
32
  attribute(:payment_id) { |split| split.payment&.prefixed_id }
@@ -4,7 +4,7 @@ module Spree
4
4
  module Admin
5
5
  # Serializes one permission catalog entry
6
6
  # (Spree::PermissionConfiguration::Entry) for the discovery endpoint.
7
- # Labels and descriptions resolve through Spree.t so backend extensions
7
+ # Labels and descriptions resolve through I18n so backend extensions
8
8
  # localize without shipping dashboard translations.
9
9
  class PermissionSerializer
10
10
  include Alba::Resource
@@ -20,17 +20,17 @@ module Spree
20
20
  attribute(:group) { |entry| entry.scope.group.to_s }
21
21
 
22
22
  attribute(:group_label) do |entry|
23
- Spree.t("permissions_catalog.groups.#{entry.scope.group}",
23
+ I18n.t("spree.permissions_catalog.groups.#{entry.scope.group}",
24
24
  default: entry.scope.group.to_s.humanize)
25
25
  end
26
26
 
27
27
  attribute(:label) do |entry|
28
- Spree.t("permissions_catalog.resources.#{entry.scope.name}.label",
28
+ I18n.t("spree.permissions_catalog.resources.#{entry.scope.name}.label",
29
29
  default: entry.scope.name.to_s.humanize)
30
30
  end
31
31
 
32
32
  attribute(:description) do |entry|
33
- Spree.t("permissions_catalog.resources.#{entry.scope.name}.description", default: '')
33
+ I18n.t("spree.permissions_catalog.resources.#{entry.scope.name}.description", default: '')
34
34
  end
35
35
  end
36
36
  end
@@ -6,15 +6,12 @@ module Spree
6
6
  # the list itself — the storefront sees resolved prices, never the
7
7
  # arithmetic behind them.
8
8
  class PriceAdjustmentTierSerializer < V3::BaseSerializer
9
- typelize min_quantity: :number, percentage: :string
9
+ typelize min_quantity: :number
10
10
 
11
11
  attributes :min_quantity
12
12
 
13
- # A decimal as a string, like every other money-shaped value on the
14
- # wire — a float would round the merchant's own figure.
15
- attribute :percentage do |tier|
16
- tier.percentage&.to_s
17
- end
13
+ rate_attributes :percentage
14
+ typelize percentage: [:string, nullable: false]
18
15
  end
19
16
  end
20
17
  end
@@ -5,9 +5,10 @@ module Spree
5
5
  module V3
6
6
  module Admin
7
7
  class PriceHistorySerializer < V3::PriceHistorySerializer
8
+ without_formatted_money
9
+
8
10
  typelize variant_id: :string,
9
11
  price_id: :string,
10
- compare_at_amount: [:string, nullable: true],
11
12
  created_at: :string
12
13
 
13
14
  attribute :variant_id do |price_history|
@@ -18,7 +19,9 @@ module Spree
18
19
  price_history.price.prefixed_id
19
20
  end
20
21
 
21
- attributes :compare_at_amount, created_at: :iso8601
22
+ money_attributes :compare_at_amount, unit_price: true
23
+
24
+ attributes created_at: :iso8601
22
25
  end
23
26
  end
24
27
  end
@@ -27,11 +27,7 @@ module Spree
27
27
  starts_at: :iso8601, ends_at: :iso8601, deleted_at: :iso8601,
28
28
  created_at: :iso8601, updated_at: :iso8601
29
29
 
30
- # A decimal as a string, like every other money-shaped value on the
31
- # wire — a float would round the merchant's own figure.
32
- attribute :price_adjustment_percentage do |price_list|
33
- price_list.price_adjustment_percentage&.to_s
34
- end
30
+ rate_attributes :price_adjustment_percentage
35
31
 
36
32
  attribute :automatic_pricing, &:automatic_pricing?
37
33
 
@@ -8,8 +8,7 @@ module Spree
8
8
  class PriceRuleSerializer < V3::BaseSerializer
9
9
  typelize type: [:string, comment: 'Rule type. Built-in: channel_rule, customer_group_rule, market_rule, user_rule, volume_rule, zone_rule. Extensions may register more.'],
10
10
  price_list_id: :string,
11
- preferences: 'Record<string, unknown>',
12
- preference_schema: 'Array<{ key: string; type: string; default: unknown }>'
11
+ preferences: 'Record<string, unknown>'
13
12
 
14
13
  attributes created_at: :iso8601, updated_at: :iso8601
15
14
 
@@ -17,12 +16,9 @@ module Spree
17
16
  rule.class.api_type
18
17
  end
19
18
 
20
- attribute :price_list_id do |rule|
21
- rule.price_list&.prefixed_id
22
- end
19
+ prefixed_id_attributes :price_list
23
20
 
24
21
  attribute :preferences, &:serialized_preferences
25
- attribute :preference_schema, &:serialized_preference_schema
26
22
 
27
23
  # Embeds skip rules that don't carry the association (e.g.
28
24
  # VolumeRule has no markets/customers — the keys are omitted).
@@ -5,6 +5,8 @@ module Spree
5
5
  # Admin API Price Serializer
6
6
  # Extends Store Price Serializer with admin-only fields
7
7
  class PriceSerializer < V3::PriceSerializer
8
+ without_formatted_money
9
+
8
10
  typelize variant_id: [:string, nullable: true],
9
11
  min_quantity: :number,
10
12
  created_at: :string,
@@ -6,6 +6,8 @@ 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
+ without_formatted_money
10
+
9
11
  include Concerns::ExternalReferencesAttribute
10
12
 
11
13
  include Spree::Api::V3::Admin::Translatable
@@ -24,9 +26,7 @@ module Spree
24
26
  :metadata, deleted_at: :iso8601,
25
27
  created_at: :iso8601, updated_at: :iso8601
26
28
 
27
- attribute :delivery_profile_id do |product|
28
- product.delivery_profile&.prefixed_id
29
- end
29
+ prefixed_id_attributes :delivery_profile
30
30
 
31
31
  # The live row in the review trail: who submitted, who decided,
32
32
  # when, and what the seller was told. Expanded rather than always
@@ -47,13 +47,7 @@ module Spree
47
47
  resource: proc { Spree.api.admin_seller_serializer },
48
48
  if: proc { expand?('seller') }
49
49
 
50
- attribute :product_type_id do |product|
51
- product.product_type&.prefixed_id
52
- end
53
-
54
- attribute :tax_category_id do |product|
55
- product.tax_category&.prefixed_id
56
- end
50
+ prefixed_id_attributes :product_type, :tax_category
57
51
 
58
52
  attribute :price do |product|
59
53
  price = price_for(product.default_variant)
@@ -14,13 +14,7 @@ module Spree
14
14
 
15
15
  attributes :metadata, updated_at: :iso8601
16
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
17
+ prefixed_id_attributes :submitted_by, :reviewed_by
24
18
 
25
19
  # An operator reading the trail wants a name, not an id to resolve.
26
20
  attribute :reviewed_by_name do |submission|
@@ -29,9 +23,7 @@ module Spree
29
23
 
30
24
  # Distinguishes "the store approves listings automatically" from a
31
25
  # decision whose author we failed to record.
32
- attribute :auto_approved do |submission|
33
- submission.auto_approved?
34
- end
26
+ attribute :auto_approved, &:auto_approved?
35
27
  end
36
28
  end
37
29
  end
@@ -15,9 +15,7 @@ module Spree
15
15
 
16
16
  # The creation-time template: stamped onto products at creation,
17
17
  # never synced afterwards.
18
- attribute :delivery_profile_id do |record|
19
- record.delivery_profile&.prefixed_id
20
- end
18
+ prefixed_id_attributes :delivery_profile
21
19
 
22
20
  # Prefixed ids of the option types and categories this type seeds onto
23
21
  # new products — the same payload the client sends back on PATCH.
@@ -7,13 +7,13 @@ module Spree
7
7
  # Serializes Spree::PromotionAction (and its STI subclasses) for the
8
8
  # admin promotion editor. The shape is intentionally generic so a
9
9
  # single component can render any subclass — `preferences` is the
10
- # current value hash, `preference_schema` describes its fields.
10
+ # current value hash, described by the `schema` its type's entry in
11
+ # `/promotion_actions/types` carries.
11
12
  class PromotionActionSerializer < BaseSerializer
12
13
  typelize type: [:string, comment: 'Action type. Built-in: create_adjustment, create_item_adjustments, create_line_items, free_shipping. Extensions may register more.'],
13
14
  promotion_id: :string,
14
15
  preferences: 'Record<string, unknown>',
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",
16
+ calculator: 'TypedPromotionCalculator | null',
17
17
  line_items: 'Array<{ variant_id: string; quantity: number }> | null'
18
18
 
19
19
  attributes created_at: :iso8601, updated_at: :iso8601
@@ -22,12 +22,9 @@ module Spree
22
22
  action.class.api_type
23
23
  end
24
24
 
25
- attribute :promotion_id do |action|
26
- action.promotion&.prefixed_id
27
- end
25
+ prefixed_id_attributes :promotion
28
26
 
29
27
  attribute :preferences, &:serialized_preferences
30
- attribute :preference_schema, &:serialized_preference_schema
31
28
 
32
29
  # Calculator is exposed as a nested object so the SPA can render
33
30
  # the calculator picker + its own preference fields. Null for
@@ -40,8 +37,7 @@ module Spree
40
37
  calc = action.calculator
41
38
  {
42
39
  type: calc.class.api_type,
43
- preferences: calc.serialized_preferences,
44
- preference_schema: calc.serialized_preference_schema
40
+ preferences: calc.serialized_preferences
45
41
  }
46
42
  end
47
43
 
@@ -11,7 +11,6 @@ module Spree
11
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; choices?: string[] }>",
15
14
  product_ids: 'Array<string> | null',
16
15
  category_ids: 'Array<string> | null',
17
16
  customer_ids: 'Array<string> | null',
@@ -23,12 +22,9 @@ module Spree
23
22
  rule.class.api_type
24
23
  end
25
24
 
26
- attribute :promotion_id do |rule|
27
- rule.promotion&.prefixed_id
28
- end
25
+ prefixed_id_attributes :promotion
29
26
 
30
27
  attribute :preferences, &:serialized_preferences
31
- attribute :preference_schema, &:serialized_preference_schema
32
28
 
33
29
  # Association IDs for rules that wire products/taxons/users through
34
30
  # join tables. Returned as prefixed IDs to match the rest of the
@@ -9,11 +9,7 @@ module Spree
9
9
  quantity_rejected: :number,
10
10
  quantity_over: :number,
11
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',
12
+ currency: [:string, nullable: true, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
17
13
  purchase_order_id: 'string | null',
18
14
  thumbnail_url: 'string | null',
19
15
  product_id: 'string | null',
@@ -26,31 +22,16 @@ module Spree
26
22
  :outstanding, :currency,
27
23
  created_at: :iso8601, updated_at: :iso8601
28
24
 
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
25
+ money_attributes :unit_cost, unit_price: true
26
+ money_attributes :total_cost
27
+ typelize unit_cost: [:string, nullable: false],
28
+ total_cost: [:string, nullable: false]
46
29
 
47
30
  attribute :purchase_order_id do |item|
48
31
  Spree::PurchaseOrder.prefixed_id_for(item.purchase_order_id)
49
32
  end
50
33
 
51
- attribute :variant_id do |item|
52
- item.variant&.prefixed_id
53
- end
34
+ prefixed_id_attributes :variant
54
35
 
55
36
  # The product the line's variant belongs to, so a line can link
56
37
  # straight to the screen where that SKU's stock lives.
@@ -7,7 +7,7 @@ module Spree
7
7
  class PurchaseOrderSerializer < V3::BaseSerializer
8
8
  typelize number: :string,
9
9
  status: :string,
10
- currency: :string,
10
+ currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
11
11
  reference: 'string | null',
12
12
  notes: 'string | null',
13
13
  supplier_id: 'string | null',
@@ -21,8 +21,6 @@ module Spree
21
21
  quantity_rejected_total: :number,
22
22
  quantity_ordered_total: :number,
23
23
  quantity_received_total: :number,
24
- subtotal: :string,
25
- display_subtotal: :string,
26
24
  editable: :boolean,
27
25
  ordered_at: 'string | null',
28
26
  received_at: 'string | null',
@@ -56,21 +54,10 @@ module Spree
56
54
 
57
55
  attribute :editable, &:editable?
58
56
 
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
57
+ money_attributes :subtotal
58
+ typelize subtotal: [:string, nullable: false]
66
59
 
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
60
+ prefixed_id_attributes :supplier, :destination_location
74
61
 
75
62
  many :items,
76
63
  resource: proc { Spree.api.admin_purchase_order_item_serializer },
@@ -17,9 +17,7 @@ module Spree
17
17
 
18
18
  # Lets the dashboard hide destructive controls instead of offering a
19
19
  # delete that the model will refuse.
20
- attribute :can_be_deleted do |reason|
21
- reason.can_be_deleted?
22
- end
20
+ attribute :can_be_deleted, &:can_be_deleted?
23
21
  end
24
22
  end
25
23
  end
@@ -3,6 +3,9 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class RefundSerializer < V3::RefundSerializer
6
+ # The Store API keeps this deprecated name until 6.1.
7
+ _attributes.delete(:reimbursement_id)
8
+
6
9
  typelize payment_id: [:string, nullable: true],
7
10
  refund_reason_id: [:string, nullable: true],
8
11
  refunder_id: [:string, nullable: true],
@@ -12,6 +15,10 @@ module Spree
12
15
  attributes :metadata,
13
16
  created_at: :iso8601, updated_at: :iso8601
14
17
 
18
+ # The tax inside the amount, when what was refunded carried tax.
19
+ money_attributes :tax_amount
20
+ typelize tax_amount: [:string, nullable: false]
21
+
15
22
  # Who issued it — an admin user, or the API key an integration
16
23
  # refunded through.
17
24
  actor_attributes :refunder
@@ -2,8 +2,9 @@ module Spree
2
2
  module Api
3
3
  module V3
4
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
5
+ # Decorates a Spree::Reporting::Result for the wire: money as decimal
6
+ # strings in the result's currency, ratios and growth as plain decimal
7
+ # strings, counts as integers, money display strings, ISO ranges, and dimension hydration (raw group keys become
7
8
  # { id, label, meta } display payloads — see Spree::Reporting::Hydration).
8
9
  class ReportingResultSerializer
9
10
  attr_reader :result, :store, :params
@@ -39,7 +40,13 @@ module Spree
39
40
  end
40
41
 
41
42
  def metric_payload(name, payload)
43
+ metric = Spree.reporting.metrics[name]
42
44
  output = payload.dup
45
+ if metric
46
+ output[:value] = metric.format_value(payload[:value], result.meta[:currency])
47
+ output[:previous] = metric.format_value(payload[:previous], result.meta[:currency]) if payload.key?(:previous)
48
+ end
49
+ output[:growth] = Spree::Money::Rounding.format_decimal(payload[:growth]) if payload.key?(:growth)
43
50
  output[:display] = money(payload[:value]) if money_metrics.include?(name)
44
51
  output
45
52
  end
@@ -5,10 +5,19 @@ module Spree
5
5
  module V3
6
6
  module Admin
7
7
  class ReturnLineItemSerializer < V3::ReturnLineItemSerializer
8
+ without_formatted_money
9
+
10
+ # No guest price gating here, so the inherited money fields are always present.
11
+ typelize pre_tax_amount: [:string, nullable: false],
12
+ included_tax_total: [:string, nullable: false], additional_tax_total: [:string, nullable: false],
13
+ tax_total: [:string, nullable: false],
14
+ refund_amount: [:string, nullable: false]
15
+
8
16
  attributes created_at: :iso8601, updated_at: :iso8601
9
17
 
10
18
  one :variant, resource: proc { Spree.api.admin_variant_serializer }, if: proc { expand?('variant') }
11
19
  one :line_item, resource: proc { Spree.api.admin_line_item_serializer }, if: proc { expand?('line_item') }
20
+ many :tax_lines, resource: proc { Spree.api.admin_tax_line_serializer }, if: proc { expand?('tax_lines') }
12
21
  end
13
22
  end
14
23
  end
@@ -11,9 +11,7 @@ module Spree
11
11
 
12
12
  # Lets the dashboard hide destructive controls instead of offering a
13
13
  # delete that the model will refuse.
14
- attribute :can_be_deleted do |reason|
15
- reason.can_be_deleted?
16
- end
14
+ attribute :can_be_deleted, &:can_be_deleted?
17
15
  end
18
16
  end
19
17
  end
@@ -5,30 +5,26 @@ module Spree
5
5
  module V3
6
6
  module Admin
7
7
  class ReturnSerializer < V3::ReturnSerializer
8
+ without_formatted_money
9
+
8
10
  typelize memo: [:string, nullable: true],
9
11
  metadata: 'Record<string, unknown>',
10
12
  documents: "Array<{ kind: string; url: string }>",
11
13
  stock_location_id: [:string, nullable: true],
12
14
  created_by_id: [:string, nullable: true],
13
15
  created_by_type: [:string, nullable: true, enum: Spree::Actor::BUILT_IN_KINDS, enum_type_name: 'ActorKind'],
14
- refunded_total: :string,
15
- refundable_total: :string
16
+ refund_total: [:string, nullable: false],
17
+ refund_tax_total: [:string, nullable: false]
16
18
 
17
19
  attributes :memo, :metadata, created_at: :iso8601, updated_at: :iso8601
18
20
 
19
- attribute :stock_location_id do |return_record|
20
- return_record.stock_location&.prefixed_id
21
- end
21
+ prefixed_id_attributes :stock_location
22
22
 
23
23
  actor_attributes :created_by
24
24
 
25
- attribute :refunded_total do |return_record|
26
- return_record.refunded_total.to_s
27
- end
28
-
29
- attribute :refundable_total do |return_record|
30
- return_record.refundable_total.to_s
31
- end
25
+ money_attributes :refunded_total, :refundable_total
26
+ typelize refunded_total: [:string, nullable: false],
27
+ refundable_total: [:string, nullable: false]
32
28
 
33
29
  many :return_line_items,
34
30
  resource: proc { Spree.api.admin_return_line_item_serializer },
@@ -16,9 +16,7 @@ module Spree
16
16
 
17
17
  attributes :name, :description, :query, :seeded, :created_at, :updated_at
18
18
 
19
- attribute :user_id do |report|
20
- report.user&.prefixed_id
21
- end
19
+ prefixed_id_attributes :user
22
20
 
23
21
  # The same "name, else email" rule every actor answers, so a report's
24
22
  # author and an order's canceler read alike.
@@ -6,14 +6,14 @@ module Spree
6
6
  # operator. A computed value rather than a record, so it carries no id.
7
7
  class SellerBalanceSerializer < V3::BaseSerializer
8
8
  typelize seller_id: :string,
9
- currency: :string,
10
- settlement_currency: :string,
9
+ currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
10
+ settlement_currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
11
11
  converted: :boolean,
12
- earned: :string, display_earned: :string,
13
- payable: :string, display_payable: :string,
14
- paid: :string, display_paid: :string,
15
- balance: :string, display_balance: :string,
16
- pending: :string, display_pending: :string
12
+ earned: :string,
13
+ payable: :string,
14
+ paid: :string,
15
+ balance: :string,
16
+ pending: :string
17
17
 
18
18
  _attributes.delete(:id)
19
19
 
@@ -26,9 +26,14 @@ module Spree
26
26
 
27
27
  attribute(:seller_id) { |balance| balance.seller&.prefixed_id }
28
28
 
29
- %i[earned payable paid balance pending].each do |figure|
30
- attribute(figure) { |balance| balance.public_send(figure).to_s }
31
- attribute(:"display_#{figure}") { |balance| balance.public_send(:"display_#{figure}").to_s }
29
+ # Earnings are in the currency the sales were priced in; what the
30
+ # account holds is in the one it settles in.
31
+ %i[earned pending].each do |figure|
32
+ attribute(figure) { |balance| Spree::Money::Rounding.format(balance.public_send(figure), balance.currency) }
33
+ end
34
+
35
+ %i[payable paid balance].each do |figure|
36
+ attribute(figure) { |balance| Spree::Money::Rounding.format(balance.public_send(figure), balance.settlement_currency) }
32
37
  end
33
38
  end
34
39
  end
@@ -11,21 +11,19 @@ module Spree
11
11
  typelize seller_id: :string,
12
12
  seller_name: 'string | null',
13
13
  status: [:string, enum: Spree::SellerPayout.statuses, enum_type_name: 'SellerPayoutStatus'],
14
- provider: [:string, comment: 'Payout provider class name. Built-in: Spree::PayoutProvider::System. Provider gems register more.'],
14
+ provider: [:string, comment: 'Payout provider. Built-in: system. Provider gems register more (e.g. stripe).'],
15
15
  amount: :string,
16
- currency: :string,
16
+ currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
17
17
  reference: 'string | null',
18
18
  period_start: 'string | null',
19
19
  period_end: 'string | null',
20
- transfers_count: :number,
21
- display_amount: :string
20
+ transfers_count: :number
22
21
 
23
- attributes :status, :currency, :provider, :reference, :metadata,
22
+ attributes :status, :currency, :reference, :metadata,
24
23
  period_start: :iso8601, period_end: :iso8601,
25
24
  created_at: :iso8601, updated_at: :iso8601
26
25
 
27
- attribute(:amount) { |payout| payout.amount&.to_s }
28
- attribute(:display_amount) { |payout| payout.display_amount.to_s }
26
+ attribute(:amount) { |payout| Spree::Money::Rounding.format(payout.amount, payout.currency) }
29
27
  attribute(:seller_id) { |payout| payout.seller&.prefixed_id }
30
28
  attribute(:seller_name) { |payout| payout.seller&.name }
31
29
 
@@ -39,6 +37,8 @@ module Spree
39
37
 
40
38
  counts ? counts.fetch(payout.id, 0) : payout.transfers.count
41
39
  end
40
+
41
+ api_type_attributes :provider
42
42
  end
43
43
  end
44
44
  end
@@ -22,17 +22,13 @@ module Spree
22
22
  # Whether this stands between the seller and approval. Serialized
23
23
  # rather than left to each client to derive, so the dashboard's
24
24
  # override warning and the approval gate cannot disagree.
25
- attribute :blocking do |status|
26
- status.blocking?
27
- end
25
+ attribute :blocking, &:blocking?
28
26
 
29
27
  # The document this line asks for, and what the seller published
30
28
  # against it. Embedded rather than left to a second request: the
31
29
  # operator is deciding whether to approve, and a line that says
32
30
  # "Done" without showing the text is not something to approve on.
33
- attribute :required_policy_name do |status|
34
- status.required_policy_name
35
- end
31
+ attributes :required_policy_name
36
32
 
37
33
  one :submission,
38
34
  resource: proc { Spree.api.admin_seller_requirement_submission_serializer },
@@ -21,13 +21,7 @@ module Spree
21
21
  created_at: :iso8601,
22
22
  updated_at: :iso8601
23
23
 
24
- attribute :seller_id do |submission|
25
- submission.seller&.prefixed_id
26
- end
27
-
28
- attribute :requirement_id do |submission|
29
- submission.requirement&.prefixed_id
30
- end
24
+ prefixed_id_attributes :seller, :requirement
31
25
 
32
26
  # The reviewer is looking at a queue of these and needs to know what
33
27
  # each one answers without fetching the requirement.