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
@@ -5,6 +5,11 @@ module Spree
5
5
  module V3
6
6
  module Admin
7
7
  class ExchangeSerializer < V3::ExchangeSerializer
8
+ without_formatted_money
9
+
10
+ # No guest price gating here, so the inherited money fields are always present.
11
+ typelize price_difference: [:string, nullable: false]
12
+
8
13
  typelize memo: [:string, nullable: true],
9
14
  metadata: 'Record<string, unknown>',
10
15
  stock_location_id: [:string, nullable: true],
@@ -13,9 +18,7 @@ module Spree
13
18
 
14
19
  attributes :memo, :metadata, created_at: :iso8601, updated_at: :iso8601
15
20
 
16
- attribute :stock_location_id do |exchange|
17
- exchange.stock_location&.prefixed_id
18
- end
21
+ prefixed_id_attributes :stock_location
19
22
 
20
23
  actor_attributes :created_by
21
24
 
@@ -23,13 +23,7 @@ module Spree
23
23
  # it — whose it is. A null `seller_id` means the operator's own.
24
24
  # The name rides along so the list can show who without a second
25
25
  # request per row.
26
- attribute :store_id do |export|
27
- export.store&.prefixed_id
28
- end
29
-
30
- attribute :seller_id do |export|
31
- export.seller&.prefixed_id
32
- end
26
+ prefixed_id_attributes :store, :seller
33
27
 
34
28
  attribute :seller_name do |export|
35
29
  export.seller&.name
@@ -3,7 +3,9 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class FeeSerializer < V3::FeeSerializer
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,11 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class FileUploadSerializer < V3::FileUploadSerializer
6
+ one :upload_target, key: :upload, resource: proc { Spree.api.admin_file_upload_target_serializer }
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class FileUploadTargetSerializer < V3::FileUploadTargetSerializer
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -17,13 +17,7 @@ module Spree
17
17
 
18
18
  attributes :quantity, :status
19
19
 
20
- attribute :variant_id do |item|
21
- item.variant&.prefixed_id
22
- end
23
-
24
- attribute :line_item_id do |item|
25
- item.line_item&.prefixed_id
26
- end
20
+ prefixed_id_attributes :variant, :line_item
27
21
 
28
22
  attribute :name do |item|
29
23
  item.variant&.product&.name
@@ -3,33 +3,29 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class FulfillmentSerializer < V3::FulfillmentSerializer
6
+ without_formatted_money
7
+
6
8
  # The Admin API has no guest gating — money fields inherited from the
7
9
  # store serializer are always present, so override their nullability.
8
- typelize cost: [:string, nullable: false], display_cost: [:string, nullable: false],
9
- total: [:string, nullable: false], display_total: [:string, nullable: false],
10
- discount_total: [:string, nullable: false], display_discount_total: [:string, nullable: false],
11
- additional_tax_total: [:string, nullable: false], display_additional_tax_total: [:string, nullable: false],
12
- included_tax_total: [:string, nullable: false], display_included_tax_total: [:string, nullable: false],
13
- tax_total: [:string, nullable: false], display_tax_total: [:string, nullable: false]
10
+ typelize cost: [:string, nullable: false],
11
+ total: [:string, nullable: false],
12
+ discount_total: [:string, nullable: false],
13
+ additional_tax_total: [:string, nullable: false],
14
+ included_tax_total: [:string, nullable: false],
15
+ tax_total: [:string, nullable: false]
14
16
 
15
17
  typelize metadata: 'Record<string, unknown>',
16
18
  documents: "Array<{ kind: string; url: string }>",
17
19
  provider_generates_labels: :boolean,
18
20
  order_id: [:string, nullable: true],
19
- stock_location_id: [:string, nullable: true],
20
- adjustment_total: :string,
21
- pre_tax_amount: :string
21
+ stock_location_id: [:string, nullable: true]
22
22
 
