spree_api 6.0.0.rc1 → 6.0.0.rc3

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 (371) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +0 -17
  3. data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
  4. data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
  5. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +14 -28
  6. data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
  7. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +3 -2
  8. data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +1 -1
  9. data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
  10. data/app/controllers/concerns/spree/api/v3/error_handler.rb +48 -2
  11. data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
  12. data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
  13. data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
  14. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +6 -6
  15. data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
  16. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +1 -5
  17. data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
  18. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +5 -21
  19. data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
  20. data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
  21. data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
  22. data/app/controllers/concerns/spree/api/v3/store/search_provider_support.rb +8 -3
  23. data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
  24. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +10 -1
  25. data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
  26. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +15 -7
  27. data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
  28. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +3 -1
  29. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -5
  30. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +60 -33
  31. data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
  32. data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
  33. data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -6
  34. data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
  35. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +4 -1
  36. data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
  37. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +60 -12
  38. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -0
  39. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -1
  40. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +19 -18
  41. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -1
  42. data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -3
  43. data/app/controllers/spree/api/v3/admin/countries_controller.rb +5 -1
  44. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +21 -11
  45. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -5
  46. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -1
  47. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -7
  48. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -9
  49. data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
  50. data/app/controllers/spree/api/v3/admin/customers_controller.rb +35 -7
  51. data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
  52. data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
  53. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +15 -7
  54. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +92 -57
  55. data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
  56. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +13 -1
  57. data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
  58. data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +14 -1
  59. data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +4 -0
  60. data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +7 -0
  61. data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +8 -0
  62. data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +4 -0
  63. data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
  64. data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
  65. data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
  66. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
  67. data/app/controllers/spree/api/v3/admin/imports_controller.rb +36 -9
  68. data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
  69. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
  70. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -1
  71. data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
  72. data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
  73. data/app/controllers/spree/api/v3/admin/me_controller.rb +12 -3
  74. data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
  75. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +4 -0
  76. data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
  77. data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
  78. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -1
  79. data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
  80. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +19 -1
  81. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +5 -1
  82. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +29 -5
  83. data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
  84. data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
  85. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +66 -7
  86. data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +6 -2
  87. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
  88. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +35 -2
  89. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +16 -5
  90. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +6 -0
  91. data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
  92. data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
  93. data/app/controllers/spree/api/v3/admin/orders_controller.rb +74 -60
  94. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
  95. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +17 -0
  96. data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
  97. data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
  98. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +27 -15
  99. data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -4
  100. data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
  101. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +27 -10
  102. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -14
  103. data/app/controllers/spree/api/v3/admin/products_controller.rb +121 -70
  104. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -2
  105. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -1
  106. data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
  107. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +54 -7
  108. data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
  109. data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
  110. data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
  111. data/app/controllers/spree/api/v3/admin/resource_controller.rb +1 -0
  112. data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
  113. data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
  114. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +6 -0
  115. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +15 -0
  116. data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
  117. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +75 -22
  118. data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -15
  119. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
  120. data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
  121. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +48 -7
  122. data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -53
  123. data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
  124. data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
  125. data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
  126. data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
  127. data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
  128. data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
  129. data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
  130. data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
  131. data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
  132. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +23 -1
  133. data/app/controllers/spree/api/v3/base_controller.rb +2 -0
  134. data/app/controllers/spree/api/v3/resource_controller.rb +63 -10
  135. data/app/controllers/spree/api/v3/seller/auth_controller.rb +8 -0
  136. data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
  137. data/app/controllers/spree/api/v3/seller/countries_controller.rb +2 -2
  138. data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
  139. data/app/controllers/spree/api/v3/seller/exports_controller.rb +18 -1
  140. data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
  141. data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
  142. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +9 -1
  143. data/app/controllers/spree/api/v3/seller/me_controller.rb +14 -3
  144. data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
  145. data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
  146. data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
  147. data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
  148. data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
  149. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +22 -1
  150. data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
  151. data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
  152. data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
  153. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
  154. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +10 -0
  155. data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
  156. data/app/controllers/spree/api/v3/seller/products_controller.rb +114 -28
  157. data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
  158. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +12 -5
  159. data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
  160. data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
  161. data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
  162. data/app/controllers/spree/api/v3/seller/team_controller.rb +4 -0
  163. data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
  164. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +8 -1
  165. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +10 -2
  166. data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +8 -1
  167. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +17 -5
  168. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +20 -6
  169. data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +11 -0
  170. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +24 -26
  171. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +19 -1
  172. data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
  173. data/app/controllers/spree/api/v3/store/carts_controller.rb +54 -47
  174. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -4
  175. data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
  176. data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
  177. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +9 -1
  178. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -7
  179. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -0
  180. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +17 -0
  181. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -5
  182. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
  183. data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
  184. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +22 -0
  185. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +11 -2
  186. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +10 -1
  187. data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
  188. data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
  189. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -4
  190. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
  191. data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
  192. data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
  193. data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
  194. data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
  195. data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
  196. data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
  197. data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
  198. data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
  199. data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
  200. data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
  201. data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
  202. data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
  203. data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
  204. data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
  205. data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
  206. data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
  207. data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
  208. data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
  209. data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
  210. data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
  211. data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
  212. data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +31 -0
  213. data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
  214. data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
  215. data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
  216. data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
  217. data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
  218. data/app/serializers/spree/api/v3/admin/address_serializer.rb +3 -0
  219. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
  220. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
  221. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -2
  222. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
  223. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
  224. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +5 -7
  225. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
  226. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
  227. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
  228. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
  229. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +0 -2
  230. data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
  231. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +3 -7
  232. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
  233. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +14 -10
  234. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
  235. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
  236. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
  237. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
  238. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +5 -0
  239. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
  240. data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
  241. data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
  242. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -11
  243. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +3 -3
  244. data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
  245. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
  246. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +12 -12
  247. data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
  248. data/app/serializers/spree/api/v3/admin/market_serializer.rb +3 -0
  249. data/app/serializers/spree/api/v3/admin/media_serializer.rb +3 -2
  250. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +2 -0
  251. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +1 -3
  252. data/app/serializers/spree/api/v3/admin/order_serializer.rb +33 -33
  253. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +1 -4
  254. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -3
  255. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
  256. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
  257. data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +6 -2
  258. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
  259. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +1 -3
  260. data/app/serializers/spree/api/v3/admin/price_serializer.rb +4 -0
  261. data/app/serializers/spree/api/v3/admin/product_serializer.rb +2 -0
  262. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +4 -6
  263. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +0 -2
  264. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +5 -11
  265. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -4
  266. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -3
  267. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
  268. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +8 -0
  269. data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -4
  270. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
  271. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +3 -5
  272. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +3 -1
  273. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +7 -8
  274. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +4 -4
  275. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +3 -0
  276. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +2 -6
  277. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +5 -0
  278. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +9 -4
  279. data/app/serializers/spree/api/v3/admin/store_serializer.rb +17 -98
  280. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +1 -1
  281. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +3 -1
  282. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +4 -2
  283. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +2 -12
  284. data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
  285. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +7 -3
  286. data/app/serializers/spree/api/v3/base_serializer.rb +112 -7
  287. data/app/serializers/spree/api/v3/cart_serializer.rb +16 -30
  288. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +5 -13
  289. data/app/serializers/spree/api/v3/claim_serializer.rb +2 -3
  290. data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
  291. data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
  292. data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
  293. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -12
  294. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
  295. data/app/serializers/spree/api/v3/discount_serializer.rb +4 -1
  296. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +2 -8
  297. data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -3
  298. data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
  299. data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
  300. data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +2 -4
  301. data/app/serializers/spree/api/v3/gift_card_serializer.rb +4 -2
  302. data/app/serializers/spree/api/v3/import_serializer.rb +0 -12
  303. data/app/serializers/spree/api/v3/line_item_serializer.rb +15 -5
  304. data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
  305. data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
  306. data/app/serializers/spree/api/v3/media_serializer.rb +7 -2
  307. data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -4
  308. data/app/serializers/spree/api/v3/order_serializer.rb +5 -23
  309. data/app/serializers/spree/api/v3/payment_session_serializer.rb +2 -4
  310. data/app/serializers/spree/api/v3/price_history_serializer.rb +11 -6
  311. data/app/serializers/spree/api/v3/price_serializer.rb +17 -10
  312. data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
  313. data/app/serializers/spree/api/v3/product_serializer.rb +3 -3
  314. data/app/serializers/spree/api/v3/refund_serializer.rb +8 -5
  315. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +3 -11
  316. data/app/serializers/spree/api/v3/return_serializer.rb +3 -6
  317. data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
  318. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
  319. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
  320. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
  321. data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
  322. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
  323. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +4 -8
  324. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +9 -8
  325. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
  326. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +5 -0
  327. data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
  328. data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
  329. data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
  330. data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
  331. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +4 -3
  332. data/app/serializers/spree/api/v3/seller/order_serializer.rb +16 -16
  333. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
  334. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +2 -4
  335. data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +12 -0
  336. data/app/serializers/spree/api/v3/seller/price_serializer.rb +13 -0
  337. data/app/serializers/spree/api/v3/seller/product_serializer.rb +2 -0
  338. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +7 -7
  339. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
  340. data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -5
  341. data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
  342. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
  343. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +6 -7
  344. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
  345. data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
  346. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +1 -3
  347. data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -5
  348. data/app/serializers/spree/api/v3/tax_line_serializer.rb +2 -4
  349. data/app/serializers/spree/api/v3/variant_serializer.rb +3 -3
  350. data/app/services/spree/api/v3/filter_predicates.rb +29 -0
  351. data/app/services/spree/api/v3/filter_table.rb +337 -0
  352. data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
  353. data/app/services/spree/api/v3/request_schema.rb +430 -0
  354. data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
  355. data/config/initializers/typelizer.rb +1 -1
  356. data/config/routes.rb +5 -3
  357. data/lib/spree/api/configuration.rb +5 -0
  358. data/lib/spree/api/dependencies.rb +7 -6
  359. data/lib/spree/api/middleware/request_size_limit.rb +24 -3
  360. data/lib/spree/api/openapi/filter_documentation.rb +136 -0
  361. data/lib/spree/api/openapi/schema_helper.rb +126 -80
  362. data/lib/spree/api/preference_families.rb +46 -0
  363. data/lib/spree/api/preference_types.rb +138 -0
  364. data/lib/spree/api/typelizer_generation.rb +4 -0
  365. data/lib/tasks/filters.rake +12 -0
  366. data/lib/typelizer/open_enums.rb +10 -0
  367. metadata +60 -10
  368. data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
  369. data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
  370. data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
  371. data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