23
- attributes :metadata, :adjustment_total, :pre_tax_amount,
24
- created_at: :iso8601, updated_at: :iso8601
23
+ attributes :metadata, created_at: :iso8601, updated_at: :iso8601
25
24
 
26
- attribute :order_id do |fulfillment|
27
- fulfillment.order&.prefixed_id
28
- end
25
+ money_attributes :adjustment_total, :pre_tax_amount
26
+ typelize adjustment_total: [:string, nullable: false], pre_tax_amount: [:string, nullable: false]
29
27
 
30
- attribute :stock_location_id do |fulfillment|
31
- fulfillment.stock_location&.prefixed_id
32
- end
28
+ prefixed_id_attributes :order, :stock_location
33
29
 
34
30
  # Customs forms and other paperwork the provider produced beside the
35
31
  # label; the labels themselves are listed under +labels+.
@@ -6,12 +6,12 @@ module Spree
6
6
  # context the admin UI needs: who the card was issued to (customer),
7
7
  # who issued it (admin), and the orders that consumed it.
8
8
  class GiftCardSerializer < V3::GiftCardSerializer
9
+ without_formatted_money
10
+
9
11
  # The Admin API has no guest gating — money fields inherited from the
10
12
  # store serializer are always present, so override their nullability.
11
13
  typelize amount: [:string, nullable: false], amount_used: [:string, nullable: false],
12
- amount_authorized: [:string, nullable: false], amount_remaining: [:string, nullable: false],
13
- display_amount: [:string, nullable: false], display_amount_used: [:string, nullable: false],
14
- display_amount_remaining: [:string, nullable: false]
14
+ amount_authorized: [:string, nullable: false], amount_remaining: [:string, nullable: false]
15
15
 
16
16
  typelize customer_id: [:string, nullable: true],
17
17
  created_by_id: [:string, nullable: true]
@@ -24,13 +24,7 @@ module Spree
24
24
  params[:gift_card_codes] ? gift_card.display_code : gift_card.masked_code
25
25
  end
26
26
 
27
- attribute :customer_id do |gift_card|
28
- gift_card.customer&.prefixed_id
29
- end
30
-
31
- attribute :created_by_id do |gift_card|
32
- gift_card.created_by&.prefixed_id
33
- end
27
+ prefixed_id_attributes :customer, :created_by
34
28
 
35
29
  # Customer the card was issued to. Gated behind `expand?` to keep
36
30
  # the list payload thin — the SPA's list view passes
@@ -9,7 +9,7 @@ module Spree
9
9
  completed_rows_count: :number,
10
10
  failed_rows_count: :number,
11
11
  processing_errors: [:string, nullable: true],
12
- preferred_delimiter: :string,
12
+ delimiter: :string,
13
13
  schema_fields: 'Array<{ name: string; label: string; required: boolean }>',
14
14
  csv_headers: [:string, multi: true],
15
15
  sample_row: 'Record<string, string | null>',
@@ -18,7 +18,7 @@ module Spree
18
18
  original_file_url: [:string, nullable: true],
19
19
  price_list_id: [:string, nullable: true]
20
20
 
21
- attributes :processing_errors, :preferred_delimiter
21
+ attributes :processing_errors, :delimiter
22
22
 
23
23
  # The list a price-list import writes into; nil for every other type.
24
24
  attribute :price_list_id do |import|
@@ -9,8 +9,7 @@ module Spree
9
9
  name: :string,
10
10
  group: [:string, nullable: true],
11
11
  active: :boolean,
12
- preferences: 'Record<string, unknown>',
13
- preference_schema: "Array<{ key: string; type: string; default: unknown; choices?: string[] }>"
12
+ preferences: 'Record<string, unknown>'
14
13
 
15
14
  attributes :name, :active,
16
15
  created_at: :iso8601, updated_at: :iso8601
@@ -24,7 +23,6 @@ module Spree
24
23
  end
25
24
 
26
25
  attribute :preferences, &:serialized_preferences
27
- attribute :preference_schema, &:serialized_preference_schema
28
26
  end
29
27
  end
30
28
  end
@@ -5,16 +5,18 @@ module Spree
5
5
  # Admin API Line Item Serializer
6
6
  # Extends the store serializer with metadata visibility
7
7
  class LineItemSerializer < V3::LineItemSerializer
8
+ without_formatted_money
9
+
8
10
  # The Admin API has no guest gating — money fields inherited from the
9
11
  # store serializer are always present, so override their nullability.
10
- typelize price: [:string, nullable: false], display_price: [:string, nullable: false],
11
- total: [:string, nullable: false], display_total: [:string, nullable: false],
12
- adjustment_total: [:string, nullable: false], display_adjustment_total: [:string, nullable: false],
13
- additional_tax_total: [:string, nullable: false], display_additional_tax_total: [:string, nullable: false],
14
- included_tax_total: [:string, nullable: false], display_included_tax_total: [:string, nullable: false],
15
- discount_total: [:string, nullable: false], display_discount_total: [:string, nullable: false],
16
- pre_tax_amount: [:string, nullable: false], display_pre_tax_amount: [:string, nullable: false],
17
- discounted_amount: [:string, nullable: false], display_discounted_amount: [:string, nullable: false]
12
+ typelize price: [:string, nullable: false],
13
+ total: [:string, nullable: false],
14
+ adjustment_total: [:string, nullable: false],
15
+ additional_tax_total: [:string, nullable: false],
16
+ included_tax_total: [:string, nullable: false],
17
+ discount_total: [:string, nullable: false],
18
+ pre_tax_amount: [:string, nullable: false],
19
+ discounted_amount: [:string, nullable: false]
18
20
 
19
21
  typelize metadata: 'Record<string, unknown>',
20
22
  cost_price: [:string, nullable: true],
@@ -34,7 +36,7 @@ module Spree
34
36
  # Base price, not resolved: resolving would call the pricing provider
35
37
  # once per line on a read path that must stay provider-free.
36
38
  attribute :catalog_price do |line_item|
37
- line_item.variant&.amount_in(line_item.currency)&.to_s
39
+ Spree::Money::Rounding.format(line_item.variant&.amount_in(line_item.currency), line_item.currency, unit_price: true)
38
40
  end
39
41
 
40
42
  # Which agreement priced this line. The list id is stamped on the
@@ -44,9 +46,7 @@ module Spree
44
46
  # Empty on a shop-price or hand-negotiated line. Names ride along
45
47
  # beside the ids so a page of lines does not cost a request each to
46
48
  # label, as `company_name` already does.
47
- attribute :price_list_id do |line_item|
48
- line_item.price_list&.prefixed_id
49
- end
49
+ prefixed_id_attributes :price_list
50
50
 
51
51
  attribute :price_list_name do |line_item|
52
52
  line_item.price_list&.name
@@ -60,13 +60,9 @@ module Spree
60
60
  line_item.price_list&.catalog&.name
61
61
  end
62
62
 
63
- attribute :cost_price do |line_item|
64
- line_item.cost_price&.to_s
65
- end
63
+ money_attributes :cost_price, unit_price: true
66
64
 
67
- attribute :tax_category_id do |line_item|
68
- line_item.tax_category&.prefixed_id
69
- end
65
+ prefixed_id_attributes :tax_category
70
66
 
71
67
  # Override inherited associations to use admin serializers
72
68
  many :option_values, resource: proc { Spree.api.admin_option_value_serializer }
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The dashboard names locales with Intl.DisplayNames in the admin's
6
+ # own language, so the Admin API sends the code alone.
7
+ class LocaleSerializer < V3::LocaleSerializer
8
+ _attributes.delete(:name)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -3,11 +3,16 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class MarketSerializer < V3::MarketSerializer
6
- typelize tax_provider: [:string, nullable: true]
6
+ # The Store API keeps this deprecated name until 6.1.
7
+ _attributes.delete(:country_isos)
8
+
9
+ typelize tax_provider: [:string, nullable: true, comment: 'Tax provider; null uses the store default. Built-in: internal. Provider gems register more.']
10
+
11
+ attributes created_at: :iso8601, updated_at: :iso8601
7
12
 