@@ -32,8 +32,13 @@ module Spree
32
32
  ids.compact.uniq
33
33
  end
34
34
 
35
- attributes :position, :alt, :media_type,
36
- :focal_point_x, :focal_point_y, :external_video_url
35
+ attributes :position, :alt, :media_type, :external_video_url
36
+
37
+ # Decimal columns serialize as strings; a focal point is a 0–1
38
+ # position on the image, which clients read as a number.
39
+ %i[focal_point_x focal_point_y].each do |name|
40
+ attribute(name) { |asset| asset.public_send(name)&.to_f }
41
+ end
37
42
 
38
43
  # Spree parses the YouTube/Vimeo link once, here, so no storefront has
39
44
  # to reimplement it. Nil on anything that isn't an external video.
@@ -8,9 +8,7 @@ module Spree
8
8
  # their order history shows them — with the per-seller orders nested
9
9
  # inside it, each carrying its own items, delivery and tracking.
10
10
  class OrderGroupSerializer < BaseSerializer
11
- typelize number: :string, email: [:string, nullable: true], currency: :string,
12
- total: [:string, nullable: true], display_total: [:string, nullable: true],
13
- item_total: [:string, nullable: true], display_item_total: [:string, nullable: true],
11
+ typelize number: :string, email: [:string, nullable: true], currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
14
12
  fulfillment_status: [:string, nullable: true, enum: Spree::Order::FULFILLMENT_STATUSES],