8
13
  # Which tax engine computes for this market. Nil means the store-wide
9
14
  # default; the selectable values come from /admin/tax_providers.
10
- attributes :tax_provider, created_at: :iso8601, updated_at: :iso8601
15
+ api_type_attributes :tax_provider
11
16
 
12
17
  many :countries,
13
18
  resource: proc { Spree.api.admin_country_serializer },
@@ -52,14 +52,13 @@ module Spree
52
52
  # (a category image, a store logo) accepts on write. Handing it over
53
53
  # lets those fields adopt a library file, sharing the blob instead of
54
54
  # uploading a second copy — the same economics as placing media on a
55
- # product, through endpoints that need no change.
55
+ # product, through endpoints that need no change. Minted fresh, with
56
+ # the same expiry as an upload, on every read.
56
57
  attribute :signed_id do |asset|
57
- asset.attachment_blob&.signed_id
58
+ Spree::Uploads.signed_id_for(asset.attachment_blob) if asset.attachment_blob
58
59
  end
59
60
 
60
- attribute :viewable_id do |asset|
61
- asset.viewable&.prefixed_id
62
- end
61
+ prefixed_id_attributes :viewable
63
62
 
64
63
  # Forces Content-Disposition: attachment so admins downloading from
65
64
  # cloud storage (S3) get a save-as instead of an inline view. Mirrors
@@ -19,9 +19,7 @@ module Spree
19
19
 
20
20
  # Lets the dashboard hide destructive controls instead of offering a
21
21
  # delete that the model will refuse.
22
- attribute :can_be_deleted do |reason|
23
- reason.can_be_deleted?
24
- end
22
+ attribute :can_be_deleted, &:can_be_deleted?
25
23
  end
26
24
  end
27
25
  end
@@ -9,6 +9,8 @@ module Spree
9
9
  # place and this adds only what an operator needs on top: the payment
10
10
  # shares, and the timestamps every admin surface carries.
11
11
  class OrderGroupSerializer < V3::OrderGroupSerializer
12
+ without_formatted_money
13
+
12
14
  typelize customer_id: 'string | null',
13
15
  cart_id: 'string | null',
14
16
  seller_count: :number,
@@ -17,9 +19,7 @@ module Spree
17
19
  store_owner_notification_delivered: :boolean,
18
20
  created_at: :string, updated_at: :string
19
21
 
20
- attribute :customer_id do |group|
21
- group.customer&.prefixed_id
22
- end
22
+ prefixed_id_attributes :customer
23
23
 
24
24
  attribute :cart_id do |group|
25
25
  Spree::Cart.prefixed_id_for(group.cart_id)
@@ -28,13 +28,9 @@ module Spree
28
28
  # How many sellers this checkout reached — the operator's headline
29
29
  # question about a group, and cheaper than counting the orders client
30
30
  # side once a group is large.
31
- attribute :seller_count do |group|
32
- group.seller_count
33
- end
31
+ attributes :seller_count
34
32
 
35
- attribute :includes_first_party do |group|
36
- group.includes_first_party?
37
- end
33
+ attribute :includes_first_party, &:includes_first_party?
38
34
 
39
35
  # A split checkout is confirmed once, from here — every child order
40
36
  # places silently, so their own flags are false and only the group
@@ -12,8 +12,7 @@ module Spree
12
12
  channel_id: :string,
13
13
  position: :number,
14
14
  active: :boolean,
15
- preferences: 'Record<string, unknown>',
16
- preference_schema: "Array<{ key: string; type: string; default: unknown; choices?: string[] }>"
15
+ preferences: 'Record<string, unknown>'
17
16
 
18
17
  attributes :position, :active
19
18
  attributes created_at: :iso8601, updated_at: :iso8601
@@ -22,12 +21,9 @@ module Spree
22
21
  rule.class.api_type
23
22
  end
24
23
 
25
- attribute :channel_id do |rule|
26
- rule.channel&.prefixed_id
27
- end
24
+ prefixed_id_attributes :channel
28
25
 
29
26
  attribute :preferences, &:serialized_preferences
30
- attribute :preference_schema, &:serialized_preference_schema
31
27
 
32
28
  end
33
29
  end
@@ -5,6 +5,8 @@ module Spree
5
5
  # Admin API Order Serializer
6
6
  # Full order data including admin-only fields
7
7
  class OrderSerializer < V3::OrderSerializer
8
+ without_formatted_money
9
+
8
10
  include Concerns::ExternalReferencesAttribute
9
11
 
10
12
 
@@ -16,37 +18,23 @@ module Spree
16
18
 
17
19
  # The Admin API has no guest gating — money fields inherited from the
18
20
  # store serializer are always present, so override their nullability.
19
- typelize item_total: [:string, nullable: false], display_item_total: [:string, nullable: false],
20
- delivery_total: [:string, nullable: false], display_delivery_total: [:string, nullable: false],
21
- adjustment_total: [:string, nullable: false], display_adjustment_total: [:string, nullable: false],
22
- discount_total: [:string, nullable: false], display_discount_total: [:string, nullable: false],
23
- tax_total: [:string, nullable: false], display_tax_total: [:string, nullable: false],
24
- included_tax_total: [:string, nullable: false], display_included_tax_total: [:string, nullable: false],
25
- additional_tax_total: [:string, nullable: false], display_additional_tax_total: [:string, nullable: false],
26
- store_credit_total: [:string, nullable: false], display_store_credit_total: [:string, nullable: false],
27
- gift_card_total: [:string, nullable: false], display_gift_card_total: [:string, nullable: false],
28
- fee_total: [:string, nullable: false], display_fee_total: [:string, nullable: false],
29
- total: [:string, nullable: false], display_total: [:string, nullable: false],
30
- amount_due: [:string, nullable: false], display_amount_due: [:string, nullable: false]
31
-
32
- # Back-office only: what the marketplace earned on this sale — the fee,
33
- # the tax charged on it, and the two together. Never on the store
34
- # serializer: a commission settles between the platform and the
35
- # seller, and the shopper does not pay it.
36
- #
37
- # The tax stands on its own because it is separately reportable —
38
- # the platform files it as output tax on a B2B supply to the seller.
39
- typelize commission_amount_total: [:string, nullable: false],
40
- display_commission_amount_total: [:string, nullable: false],
41
- commission_tax_total: [:string, nullable: false],
42
- display_commission_tax_total: [:string, nullable: false],
43
- commission_total: [:string, nullable: false],
44
- display_commission_total: [:string, nullable: false]
21
+ typelize item_total: [:string, nullable: false],
22
+ delivery_total: [:string, nullable: false],
23
+ adjustment_total: [:string, nullable: false],
24
+ discount_total: [:string, nullable: false],
25
+ tax_total: [:string, nullable: false],
26
+ included_tax_total: [:string, nullable: false],
27
+ additional_tax_total: [:string, nullable: false],
28
+ store_credit_total: [:string, nullable: false],
29
+ gift_card_total: [:string, nullable: false],
30
+ fee_total: [:string, nullable: false],
31
+ total: [:string, nullable: false],
32
+ amount_due: [:string, nullable: false]
45
33
 
46
34
  typelize status: [:string, enum: Spree::Order::STATUSES],
47
35
  last_ip_address: [:string, nullable: true],
48
36
  considered_risky: :boolean, confirmation_delivered: :boolean,
49
- store_owner_notification_delivered: :boolean,
37
+ store_owner_notification_delivered: [:boolean, nullable: true],
50
38
  internal_note: [:string, nullable: true], internal_note_html: [:string, nullable: true],