15
13
  payment_status: [:string, nullable: true, enum: Spree::Order::PAYMENT_STATUSES],
16
14
  completed_at: [:string, nullable: true],
@@ -18,7 +16,11 @@ module Spree
18
16
 
19
17
  attributes :number, :email, :currency
20
18
 
21
- attributes total: :string, display_total: :string, item_total: :string, display_item_total: :string
19
+ # Every figure is rolled up from the children, never prorated back
20
+ # down. The payments are the group's own: a split checkout pays once,
21
+ # against the group, so a child holds none.
22
+ include Spree::Api::V3::PurchaseSummary
23
+
22
24
  # Rolled up across the children rather than stored, so it can never
23
25
  # disagree with the orders it describes.
24
26
  attributes :fulfillment_status, :payment_status
@@ -30,6 +32,12 @@ module Spree
30
32
  one :billing_address, resource: proc { Spree.api.address_serializer }
31
33
  one :shipping_address, resource: proc { Spree.api.address_serializer }
32
34
 
35
+ # The card itself is deliberately not nested here — the split copies it
36
+ # onto every child, so it is already in the payload, and a group this
37
+ # deep pushes the generated Zod schema past what TypeScript will
38
+ # serialize into a declaration file. `gift_card_total` is the figure a
39
+ # summary needs, and only the group can answer it.
40
+
33
41
  # The whole point of the group: the customer sees one purchase, and the
34
42
  # seller orders inside it are how it will arrive.
35
43
  many :orders, resource: proc { Spree.api.order_serializer }
@@ -9,12 +9,11 @@ module Spree
9
9
  channel_id: [:string, nullable: true], company_id: [:string, nullable: true],
10
10
  company_name: [:string, nullable: true], po_number: [:string, nullable: true],