51
39
  approver_id: [:string, nullable: true],
52
40
  approver_type: [:string, nullable: true, enum: Spree::Actor::BUILT_IN_KINDS, enum_type_name: 'ActorKind'],
@@ -59,24 +47,34 @@ module Spree
59
47
  cancel_reason_id: [:string, nullable: true],
60
48
  cancel_reason_name: [:string, nullable: true],
61
49
  cancel_note: [:string, nullable: true],
62
- payment_total: :string, display_payment_total: :string,
63
50
  tags: [:string, multi: true],
64
51
  metadata: 'Record<string, unknown>'
65
52
 
66
53
  # Admin-only attributes
67
54
  attributes :status, :last_ip_address, :considered_risky,
68
55
  :confirmation_delivered, :store_owner_notification_delivered,
69
- :payment_total, :display_payment_total, :metadata,
70
- :cancel_note,
71
- :commission_amount_total, :display_commission_amount_total,
72
- :commission_tax_total, :display_commission_tax_total,
73
- :commission_total, :display_commission_total,
56
+ :metadata, :cancel_note,
74
57
  canceled_at: :iso8601, approved_at: :iso8601,
75
58
  created_at: :iso8601, updated_at: :iso8601
76
59
 
77
- attribute :preferred_stock_location_id do |order|
78
- order.preferred_stock_location&.prefixed_id
79
- end
60
+ money_attributes :payment_total
61
+ typelize payment_total: [:string, nullable: false]
62
+
63
+ # Back-office only: what the marketplace earned on this sale — the fee,
64
+ # the tax charged on it, and the two together. Never on the store
65
+ # serializer: a commission settles between the platform and the
66
+ # seller, and the shopper does not pay it.
67
+ #
68
+ # The tax stands on its own because it is separately reportable —
69
+ # the platform files it as output tax on a B2B supply to the seller.
70
+ money_attributes :commission_amount_total,
71
+ :commission_tax_total,
72
+ :commission_total
73
+ typelize commission_amount_total: [:string, nullable: false],
74
+ commission_tax_total: [:string, nullable: false],
75
+ commission_total: [:string, nullable: false]
76
+
77
+ prefixed_id_attributes :preferred_stock_location
80
78
 
81
79
  # Our own endpoint rather than a pre-signed storage URL: the
82
80
  # controller streams the bytes, so admin auth runs on every download
@@ -90,9 +88,7 @@ module Spree
90
88
  # Which company node the order is for, so the dashboard can show and
91
89
  # change it. Read back from the column rather than #resolved_company:
92
90
  # a placed order must report what it was stamped with.
93
- attribute :company_id do |order|
94
- order.company&.prefixed_id
95
- end
91
+ prefixed_id_attributes :company
96
92
 
97
93
  attribute :company_name do |order|
98
94
  order.company&.name
@@ -100,9 +96,7 @@ module Spree
100
96
 
101
97
  # Whose sale this is — nil on the operator's own goods. The full
102
98
  # profile is `?expand=seller`.
103
- attribute :seller_id do |order|
104
- order.seller&.prefixed_id
105
- end
99
+ prefixed_id_attributes :seller
106
100
 
107
101
  one :seller,
108
102
  resource: proc { Spree.api.admin_seller_serializer },
@@ -136,9 +130,7 @@ module Spree
136
130
  # secret key names the key.
137
131
  actor_attributes :approver, :canceler, :created_by
138
132
 
139
- attribute :cancel_reason_id do |order|
140
- order.cancel_reason&.prefixed_id
141
- end
133
+ prefixed_id_attributes :cancel_reason
142
134
 
143
135
  # The reason's name alongside its id, so an order list can show why
144
136
  # each canceled order was called off without expanding a record per
@@ -147,9 +139,7 @@ module Spree
147
139
  order.cancel_reason&.name
148
140
  end
149
141
 