11
11
  po_document_filename: [:string, nullable: true], po_document_byte_size: ['number | null'],
12
- currency: :string, locale: [:string, nullable: true], total_quantity: :number,
12
+ currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'], locale: [:string, nullable: true, enum: Spree::Locales::ALL, enum_type_name: 'LocaleCode'], total_quantity: :number,
13
13
  coupon_code: [:string, nullable: true],
14
14
  fulfillment_status: [:string, nullable: true, enum: Spree::Order::FULFILLMENT_STATUSES],
15
15
  payment_status: [:string, nullable: true, enum: Spree::Order::PAYMENT_STATUSES],
16
- store_credit_total: [:string, nullable: true], display_store_credit_total: [:string, nullable: true],
17
- covered_by_store_credit: :boolean, completed_at: [:string, nullable: true],
16
+ completed_at: [:string, nullable: true],
18
17
  withdrawal_period_ends_at: [:string, nullable: true], within_withdrawal_period: :boolean,
19
18
  billing_address: { nullable: true }, shipping_address: { nullable: true },
20
19
  gift_card: { nullable: true }, market: { nullable: true }
@@ -64,25 +63,9 @@ module Spree
64
63
 
65
64
  # Nulled for gated (prices_hidden) guests, consistent with cart and
66
65
  # catalog price hiding.
67
- money_attributes :item_total, :display_item_total,
68
- :adjustment_total, :display_adjustment_total,
69
- :discount_total, :display_discount_total,
70
- :tax_total, :display_tax_total, :included_tax_total, :display_included_tax_total,
71
- :additional_tax_total, :display_additional_tax_total, :total, :display_total,
72
- :gift_card_total, :display_gift_card_total,
73
- :amount_due, :display_amount_due,
74
- :delivery_total, :display_delivery_total,
75
- :fee_total, :display_fee_total
76
-
77
- attribute :store_credit_total do |order|
78
- order.total_applied_store_credit.to_s unless params[:hide_prices]
79
- end
80
-
81
- attribute :display_store_credit_total do |order|
82
- order.display_total_applied_store_credit.to_s unless params[:hide_prices]
83
- end
84
-
85
- attribute :covered_by_store_credit, &:covered_by_store_credit?
66
+ include Spree::Api::V3::PurchaseSummary
67
+ money_attributes :adjustment_total, :display_adjustment_total,
68
+ descriptions: { adjustment_total: 'Every discount, fee and added tax together, as one amount.' }
86
69
 
87
70
  many :order_promotions, key: :discounts, resource: proc { Spree.api.applied_promotion_serializer }
88
71
  # Itemized charges (duties, surcharges, COD, handling) — see the cart
@@ -90,7 +73,6 @@ module Spree
90
73
  many :fees, resource: proc { Spree.api.fee_serializer }
91
74
  many :line_items, key: :items, resource: proc { Spree.api.line_item_serializer }
92
75
  many :fulfillments, resource: proc { Spree.api.fulfillment_serializer }
93
- many :payments, resource: proc { Spree.api.payment_serializer }
94
76
  one :billing_address, resource: proc { Spree.api.address_serializer }
95
77
  one :shipping_address, resource: proc { Spree.api.address_serializer }
96
78
  one :gift_card, resource: proc { Spree.api.gift_card_serializer }
@@ -2,7 +2,7 @@ module Spree
2
2
  module Api
3
3
  module V3
4
4
  class PaymentSessionSerializer < BaseSerializer
5
- typelize status: [:string, enum: Spree::PaymentSession.statuses, enum_type_name: 'PaymentSessionStatus'], amount: :string, currency: :string,
5
+ typelize status: [:string, enum: Spree::PaymentSession.statuses, enum_type_name: 'PaymentSessionStatus'], currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
6
6
  external_id: :string, external_data: 'Record<string, unknown>',
7
7
  expires_at: [:string, nullable: true], customer_external_id: [:string, nullable: true],
8
8
  payment_method_id: :string, order_id: [:string, nullable: true],
@@ -12,9 +12,7 @@ module Spree
12
12
  :customer_external_id,
13
13
  expires_at: :iso8601
14
14
 
15
- attribute :amount do |session|
16
- session.amount&.to_s
17
- end
15
+ money_attributes :amount
18
16
 
19
17
  prefixed_id_attributes :payment_method
20
18
 
@@ -4,13 +4,18 @@ module Spree
4
4
  module Api
5
5
  module V3
6
6
  class PriceHistorySerializer < BaseSerializer
7
- typelize amount: :string,
8
- amount_in_cents: :number,
9
- display_amount: :string,
10
- currency: :string,
11
- recorded_at: :string
7
+ typelize display_amount: display_money_type(:display_amount, nullable: false),
8
+ currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
9
+ recorded_at: :string,
10
+ amount_in_cents: [:number, nullable: true, deprecated: 'Use `amount`. Removed in 6.1.']
12
11
 