150
- attribute :customer_id do |order|
151
- order.customer&.prefixed_id
152
- end
142
+ prefixed_id_attributes :customer
153
143
 
154
144
  # Override inherited associations to use admin serializers
155
145
  # Renamed from the store's `discounts` key: on the admin surface that
@@ -39,9 +39,7 @@ module Spree
39
39
  # Whose packaging this is: a seller's own, or (null) the
40
40
  # marketplace's shared vocabulary
41
41
  # (docs/plans/6.0-seller-package-types.md).
42
- attribute :seller_id do |package_type|
43
- package_type.seller&.prefixed_id
44
- end
42
+ prefixed_id_attributes :seller
45
43
 
46
44
  attribute :seller_name do |package_type|
47
45
  package_type.seller&.name
@@ -4,24 +4,27 @@ module Spree
4
4
  module Admin
5
5
  class PaymentMethodSerializer < V3::PaymentMethodSerializer
6
6
  typelize active: :boolean,
7
- auto_capture: [:boolean, nullable: true],
8
7
  capture_method: "'checkout' | 'on_dispatch' | 'manual' | null",
9
8
  resolved_capture_method: "'checkout' | 'on_dispatch' | 'manual'",
10
9
  storefront_visible: :boolean,
11
10
  position: :number,
12
11
  metadata: 'Record<string, unknown>',
13
12
  preferences: 'Record<string, unknown>',
14
- preference_schema: "Array<{ key: string; type: string; default: unknown; choices?: string[] }>"
13
+ logo_url: [:string, nullable: true],
14
+ docs_url: [:string, nullable: true],
15
+ third_party: :boolean
15
16
 
16
17
  # Null capture_method means the method inherits from its store;
17
18
  # resolved_capture_method is what actually applies, so the dashboard
18
19
  # can show the inherited value.
19
- attributes :metadata, :active, :auto_capture, :capture_method, :resolved_capture_method,
20
+ attributes :metadata, :active, :capture_method, :resolved_capture_method,
20
21
  :storefront_visible, :position,
21
22
  created_at: :iso8601, updated_at: :iso8601
22
23
 
23
24
  attribute :preferences, &:serialized_preferences
24
- attribute :preference_schema, &:serialized_preference_schema
25
+ attribute(:logo_url) { |payment_method| payment_method.class.logo_url }
26
+ attribute(:docs_url) { |payment_method| payment_method.class.docs_url }
27
+ attribute(:third_party) { |payment_method| payment_method.class.third_party? }
25
28
  end
26
29
  end
27
30
  end
@@ -3,12 +3,13 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class PaymentSerializer < V3::PaymentSerializer
6
+ without_formatted_money
7
+
6
8
  # The Admin API has no guest gating — money fields inherited from the
7
9
  # store serializer are always present, so override their nullability.
8
- typelize amount: [:string, nullable: false], display_amount: [:string, nullable: false]
10
+ typelize amount: [:string, nullable: false]
9
11
 
10
12
  typelize metadata: 'Record<string, unknown>',
11
- captured_amount: :string,
12
13
  order_id: [:string, nullable: true],
13
14
  avs_response: [:string, nullable: true],
14
15
  cvv_response_code: [:string, nullable: true],
@@ -17,13 +18,10 @@ module Spree
17
18
  attributes :metadata, :avs_response, :cvv_response_code, :cvv_response_message,
18
19
  created_at: :iso8601, updated_at: :iso8601
19
20
 
20
- attribute :captured_amount do |payment|
21
- payment.captured_amount.to_s
22
- end
21
+ money_attributes :captured_amount
22
+ typelize captured_amount: [:string, nullable: false]
23
23
 
24
- attribute :order_id do |payment|
25
- payment.order&.prefixed_id
26
- end
24
+ prefixed_id_attributes :order
27
25
 
28
26
  # Override inherited associations to use admin serializers
29
27
  one :payment_method, resource: proc { Spree.api.admin_payment_method_serializer }, if: proc { expand?('payment_method') }