13
- attributes :amount, :amount_in_cents, :currency
12
+ attributes :currency
13
+
14
+ money_attributes :amount, unit_price: true
15
+
16
+ attribute :amount_in_cents do |price_history|
17
+ price_history.amount_in_cents unless params[:hide_prices]
18
+ end
14
19
 
15
20
  attributes :display_amount
16
21
 
@@ -5,17 +5,24 @@ module Spree
5
5
  # Represents a resolved/calculated price for storefront display
6
6
  # Can represent either a calculated price (with price list resolution) or a base price
7
7
  class PriceSerializer < BaseSerializer
8
- typelize amount: [:string, nullable: true],
9
- amount_in_cents: [:number, nullable: true],
10
- display_amount: [:string, nullable: true],
11
- compare_at_amount: [:string, nullable: true],
12
- compare_at_amount_in_cents: [:number, nullable: true],
13
- display_compare_at_amount: [:string, nullable: true],
14
- currency: [:string, nullable: true],
15
- price_list_id: [:string, nullable: true]
8
+ typelize display_amount: display_money_type(:display_amount),
9
+ display_compare_at_amount: display_money_type(:display_compare_at_amount),
10
+ currency: [:string, nullable: true, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
11
+ price_list_id: [:string, nullable: true],
12
+ amount_in_cents: [:number, nullable: true, deprecated: 'Use `amount`. Removed in 6.1.'],
13
+ compare_at_amount_in_cents: [:number, nullable: true, deprecated: 'Use `compare_at_amount`. Removed in 6.1.']
16
14
 
17
- attributes :amount, :amount_in_cents, :compare_at_amount,
18
- :compare_at_amount_in_cents, :currency
15
+ attributes :currency
16
+
17
+ money_attributes :amount, :compare_at_amount, unit_price: true
18
+
19
+ attribute :amount_in_cents do |price|
20
+ price.amount_in_cents unless params[:hide_prices]
21
+ end
22
+
23
+ attribute :compare_at_amount_in_cents do |price|
24
+ price.compare_at_amount_in_cents unless params[:hide_prices]
25
+ end
19
26
 
20
27
  attribute :display_amount do |price|
21
28
  price.display_amount&.to_s
@@ -4,11 +4,17 @@ module Spree
4
4
  class ProductFilterPriceRangeSerializer < BaseSerializer
5
5
  typelize id: :string,
6
6
  type: "'price_range'",
7
- min: :number,
8
- max: :number,
9
- currency: :string
7
+ min: :string,
8
+ max: :string,
9
+ currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode']
10
10
 
11
- attributes :id, :type, :min, :max, :currency
11
+ attributes :id, :type
12
+
13
+ # Search providers hand the bounds over as numbers.
14
+ attribute(:min) { |range| Spree::Money::Rounding.format(range[:min], range[:currency], unit_price: true) }
15
+ attribute(:max) { |range| Spree::Money::Rounding.format(range[:max], range[:currency], unit_price: true) }
16
+
17
+ attributes :currency
12
18
  end
13
19
  end
14
20
  end
@@ -79,7 +79,7 @@ module Spree
79
79
  # single-seller catalog winner and default variant are the same row.
80
80
  attribute :price do |product|
81
81
  price = price_for(featured_variant(product))
82
- Spree.api.price_serializer.new(price, params: params).to_h if price.present?
82
+ price_serializer.new(price, params: params).to_h if price.present?
83
83
  end
84
84
 
85
85
  # Original price - base price without price list resolution (for showing strikethrough)
@@ -90,7 +90,7 @@ module Spree
90
90
  base = price_in(variant)
91
91
 
92
92
  if calculated.present? && base.present? && calculated.id != base.id
93
- Spree.api.price_serializer.new(base, params: params).to_h
93
+ price_serializer.new(base, params: params).to_h
94
94
  end
95
95
  end
96
96
 
@@ -148,7 +148,7 @@ module Spree
148
148
  attribute :prior_price,
149
149
  if: proc { expand?('prior_price') } do |product|
150
150
  record = price_in(featured_variant(product))&.prior_price
151
- Spree.api.price_history_serializer.new(record, params: params).to_h if record
151
+ price_history_serializer.new(record, params: params).to_h if record
152
152
  end
153
153
  end
154
154
  end
@@ -4,15 +4,14 @@ module Spree
4
4
  module Api
5
5
  module V3
6
6
  class RefundSerializer < BaseSerializer
7
- typelize amount: [:string, nullable: true], transaction_id: [:string, nullable: true],
7
+ typelize transaction_id: [:string, nullable: true],
8
8
  payment_id: [:string, nullable: true], refund_reason_id: [:string, nullable: true],
9
- originator_id: [:string, nullable: true], originator_type: [:string, nullable: true]
9
+ originator_id: [:string, nullable: true], originator_type: [:string, nullable: true],
10
+ reimbursement_id: [:string, nullable: true, deprecated: 'Always null: reimbursements are gone. Use `originator_id`. Removed in 6.1.']
10
11
 
11
12
  attributes :transaction_id
12
13
 
13
- attribute :amount do |refund|
14
- refund.amount&.to_s
15
- end
14
+ money_attributes :amount
16
15
 
17
16
  prefixed_id_attributes :payment, refund_reason_id: :reason
18
17
 
@@ -23,6 +22,10 @@ module Spree
23
22
  attribute :originator_type do |refund|
24
23
  Spree::Base.polymorphic_api_type(refund.originator_type)
25
24
  end
25
+
26
+ # @deprecated Reimbursements were folded into returns, which a refund
27
+ # names as its +originator+. Removed in 6.1.
28
+ attribute(:reimbursement_id) { nil }
26
29
  end
27
30
  end
28
31
  end
@@ -7,25 +7,17 @@ module Spree
7
7
  typelize quantity: :number,
8
8
  received_quantity: :number,
9
9
  resellable: :boolean,
10
- pre_tax_amount: :string,
11
- display_pre_tax_amount: :string,
12
- included_tax_total: :string,
13
- additional_tax_total: :string,
14
- tax_total: :string,
15
- display_tax_total: :string,
16
- refund_amount: :string,
17
- display_refund_amount: :string,
18
10
  variant_id: [:string, nullable: true],
19
11
  line_item_id: [:string, nullable: true],
20
12
  fulfillment_item_id: [:string, nullable: true]
21
13
 
22
14
  attributes :quantity, :received_quantity, :resellable
23
15
 
24
- attributes pre_tax_amount: :string, display_pre_tax_amount: :string, included_tax_total: :string,
25
- additional_tax_total: :string, tax_total: :string, display_tax_total: :string
16
+ money_attributes :pre_tax_amount, :display_pre_tax_amount, :included_tax_total,
17
+ :additional_tax_total, :tax_total, :display_tax_total
26
18
  # What the line refunds, tax included — for the units that arrived
27
19
  # once the warehouse has counted.
28
- attributes refund_amount: :string, display_refund_amount: :string
20
+ money_attributes :refund_amount, :display_refund_amount
29
21
  prefixed_id_attributes :variant, :line_item, :fulfillment_item
30
22
 
31
23
  one :variant, resource: proc { Spree.api.variant_serializer }, if: proc { expand?('variant') }
@@ -10,10 +10,6 @@ module Spree
10
10
  status: [:string, enum: Spree::Return.statuses, enum_type_name: 'ReturnStatus'],
11
11
  order_id: [:string, nullable: true],
12
12
  reason_id: [:string, nullable: true],
13
- refund_total: :string,
14
- display_refund_total: :string,
15
- refund_tax_total: :string,
16
- display_refund_tax_total: :string,
17
13
  approved_at: [:string, nullable: true],
18
14
  received_at: [:string, nullable: true],
19
15
  refunded_at: [:string, nullable: true],
@@ -23,9 +19,10 @@ module Spree
23
19
 
24
20
  prefixed_id_attributes :order, :reason
25
21
 
26
- attributes refund_total: :string, display_refund_total: :string
22
+ money_attributes :refund_total, :display_refund_total
27
23
  # The tax inside refund_total.
28
- attributes refund_tax_total: :string, display_refund_tax_total: :string
24
+ money_attributes :refund_tax_total, :display_refund_tax_total
25
+
29
26
  attribute :approved_at do |return_record|
30
27
  return_record.approved_at&.iso8601
31
28
  end
@@ -0,0 +1,12 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ class AddressSerializer < V3::AddressSerializer
6
+ # The Store API keeps these deprecated names until 6.1.
7
+ %i[state_abbr country_iso].each { |key| _attributes.delete(key) }
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -6,14 +6,14 @@ module Spree
6
6
  #
7
7
  # A computed value rather than a record, so it carries no id.
8
8
  class BalanceSerializer < V3::BaseSerializer
9
- typelize currency: :string,
10
- settlement_currency: :string,
9
+ typelize 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
 
@@ -24,9 +24,14 @@ module Spree
24
24
 
25
25
  attribute(:converted) { |balance| balance.converted? }
26
26
 
27
- %i[earned payable paid balance pending].each do |figure|
28
- attribute(figure) { |balance| balance.public_send(figure).to_s }
29
- attribute(:"display_#{figure}") { |balance| balance.public_send(:"display_#{figure}").to_s }
27
+ # Earnings are in the currency the sales were priced in; what the
28
+ # account holds is in the one it settles in.
29
+ %i[earned pending].each do |figure|
30
+ attribute(figure) { |balance| Spree::Money::Rounding.format(balance.public_send(figure), balance.currency) }
31
+ end
32
+
33
+ %i[payable paid balance].each do |figure|
34
+ attribute(figure) { |balance| Spree::Money::Rounding.format(balance.public_send(figure), balance.settlement_currency) }
30
35
  end
31
36
  end
32
37
  end
@@ -7,6 +7,13 @@ module Spree
7
7
  # One line of a claim — what went wrong, and what is being sent or
8
8
  # refunded to put it right.
9
9
  class ClaimLineItemSerializer < V3::ClaimLineItemSerializer
10
+ without_formatted_money(:seller)
11
+
12
+ # No guest price gating here, so the inherited money fields are always present.
13
+ typelize refund_amount: [:string, nullable: false], paid_amount: [:string, nullable: false],
14
+ pre_tax_amount: [:string, nullable: false], included_tax_total: [:string, nullable: false],
15
+ additional_tax_total: [:string, nullable: false], tax_total: [:string, nullable: false]
16
+
10
17
  typelize name: [:string, nullable: true]
11
18
 
12
19
  attribute :name do |line|
@@ -9,6 +9,11 @@ module Spree
9
9
  # Built on the shared V3 serializer rather than the admin one, which
10
10
  # expands the order and the customer behind it.
11
11
  class ClaimSerializer < V3::ClaimSerializer
12
+ without_formatted_money(:seller)
13
+
14
+ # No guest price gating here, so the inherited money fields are always present.
15
+ typelize refund_total: [:string, nullable: false]
16
+
12
17
  typelize memo: [:string, nullable: true]
13
18
 
14
19
  attributes :memo
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # A country as the seller panel's address forms need it. The panel
6
+ # names countries with Intl.DisplayNames in the seller's own language,
7
+ # so the Seller API sends the ISO code alone.
8
+ class CountrySerializer < V3::CountrySerializer
9
+ _attributes.delete(:name)
10
+ _attributes.delete(:market)
11
+
12
+ many :states,
13
+ resource: proc { Spree.api.seller_state_serializer },
14
+ if: proc { params[:expand]&.include?('states') }
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -12,8 +12,7 @@ module Spree
12
12
  class DeliveryMethodRuleSerializer < BaseSerializer
13
13
  typelize type: [:string, comment: 'Rule type. Built-in: item_total_rule, weight_rule, excluded_products_rule, channel_rule, volume_rule, company_rule. Extensions may register more.'],
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 :active
19
18
 
@@ -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
@@ -22,8 +22,7 @@ module Spree
22
22
  editable: :boolean,
23
23
  delivery_profile_id: [:string, nullable: true],
24
24
  delivery_zone_id: [:string, nullable: true],
25
- calculator_type: [:string, nullable: true],
26
- calculator_preferences: ['Record<string, unknown>', nullable: true]
25
+ calculator: 'TypedDeliveryCalculator | null'
27
26
 
28
27
  attributes :admin_name, :storefront_visible, :tracking_url,
29
28
  created_at: :iso8601, updated_at: :iso8601
@@ -39,12 +38,9 @@ module Spree
39
38
 
40
39
  prefixed_id_attributes :delivery_profile, :delivery_zone
41
40
 
42
- attribute :calculator_type do |record|
43
- record.calculator&.class&.api_type
44
- end
45
-
46
- attribute :calculator_preferences do |record|
47
- record.calculator.respond_to?(:serialized_preferences) ? record.calculator.serialized_preferences : record.calculator&.preferences
41
+ attribute :calculator do |record|
42
+ calculator = record.calculator
43
+ { type: calculator.class.api_type, preferences: calculator.serialized_preferences } if calculator
48
44
  end
49
45
  end
50
46
  end
@@ -10,18 +10,19 @@ module Spree
10
10
  class DeliveryRateSerializer < V3::BaseSerializer
11
11
  typelize name: :string,
12
12
  selected: :boolean,
13
- cost: :string,
14
- display_cost: :string,
15
- total: :string,
16
- display_total: :string,
17
13
  carrier: [:string, nullable: true],
18
14
  service_level: [:string, nullable: true],
19
- estimated_delivery_date: [:string, nullable: true]
15
+ estimated_delivery_date: [:string, nullable: true],
16
+ unpriced: :boolean
20
17
 
21
- attributes :name, :selected, :cost, :total,
22
- :carrier, :service_level, :estimated_delivery_date
18
+ attributes :name, :selected
23
19
 
24
- attributes display_cost: :string, display_total: :string
20
+ money_attributes :cost, :total
21
+
22
+ attributes :carrier, :service_level, :estimated_delivery_date, :unpriced
23
+
24
+ typelize cost: [:string, nullable: false],
25
+ total: [:string, nullable: false]
25
26
  end
26
27
  end
27
28
  end
@@ -7,6 +7,11 @@ module Spree
7
7
  # One line of an exchange — what came back and what goes out in its
8
8
  # place. Both variants expand through the seller's own serializer.
9
9
  class ExchangeLineItemSerializer < V3::ExchangeLineItemSerializer
10
+ # No guest price gating here, so the inherited money fields are always present.
11
+ typelize original_price: [:string, nullable: false], new_variant_price: [:string, nullable: false],
12
+ price_difference: [:string, nullable: false], original_tax_total: [:string, nullable: false],
13
+ new_tax_total: [:string, nullable: false]
14
+
10
15
  typelize name: [:string, nullable: true],
11
16
  new_variant_name: [:string, nullable: true]
12
17
 
@@ -9,6 +9,11 @@ module Spree
9
9
  # Built on the shared V3 serializer rather than the admin one, which
10
10
  # expands the order and the customer behind it.
11
11
  class ExchangeSerializer < V3::ExchangeSerializer
12
+ without_formatted_money(:seller)
13
+
14
+ # No guest price gating here, so the inherited money fields are always present.
15
+ typelize price_difference: [:string, nullable: false]
16
+
12
17
  typelize memo: [:string, nullable: true],
13
18
  stock_location_id: [:string, nullable: true]
14
19
 
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ class FileUploadSerializer < V3::FileUploadSerializer
6
+ one :upload_target, key: :upload, resource: proc { Spree.api.seller_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 Seller
5
+ class FileUploadTargetSerializer < V3::FileUploadTargetSerializer
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -15,7 +15,7 @@ module Spree
15
15
  typelize completed_rows_count: :number,
16
16
  failed_rows_count: :number,
17
17
  processing_errors: [:string, nullable: true],
18
- preferred_delimiter: :string,
18
+ delimiter: :string,
19
19
  schema_fields: 'Array<{ name: string; label: string; required: boolean }>',
20
20
  csv_headers: [:string, multi: true],
21
21
  sample_row: 'Record<string, string | null>',
@@ -23,7 +23,7 @@ module Spree
23
23
  original_byte_size: [:number, nullable: true],
24
24
  original_file_url: [:string, nullable: true]
25
25
 
26
- attributes :processing_errors, :preferred_delimiter
26
+ attributes :processing_errors, :delimiter
27
27
 
28
28
  # The file the seller uploaded. `original_file_url` is this branch's
29
29
  # own streaming endpoint (JWT-authenticated), not a signed
@@ -9,12 +9,9 @@ module Spree
9
9
  # it is cropped, and which variants it belongs to.
10
10
  class MediaSerializer < V3::MediaSerializer
11
11
  typelize position: :number,
12
- variant_ids: [:string, multi: true],
13
- focal_point_x: [:number, nullable: true],
14
- focal_point_y: [:number, nullable: true]
12
+ variant_ids: [:string, multi: true]
15
13
 
16
- attributes :position, :focal_point_x, :focal_point_y,
17
- created_at: :iso8601, updated_at: :iso8601
14
+ attributes :position, created_at: :iso8601, updated_at: :iso8601
18
15
 
19
16
  attribute :variant_ids do |media|
20
17
  media.variants.map(&:prefixed_id)
@@ -12,14 +12,15 @@ module Spree
12
12
  # this branch's generated types.
13
13
  class OrderLineItemSerializer < V3::BaseSerializer
14
14
  typelize name: :string, sku: [:string, nullable: true], options_text: [:string, nullable: true],
15
- quantity: :number, currency: :string, variant_id: [:string, nullable: true],
15
+ quantity: :number, currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'], variant_id: [:string, nullable: true],
16
16
  thumbnail_url: [:string, nullable: true]
17
17
 
18
18
  attributes :name, :options_text, :quantity, :currency
19
19
 
20
20
  # The tax charged on top is what a claim refunds beside the goods.
21
- money_attributes :price, :display_price, :discounted_amount, :display_discounted_amount,
22
- :additional_tax_total, :total, :display_total
21
+ money_attributes :price, unit_price: true
22
+ money_attributes :discounted_amount,
23
+ :additional_tax_total, :total
23
24
 
24
25
  prefixed_id_attributes :variant
25
26