spree_api 5.6.1 → 6.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +28 -0
  3. data/Rakefile +1 -1
  4. data/app/controllers/concerns/spree/api/v3/address_params.rb +17 -0
  5. data/app/controllers/concerns/spree/api/v3/admin/product_listing.rb +46 -0
  6. data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +110 -0
  7. data/app/controllers/concerns/spree/api/v3/admin/receivable_actions.rb +68 -0
  8. data/app/controllers/concerns/spree/api/v3/admin/reporting_authorization.rb +27 -0
  9. data/app/controllers/concerns/spree/api/v3/admin/role_grant_guard.rb +69 -33
  10. data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +86 -0
  11. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +97 -0
  12. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +12 -6
  13. data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +91 -0
  14. data/app/controllers/concerns/spree/api/v3/admin_authentication.rb +9 -5
  15. data/app/controllers/concerns/spree/api/v3/api_key_authentication.rb +41 -5
  16. data/app/controllers/concerns/spree/api/v3/authentication_strategies.rb +48 -0
  17. data/app/controllers/concerns/spree/api/v3/bulk_operations.rb +4 -6
  18. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +52 -16
  19. data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +37 -0
  20. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +41 -0
  21. data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +35 -0
  22. data/app/controllers/concerns/spree/api/v3/error_handler.rb +53 -11
  23. data/app/controllers/concerns/spree/api/v3/idempotent.rb +10 -4
  24. data/app/controllers/concerns/spree/api/v3/items_payload.rb +54 -0
  25. data/app/controllers/concerns/spree/api/v3/jwt_authentication.rb +23 -3
  26. data/app/controllers/concerns/spree/api/v3/key_store_context.rb +31 -0
  27. data/app/controllers/concerns/spree/api/v3/locale_and_currency.rb +3 -3
  28. data/app/controllers/concerns/spree/api/v3/order_lock.rb +22 -3
  29. data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +112 -0
  30. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +105 -0
  31. data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +117 -0
  32. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +157 -0
  33. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +76 -0
  34. data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +116 -0
  35. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +128 -0
  36. data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +7 -4
  37. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +42 -0
  38. data/app/controllers/concerns/spree/api/v3/rate_limit_headers.rb +40 -6
  39. data/app/controllers/concerns/spree/api/v3/scoped_authorization.rb +80 -26
  40. data/app/controllers/concerns/spree/api/v3/seller/auth_cookies.rb +62 -0
  41. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +127 -0
  42. data/app/controllers/concerns/spree/api/v3/seller_authentication.rb +40 -0
  43. data/app/controllers/concerns/spree/api/v3/storefront_access.rb +38 -0
  44. data/app/controllers/concerns/spree/api/v3/streams_shipping_label.rb +37 -0
  45. data/app/controllers/concerns/spree/api/v3/tax_identifier_validation.rb +41 -0
  46. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +11 -14
  47. data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +1 -1
  48. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -7
  49. data/app/controllers/spree/api/v3/admin/auth_controller.rb +138 -22
  50. data/app/controllers/spree/api/v3/admin/base_controller.rb +2 -0
  51. data/app/controllers/spree/api/v3/admin/catalog_assignments_controller.rb +27 -0
  52. data/app/controllers/spree/api/v3/admin/catalogs/base_controller.rb +29 -0
  53. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +40 -0
  54. data/app/controllers/spree/api/v3/admin/catalogs/products_controller.rb +107 -0
  55. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +75 -0
  56. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +191 -0
  57. data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +28 -41
  58. data/app/controllers/spree/api/v3/admin/categories_controller.rb +16 -7
  59. data/app/controllers/spree/api/v3/admin/channels_controller.rb +50 -2
  60. data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +25 -0
  61. data/app/controllers/spree/api/v3/admin/claims_controller.rb +31 -0
  62. data/app/controllers/spree/api/v3/admin/collection_rules_controller.rb +40 -0
  63. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +101 -0
  64. data/app/controllers/spree/api/v3/admin/collections_controller.rb +56 -0
  65. data/app/controllers/spree/api/v3/admin/commission_lines_controller.rb +39 -0
  66. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +174 -0
  67. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +65 -0
  68. data/app/controllers/spree/api/v3/admin/companies/base_controller.rb +29 -0
  69. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +56 -0
  70. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +66 -0
  71. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +137 -0
  72. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +46 -0
  73. data/app/controllers/spree/api/v3/admin/companies_controller.rb +59 -0
  74. data/app/controllers/spree/api/v3/admin/concerns/external_references.rb +166 -0
  75. data/app/controllers/spree/api/v3/admin/consent_records_controller.rb +31 -0
  76. data/app/controllers/spree/api/v3/admin/countries_controller.rb +12 -4
  77. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +19 -4
  78. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +5 -5
  79. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +1 -1
  80. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +4 -4
  81. data/app/controllers/spree/api/v3/admin/customers/base_controller.rb +1 -1
  82. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +2 -3
  83. data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +43 -0
  84. data/app/controllers/spree/api/v3/admin/customers_controller.rb +190 -11
  85. data/app/controllers/spree/api/v3/admin/dashboard_controller.rb +24 -20
  86. data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +60 -0
  87. data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +54 -0
  88. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +114 -0
  89. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +243 -0
  90. data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +80 -0
  91. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +107 -0
  92. data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +116 -0
  93. data/app/controllers/spree/api/v3/admin/digital_links_controller.rb +48 -0
  94. data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +17 -3
  95. data/app/controllers/spree/api/v3/admin/exchanges_controller.rb +31 -0
  96. data/app/controllers/spree/api/v3/admin/exports_controller.rb +2 -2
  97. data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +1 -1
  98. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +3 -2
  99. data/app/controllers/spree/api/v3/admin/imports_controller.rb +71 -8
  100. data/app/controllers/spree/api/v3/admin/integrations_controller.rb +67 -0
  101. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +5 -5
  102. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +5 -1
  103. data/app/controllers/spree/api/v3/admin/locales_controller.rb +3 -1
  104. data/app/controllers/spree/api/v3/admin/markets_controller.rb +9 -5
  105. data/app/controllers/spree/api/v3/admin/me_controller.rb +4 -30
  106. data/app/controllers/spree/api/v3/admin/media_controller.rb +88 -38
  107. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +156 -0
  108. data/app/controllers/spree/api/v3/admin/option_types_controller.rb +1 -0
  109. data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +25 -0
  110. data/app/controllers/spree/api/v3/admin/order_groups_controller.rb +43 -0
  111. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +1 -1
  112. data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +56 -0
  113. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +66 -0
  114. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +86 -0
  115. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +99 -0
  116. data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +62 -0
  117. data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +83 -0
  118. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +45 -67
  119. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +40 -22
  120. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +75 -0
  121. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +36 -18
  122. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +39 -18
  123. data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +70 -0
  124. data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +2 -2
  125. data/app/controllers/spree/api/v3/admin/orders/tax_identifiers_controller.rb +41 -0
  126. data/app/controllers/spree/api/v3/admin/orders/tax_lines_controller.rb +32 -0
  127. data/app/controllers/spree/api/v3/admin/orders_controller.rb +157 -32
  128. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +39 -0
  129. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +1 -1
  130. data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +15 -4
  131. data/app/controllers/spree/api/v3/admin/payout_providers_controller.rb +27 -0
  132. data/app/controllers/spree/api/v3/admin/permissions_controller.rb +30 -0
  133. data/app/controllers/spree/api/v3/admin/policies_controller.rb +42 -0
  134. data/app/controllers/spree/api/v3/admin/price_lists/products_controller.rb +93 -0
  135. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +43 -29
  136. data/app/controllers/spree/api/v3/admin/prices_controller.rb +41 -4
  137. data/app/controllers/spree/api/v3/admin/product_types_controller.rb +93 -0
  138. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +148 -0
  139. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +24 -3
  140. data/app/controllers/spree/api/v3/admin/products_controller.rb +149 -33
  141. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +6 -2
  142. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +1 -1
  143. data/app/controllers/spree/api/v3/admin/promotions_controller.rb +1 -5
  144. data/app/controllers/spree/api/v3/admin/purchase_orders/stock_receipts_controller.rb +32 -0
  145. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +161 -0
  146. data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +25 -0
  147. data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +45 -0
  148. data/app/controllers/spree/api/v3/admin/reporting_controller.rb +95 -0
  149. data/app/controllers/spree/api/v3/admin/resource_controller.rb +27 -10
  150. data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +25 -0
  151. data/app/controllers/spree/api/v3/admin/returns_controller.rb +31 -0
  152. data/app/controllers/spree/api/v3/admin/roles_controller.rb +50 -6
  153. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +83 -0
  154. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +139 -0
  155. data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +115 -0
  156. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +36 -0
  157. data/app/controllers/spree/api/v3/admin/sellers/balances_controller.rb +44 -0
  158. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +77 -0
  159. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +107 -0
  160. data/app/controllers/spree/api/v3/admin/sellers/team_controller.rb +64 -0
  161. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +197 -0
  162. data/app/controllers/spree/api/v3/admin/setup_controller.rb +231 -0
  163. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +172 -0
  164. data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +3 -2
  165. data/app/controllers/spree/api/v3/admin/stock_movements_controller.rb +37 -0
  166. data/app/controllers/spree/api/v3/admin/stock_reservations_controller.rb +1 -1
  167. data/app/controllers/spree/api/v3/admin/stock_transfers/stock_receipts_controller.rb +31 -0
  168. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +134 -38
  169. data/app/controllers/spree/api/v3/admin/store_controller.rb +65 -0
  170. data/app/controllers/spree/api/v3/admin/store_credits/events_controller.rb +47 -0
  171. data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +87 -0
  172. data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +30 -0
  173. data/app/controllers/spree/api/v3/admin/tags_controller.rb +2 -2
  174. data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +4 -0
  175. data/app/controllers/spree/api/v3/admin/tax_providers_controller.rb +25 -0
  176. data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +33 -0
  177. data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +33 -0
  178. data/app/controllers/spree/api/v3/admin/translatable_resources_controller.rb +37 -9
  179. data/app/controllers/spree/api/v3/admin/translations_controller.rb +10 -5
  180. data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +150 -0
  181. data/app/controllers/spree/api/v3/admin/variants_controller.rb +11 -4
  182. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +1 -1
  183. data/app/controllers/spree/api/v3/base_controller.rb +59 -16
  184. data/app/controllers/spree/api/v3/resource_controller.rb +154 -38
  185. data/app/controllers/spree/api/v3/seller/auth_controller.rb +169 -0
  186. data/app/controllers/spree/api/v3/seller/balances_controller.rb +35 -0
  187. data/app/controllers/spree/api/v3/seller/base_controller.rb +25 -0
  188. data/app/controllers/spree/api/v3/seller/claim_reasons_controller.rb +20 -0
  189. data/app/controllers/spree/api/v3/seller/countries_controller.rb +38 -0
  190. data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +265 -0
  191. data/app/controllers/spree/api/v3/seller/delivery_profiles_controller.rb +65 -0
  192. data/app/controllers/spree/api/v3/seller/delivery_zones_controller.rb +41 -0
  193. data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +21 -0
  194. data/app/controllers/spree/api/v3/seller/exports_controller.rb +195 -0
  195. data/app/controllers/spree/api/v3/seller/import_rows_controller.rb +49 -0
  196. data/app/controllers/spree/api/v3/seller/imports_controller.rb +317 -0
  197. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +152 -0
  198. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +71 -0
  199. data/app/controllers/spree/api/v3/seller/me_controller.rb +72 -0
  200. data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +111 -0
  201. data/app/controllers/spree/api/v3/seller/order_cancellation_reasons_controller.rb +25 -0
  202. data/app/controllers/spree/api/v3/seller/orders/base_controller.rb +44 -0
  203. data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +45 -0
  204. data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +38 -0
  205. data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +50 -0
  206. data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +79 -0
  207. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +55 -0
  208. data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +82 -0
  209. data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +44 -0
  210. data/app/controllers/spree/api/v3/seller/orders_controller.rb +199 -0
  211. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +100 -0
  212. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +155 -0
  213. data/app/controllers/spree/api/v3/seller/payouts_controller.rb +47 -0
  214. data/app/controllers/spree/api/v3/seller/policies_controller.rb +57 -0
  215. data/app/controllers/spree/api/v3/seller/product_types_controller.rb +35 -0
  216. data/app/controllers/spree/api/v3/seller/products_controller.rb +394 -0
  217. data/app/controllers/spree/api/v3/seller/profile_controller.rb +137 -0
  218. data/app/controllers/spree/api/v3/seller/reasons_controller.rb +45 -0
  219. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +95 -0
  220. data/app/controllers/spree/api/v3/seller/resource_controller.rb +75 -0
  221. data/app/controllers/spree/api/v3/seller/return_reasons_controller.rb +20 -0
  222. data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +56 -0
  223. data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +48 -0
  224. data/app/controllers/spree/api/v3/seller/team_controller.rb +103 -0
  225. data/app/controllers/spree/api/v3/seller/tracking_carriers_controller.rb +35 -0
  226. data/app/controllers/spree/api/v3/seller/transfers_controller.rb +43 -0
  227. data/app/controllers/spree/api/v3/store/account/companies_controller.rb +42 -0
  228. data/app/controllers/spree/api/v3/store/auth_controller.rb +21 -34
  229. data/app/controllers/spree/api/v3/store/base_controller.rb +4 -0
  230. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +24 -2
  231. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +41 -15
  232. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +53 -20
  233. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +36 -20
  234. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +111 -0
  235. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +2 -2
  236. data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +96 -0
  237. data/app/controllers/spree/api/v3/store/carts_controller.rb +57 -12
  238. data/app/controllers/spree/api/v3/store/categories_controller.rb +6 -3
  239. data/app/controllers/spree/api/v3/store/collections/products_controller.rb +59 -0
  240. data/app/controllers/spree/api/v3/store/collections_controller.rb +36 -0
  241. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +81 -0
  242. data/app/controllers/spree/api/v3/store/companies/base_controller.rb +24 -0
  243. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +50 -0
  244. data/app/controllers/spree/api/v3/store/companies/members_controller.rb +66 -0
  245. data/app/controllers/spree/api/v3/store/companies/orders_controller.rb +28 -0
  246. data/app/controllers/spree/api/v3/store/companies_controller.rb +47 -0
  247. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +90 -0
  248. data/app/controllers/spree/api/v3/store/countries_controller.rb +8 -6
  249. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +3 -1
  250. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +78 -0
  251. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +52 -0
  252. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +6 -0
  253. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +7 -3
  254. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +3 -3
  255. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -3
  256. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +91 -0
  257. data/app/controllers/spree/api/v3/store/customers_controller.rb +26 -31
  258. data/app/controllers/spree/api/v3/store/data_feeds_controller.rb +11 -0
  259. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +58 -0
  260. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +108 -0
  261. data/app/controllers/spree/api/v3/store/digital_links_controller.rb +105 -0
  262. data/app/controllers/spree/api/v3/store/markets/countries_controller.rb +5 -9
  263. data/app/controllers/spree/api/v3/store/markets_controller.rb +4 -4
  264. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +8 -9
  265. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +94 -0
  266. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +116 -0
  267. data/app/controllers/spree/api/v3/store/orders/tax_identifiers_controller.rb +46 -0
  268. data/app/controllers/spree/api/v3/store/orders_controller.rb +12 -15
  269. data/app/controllers/spree/api/v3/store/products/filters_controller.rb +10 -3
  270. data/app/controllers/spree/api/v3/store/products_controller.rb +25 -6
  271. data/app/controllers/spree/api/v3/store/resource_controller.rb +2 -0
  272. data/app/controllers/spree/api/v3/store/sellers_controller.rb +43 -0
  273. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +9 -6
  274. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +3 -3
  275. data/app/controllers/spree/api/v3/webhooks/fulfillments_controller.rb +88 -0
  276. data/app/controllers/spree/api/v3/webhooks/payments_controller.rb +5 -2
  277. data/app/controllers/spree/api/v3/webhooks/payouts_controller.rb +61 -0
  278. data/app/models/spree/api/data_request_urls.rb +25 -0
  279. data/app/models/spree/api/digital_link_urls.rb +26 -0
  280. data/app/serializers/spree/api/v3/address_serializer.rb +17 -5
  281. data/app/serializers/spree/api/v3/admin/address_serializer.rb +27 -4
  282. data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +13 -10
  283. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +1 -1
  284. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +15 -0
  285. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +34 -0
  286. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +32 -0
  287. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +23 -0
  288. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +48 -0
  289. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +23 -0
  290. data/app/serializers/spree/api/v3/admin/catalog_product_serializer.rb +57 -0
  291. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +38 -0
  292. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +37 -0
  293. data/app/serializers/spree/api/v3/admin/catalog_serializer.rb +46 -0
  294. data/app/serializers/spree/api/v3/admin/category_serializer.rb +3 -2
  295. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +15 -1
  296. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +16 -0
  297. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +21 -0
  298. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +29 -0
  299. data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +22 -0
  300. data/app/serializers/spree/api/v3/admin/collection_serializer.rb +29 -0
  301. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +67 -0
  302. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +69 -0
  303. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +61 -0
  304. data/app/serializers/spree/api/v3/admin/company_invitation_serializer.rb +15 -0
  305. data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +11 -0
  306. data/app/serializers/spree/api/v3/admin/company_serializer.rb +37 -0
  307. data/app/serializers/spree/api/v3/admin/concerns/external_references_attribute.rb +33 -0
  308. data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +28 -0
  309. data/app/serializers/spree/api/v3/admin/country_serializer.rb +2 -2
  310. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -1
  311. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +2 -2
  312. data/app/serializers/spree/api/v3/admin/custom_field_serializer.rb +2 -2
  313. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +23 -22
  314. data/app/serializers/spree/api/v3/admin/dashboard_counter_serializer.rb +24 -0
  315. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +36 -0
  316. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +32 -0
  317. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +66 -1
  318. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +15 -0
  319. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +34 -0
  320. data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +65 -0
  321. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +10 -1
  322. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +20 -0
  323. data/app/serializers/spree/api/v3/admin/delivery_zone_member_serializer.rb +11 -0
  324. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +29 -0
  325. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +59 -0
  326. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -4
  327. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +16 -0
  328. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +35 -0
  329. data/app/serializers/spree/api/v3/admin/export_serializer.rb +20 -1
  330. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +14 -0
  331. data/app/serializers/spree/api/v3/admin/freight_summary_line_serializer.rb +46 -0
  332. data/app/serializers/spree/api/v3/admin/freight_summary_serializer.rb +16 -0
  333. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +39 -0
  334. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +31 -9
  335. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -3
  336. data/app/serializers/spree/api/v3/admin/import_serializer.rb +15 -2
  337. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +32 -0
  338. data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +4 -4
  339. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +19 -5
  340. data/app/serializers/spree/api/v3/admin/market_serializer.rb +5 -1
  341. data/app/serializers/spree/api/v3/admin/media_serializer.rb +50 -2
  342. data/app/serializers/spree/api/v3/admin/membership_product_serializer.rb +29 -0
  343. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +29 -0
  344. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +50 -0
  345. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  346. data/app/serializers/spree/api/v3/admin/order_serializer.rb +131 -19
  347. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +53 -0
  348. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +8 -2
  349. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -0
  350. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +41 -0
  351. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +39 -0
  352. data/app/serializers/spree/api/v3/admin/policy_serializer.rb +11 -0
  353. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +22 -0
  354. data/app/serializers/spree/api/v3/admin/price_list_product_serializer.rb +32 -0
  355. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +20 -8
  356. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -12
  357. data/app/serializers/spree/api/v3/admin/price_serializer.rb +3 -0
  358. data/app/serializers/spree/api/v3/admin/product_serializer.rb +54 -8
  359. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +39 -0
  360. data/app/serializers/spree/api/v3/admin/product_type_custom_field_definition_serializer.rb +44 -0
  361. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +34 -0
  362. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +6 -12
  363. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +17 -15
  364. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +80 -0
  365. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +94 -0
  366. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +27 -0
  367. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +0 -5
  368. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +72 -0
  369. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +16 -0
  370. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +21 -0
  371. data/app/serializers/spree/api/v3/admin/return_serializer.rb +59 -0
  372. data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
  373. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +33 -0
  374. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +37 -0
  375. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +46 -0
  376. data/app/serializers/spree/api/v3/admin/seller_requirement_serializer.rb +68 -0
  377. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +48 -0
  378. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +57 -0
  379. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +92 -0
  380. data/app/serializers/spree/api/v3/admin/seller_team_member_serializer.rb +29 -0
  381. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +53 -0
  382. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +82 -0
  383. data/app/serializers/spree/api/v3/admin/state_serializer.rb +1 -1
  384. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +65 -0
  385. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +20 -4
  386. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +116 -0
  387. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +57 -0
  388. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +49 -0
  389. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +5 -5
  390. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +57 -0
  391. data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +36 -16
  392. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +32 -0
  393. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +42 -7
  394. data/app/serializers/spree/api/v3/admin/store_serializer.rb +63 -1
  395. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +39 -0
  396. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +67 -0
  397. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +43 -0
  398. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +21 -0
  399. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +49 -0
  400. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +49 -8
  401. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +23 -0
  402. data/app/serializers/spree/api/v3/base_serializer.rb +39 -2
  403. data/app/serializers/spree/api/v3/cart_serializer.rb +90 -12
  404. data/app/serializers/spree/api/v3/category_serializer.rb +3 -3
  405. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +50 -0
  406. data/app/serializers/spree/api/v3/claim_reason_serializer.rb +20 -0
  407. data/app/serializers/spree/api/v3/claim_serializer.rb +62 -0
  408. data/app/serializers/spree/api/v3/collection_serializer.rb +41 -0
  409. data/app/serializers/spree/api/v3/company_invitation_serializer.rb +28 -0
  410. data/app/serializers/spree/api/v3/company_membership_serializer.rb +28 -0
  411. data/app/serializers/spree/api/v3/company_serializer.rb +33 -0
  412. data/app/serializers/spree/api/v3/custom_field_serializer.rb +2 -2
  413. data/app/serializers/spree/api/v3/customer_serializer.rb +9 -1
  414. data/app/serializers/spree/api/v3/data_request_event_serializer.rb +30 -0
  415. data/app/serializers/spree/api/v3/data_request_serializer.rb +40 -0
  416. data/app/serializers/spree/api/v3/delivery_method_serializer.rb +12 -2
  417. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +34 -17
  418. data/app/serializers/spree/api/v3/delivery_serializer.rb +29 -0
  419. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +29 -0
  420. data/app/serializers/spree/api/v3/delivery_zone_serializer.rb +13 -0
  421. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +23 -0
  422. data/app/serializers/spree/api/v3/digital_link_serializer.rb +6 -2
  423. data/app/serializers/spree/api/v3/discount_serializer.rb +21 -7
  424. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +53 -0
  425. data/app/serializers/spree/api/v3/exchange_serializer.rb +61 -0
  426. data/app/serializers/spree/api/v3/fee_serializer.rb +27 -0
  427. data/app/serializers/spree/api/v3/freight_summary_serializer.rb +38 -0
  428. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +28 -15
  429. data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
  430. data/app/serializers/spree/api/v3/import_row_serializer.rb +1 -1
  431. data/app/serializers/spree/api/v3/import_serializer.rb +18 -4
  432. data/app/serializers/spree/api/v3/invitation_serializer.rb +1 -1
  433. data/app/serializers/spree/api/v3/line_item_serializer.rb +18 -1
  434. data/app/serializers/spree/api/v3/market_serializer.rb +2 -2
  435. data/app/serializers/spree/api/v3/{asset_serializer.rb → media_event_serializer.rb} +4 -4
  436. data/app/serializers/spree/api/v3/media_serializer.rb +48 -7
  437. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +1 -1
  438. data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
  439. data/app/serializers/spree/api/v3/order_group_serializer.rb +60 -0
  440. data/app/serializers/spree/api/v3/order_serializer.rb +58 -6
  441. data/app/serializers/spree/api/v3/payment_method_serializer.rb +1 -1
  442. data/app/serializers/spree/api/v3/payment_serializer.rb +2 -6
  443. data/app/serializers/spree/api/v3/payment_session_serializer.rb +10 -3
  444. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
  445. data/app/serializers/spree/api/v3/policy_serializer.rb +7 -2
  446. data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
  447. data/app/serializers/spree/api/v3/product_serializer.rb +42 -10
  448. data/app/serializers/spree/api/v3/product_type_serializer.rb +17 -0
  449. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +11 -0
  450. data/app/serializers/spree/api/v3/refund_serializer.rb +9 -3
  451. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +42 -0
  452. data/app/serializers/spree/api/v3/return_reason_serializer.rb +20 -0
  453. data/app/serializers/spree/api/v3/return_serializer.rb +62 -0
  454. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +35 -0
  455. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +21 -0
  456. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +25 -0
  457. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +32 -0
  458. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +59 -0
  459. data/app/serializers/spree/api/v3/seller/delivery_profile_serializer.rb +26 -0
  460. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +35 -0
  461. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +17 -0
  462. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +26 -0
  463. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +29 -0
  464. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +30 -0
  465. data/app/serializers/spree/api/v3/seller/export_serializer.rb +44 -0
  466. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +43 -0
  467. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +76 -0
  468. data/app/serializers/spree/api/v3/seller/import_mapping_serializer.rb +20 -0
  469. data/app/serializers/spree/api/v3/seller/import_row_serializer.rb +17 -0
  470. data/app/serializers/spree/api/v3/seller/import_serializer.rb +77 -0
  471. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +29 -0
  472. data/app/serializers/spree/api/v3/seller/media_serializer.rb +26 -0
  473. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +44 -0
  474. data/app/serializers/spree/api/v3/seller/order_serializer.rb +119 -0
  475. data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +52 -0
  476. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +34 -0
  477. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +36 -0
  478. data/app/serializers/spree/api/v3/seller/policy_serializer.rb +11 -0
  479. data/app/serializers/spree/api/v3/seller/product_serializer.rb +60 -0
  480. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +30 -0
  481. data/app/serializers/spree/api/v3/seller/product_type_serializer.rb +29 -0
  482. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +77 -0
  483. data/app/serializers/spree/api/v3/seller/reason_serializer.rb +24 -0
  484. data/app/serializers/spree/api/v3/seller/requirement_custom_field_serializer.rb +36 -0
  485. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +62 -0
  486. data/app/serializers/spree/api/v3/seller/requirement_submission_serializer.rb +33 -0
  487. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +24 -0
  488. data/app/serializers/spree/api/v3/seller/return_serializer.rb +51 -0
  489. data/app/serializers/spree/api/v3/seller/shipping_label_serializer.rb +23 -0
  490. data/app/serializers/spree/api/v3/seller/stock_level_serializer.rb +27 -0
  491. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +17 -0
  492. data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +15 -0
  493. data/app/serializers/spree/api/v3/seller/team_member_serializer.rb +22 -0
  494. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +49 -0
  495. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +71 -0
  496. data/app/serializers/spree/api/v3/seller_serializer.rb +50 -0
  497. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +11 -0
  498. data/app/serializers/spree/api/v3/{stock_item_serializer.rb → stock_level_serializer.rb} +5 -5
  499. data/app/serializers/spree/api/v3/stock_location_serializer.rb +11 -7
  500. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +8 -15
  501. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +11 -0
  502. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +6 -6
  503. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +29 -0
  504. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +11 -0
  505. data/app/serializers/spree/api/v3/tax_identifier_serializer.rb +15 -0
  506. data/app/serializers/spree/api/v3/tax_line_serializer.rb +37 -0
  507. data/app/serializers/spree/api/v3/variant_serializer.rb +52 -2
  508. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +6 -6
  509. data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
  510. data/app/services/spree/api/v3/filters_aggregator.rb +14 -12
  511. data/app/services/spree/webhooks/deliver_webhook.rb +62 -26
  512. data/app/subscribers/spree/webhook_event_subscriber.rb +9 -5
  513. data/config/brakeman.ignore +1 -1
  514. data/config/initializers/typelizer.rb +51 -4
  515. data/config/locales/en.yml +5 -0
  516. data/config/routes.rb +730 -22
  517. data/lib/spree/api/configuration.rb +2 -7
  518. data/lib/spree/api/dependencies.rb +173 -227
  519. data/lib/spree/api/openapi/schema_helper.rb +179 -13
  520. data/lib/spree/api/testing_support/v3/base.rb +45 -15
  521. data/lib/spree/api.rb +10 -4
  522. data/lib/typelizer/open_enums.rb +35 -0
  523. metadata +341 -27
  524. data/app/controllers/spree/api/v3/admin/orders/adjustments_controller.rb +0 -25
  525. data/app/controllers/spree/api/v3/admin/stock_items_controller.rb +0 -42
  526. data/app/controllers/spree/api/v3/admin/store_credit_categories_controller.rb +0 -21
  527. data/app/controllers/spree/api/v3/store/digitals_controller.rb +0 -38
  528. data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +0 -24
  529. data/app/serializers/spree/api/v3/admin/dashboard_analytics_serializer.rb +0 -143
  530. data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +0 -15
  531. data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +0 -19
  532. data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +0 -34
  533. data/app/serializers/spree/api/v3/admin/store_credit_category_serializer.rb +0 -19
  534. data/app/serializers/spree/api/v3/customer_return_serializer.rb +0 -17
  535. data/app/serializers/spree/api/v3/digital_serializer.rb +0 -17
  536. data/app/serializers/spree/api/v3/reimbursement_serializer.rb +0 -27
  537. data/app/serializers/spree/api/v3/report_serializer.rb +0 -34
  538. data/app/serializers/spree/api/v3/return_authorization_serializer.rb +0 -31
  539. data/app/serializers/spree/api/v3/return_item_serializer.rb +0 -53
  540. data/app/serializers/spree/api/v3/shipping_category_serializer.rb +0 -11
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class ExchangeLineItemSerializer < BaseSerializer
7
+ typelize quantity: :number,
8
+ received_quantity: :number,
9
+ resellable: :boolean,
10
+ original_price: :string,
11
+ new_variant_price: :string,
12
+ price_difference: :string,
13
+ original_variant_id: [:string, nullable: true],
14
+ new_variant_id: [:string, nullable: true],
15
+ line_item_id: [:string, nullable: true],
16
+ fulfillment_item_id: [:string, nullable: true]
17
+
18
+ attributes :quantity, :received_quantity, :resellable
19
+
20
+ attribute :original_price do |line|
21
+ line.original_price.to_s
22
+ end
23
+
24
+ attribute :new_variant_price do |line|
25
+ line.new_variant_price.to_s
26
+ end
27
+
28
+ attribute :price_difference do |line|
29
+ line.price_difference.to_s
30
+ end
31
+
32
+ attribute :original_variant_id do |line|
33
+ line.original_variant&.prefixed_id
34
+ end
35
+
36
+ attribute :new_variant_id do |line|
37
+ line.new_variant&.prefixed_id
38
+ end
39
+
40
+ attribute :line_item_id do |line|
41
+ line.line_item&.prefixed_id
42
+ end
43
+
44
+ attribute :fulfillment_item_id do |line|
45
+ line.fulfillment_item&.prefixed_id
46
+ end
47
+
48
+ one :original_variant, resource: proc { Spree.api.variant_serializer }, if: proc { expand?('original_variant') }
49
+ one :new_variant, resource: proc { Spree.api.variant_serializer }, if: proc { expand?('new_variant') }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ # Customer-facing view of an exchange.
7
+ class ExchangeSerializer < BaseSerializer
8
+ typelize number: :string,
9
+ status: [:string, enum: Spree::Exchange.statuses, enum_type_name: 'ExchangeStatus'],
10
+ order_id: [:string, nullable: true],
11
+ reason_id: [:string, nullable: true],
12
+ price_difference: :string,
13
+ display_price_difference: :string,
14
+ approved_at: [:string, nullable: true],
15
+ received_at: [:string, nullable: true],
16
+ fulfilled_at: [:string, nullable: true],
17
+ canceled_at: [:string, nullable: true]
18
+
19
+ attributes :number, :status
20
+
21
+ attribute :order_id do |exchange|
22
+ exchange.order&.prefixed_id
23
+ end
24
+
25
+ attribute :reason_id do |exchange|
26
+ exchange.reason&.prefixed_id
27
+ end
28
+
29
+ attribute :price_difference do |exchange|
30
+ exchange.price_difference.to_s
31
+ end
32
+
33
+ attribute :display_price_difference do |exchange|
34
+ exchange.display_price_difference.to_s
35
+ end
36
+
37
+ attribute :approved_at do |exchange|
38
+ exchange.approved_at&.iso8601
39
+ end
40
+
41
+ attribute :received_at do |exchange|
42
+ exchange.received_at&.iso8601
43
+ end
44
+
45
+ attribute :fulfilled_at do |exchange|
46
+ exchange.fulfilled_at&.iso8601
47
+ end
48
+
49
+ attribute :canceled_at do |exchange|
50
+ exchange.canceled_at&.iso8601
51
+ end
52
+
53
+ one :reason, resource: proc { Spree.api.return_reason_serializer }, if: proc { expand?('reason') }
54
+
55
+ many :exchange_line_items,
56
+ resource: proc { Spree.api.exchange_line_item_serializer },
57
+ if: proc { expand?('exchange_line_items') }
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,27 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ # An extensible charge (typed row): surcharge, handling, gift wrap, COD.
5
+ # Order-level when both adjustable IDs are null.
6
+ class FeeSerializer < BaseSerializer
7
+ typelize label: :string,
8
+ kind: [:string, enum: Spree::Fee::KINDS, enum_type_name: 'FeeKind',
9
+ comment: 'What sort of charge this is. `duty` is a customs duty on a cross-border order and is not taxed; the other kinds are. Extensions may register further kinds.'],
10
+ amount: [:string, nullable: true], display_amount: [:string, nullable: true],
11
+ line_item_id: [:string, nullable: true], fulfillment_id: [:string, nullable: true]
12
+
13
+ attributes :label, :kind
14
+
15
+ attribute :line_item_id do |record|
16
+ record.line_item&.prefixed_id
17
+ end
18
+
19
+ attribute :fulfillment_id do |record|
20
+ record.fulfillment&.prefixed_id
21
+ end
22
+
23
+ money_attributes :amount, :display_amount
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,38 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ # A shipment as a freight forwarder reads it: units, the cartons they
5
+ # fill, the pallets those stack onto, cubic meters and gross weight.
6
+ #
7
+ # +complete+ is false when part of the catalog carries no carton data.
8
+ # The figures are still the best available, but they are a minimum
9
+ # rather than a total, and a surface quoting from them should say so.
10
+ #
11
+ # Totals only. What each product contributes is a warehouse's business,
12
+ # so the per-line breakdown lives on the admin twin.
13
+ class FreightSummarySerializer < BaseSerializer
14
+ # A value object, not a record — it has no id of its own.
15
+ _attributes.delete(:id)
16
+
17
+ typelize total_units: :number,
18
+ total_cartons: :number,
19
+ total_pallets: ['number | null'],
20
+ total_volume: :string,
21
+ total_weight: :string,
22
+ complete: :boolean
23
+
24
+ attributes :total_units, :total_cartons, :total_pallets
25
+
26
+ attribute :total_volume do |summary|
27
+ decimal_string(summary.total_volume)
28
+ end
29
+
30
+ attribute :total_weight do |summary|
31
+ decimal_string(summary.total_weight)
32
+ end
33
+
34
+ attribute :complete, &:complete?
35
+ end
36
+ end
37
+ end
38
+ end
@@ -2,21 +2,32 @@ module Spree
2
2
  module Api
3
3
  module V3
4
4
  class FulfillmentSerializer < BaseSerializer
5
- typelize number: :string, status: :string, fulfillment_type: :string,
5
+ typelize number: :string, status: [:string, enum: Spree::Fulfillment.statuses, enum_type_name: 'FulfillmentStatus'],
6
+ fulfillment_type: [:string, enum: %w[shipping digital pickup pickup_point]],
6
7
  tracking: [:string, nullable: true],
7
8
  tracking_url: [:string, nullable: true], fulfilled_at: [:string, nullable: true],
9
+ delivered_at: [:string, nullable: true],
8
10
  cost: [:string, nullable: true], display_cost: [:string, nullable: true],
11
+ unpriced: :boolean,
9
12
  total: [:string, nullable: true], display_total: [:string, nullable: true],
10
13
  discount_total: [:string, nullable: true], display_discount_total: [:string, nullable: true],
11
14
  additional_tax_total: [:string, nullable: true], display_additional_tax_total: [:string, nullable: true],
12
15
  included_tax_total: [:string, nullable: true], display_included_tax_total: [:string, nullable: true],
13
16
  tax_total: [:string, nullable: true], display_tax_total: [:string, nullable: true],
14
- items: 'Array<{ item_id: string; variant_id: string; quantity: number }>'
17
+ items: 'Array<{ item_id: string; variant_id: string; quantity: number }>',
18
+ pickup_point_data: ['Record<string, unknown>', nullable: true],
19
+ selected_delivery_rate_id: [:string, nullable: true]
15
20
 
16
- attributes :number, :tracking, :tracking_url
21
+ # +tracking+ and +tracking_url+ summarize the primary delivery; every
22
+ # consignment is listed under +deliveries+.
23
+ attributes :number, :tracking, :tracking_url, :pickup_point_data, :selected_delivery_rate_id
17
24
 
18
25
  # Nulled for gated (prices_hidden) guests so a fulfillment can't leak the
19
26
  # shipping/tax amounts the cart/order totals already withhold.
27
+ # Says the shipping price is still to come, so a client need not
28
+ # infer it from a zero cost. Not price-gated — a flag, not an amount.
29
+ attribute :unpriced, &:unpriced?
30
+
20
31
  money_attributes :cost, :display_cost,
21
32
  :total, :display_total,
22
33
  :discount_total, :display_discount_total,
@@ -24,22 +35,20 @@ module Spree
24
35
  :included_tax_total, :display_included_tax_total,
25
36
  :tax_total, :display_tax_total
26
37
 
27
- attribute :status do |shipment|
28
- shipment.state
29
- end
38
+ attributes :status
30
39
 
31
- attribute :fulfillment_type do |shipment|
32
- shipment.digital? ? 'digital' : 'shipping'
40
+ # Column-backed since 6.0; the fallback covers rows created before the
41
+ # fulfillment_type backfill ran.
42
+ attribute :fulfillment_type do |fulfillment|
43
+ fulfillment.fulfillment_type.presence || (fulfillment.digital? ? 'digital' : 'shipping')
33
44
  end
34
45
 
35
- attribute :fulfilled_at do |shipment|
36
- shipment.shipped_at&.iso8601
37
- end
46
+ attributes fulfilled_at: :iso8601, delivered_at: :iso8601
38
47
 
39
48
  # Which items (and how many) are in this fulfillment.
40
49
  # A line item can be split across fulfillments with different quantities.
41
- attribute :items do |shipment|
42
- shipment.manifest.filter_map do |item|
50
+ attribute :items do |fulfillment|
51
+ fulfillment.manifest.filter_map do |item|
43
52
  next unless item.line_item
44
53
 
45
54
  {
@@ -50,9 +59,13 @@ module Spree
50
59
  end
51
60
  end
52
61
 
53
- one :shipping_method, key: :delivery_method, resource: proc { Spree.api.delivery_method_serializer }
62
+ # Where each parcel is, as the carrier last reported it — the
63
+ # customer's question, so always embedded.
64
+ many :deliveries, resource: proc { Spree.api.delivery_serializer }
65
+ one :delivery_method, resource: proc { Spree.api.delivery_method_serializer }
54
66
  one :stock_location, resource: proc { Spree.api.stock_location_serializer }
55
- many :shipping_rates, key: :delivery_rates, resource: proc { Spree.api.delivery_rate_serializer }
67
+ many :delivery_rates, resource: proc { Spree.api.delivery_rate_serializer }
68
+ many :tax_lines, resource: proc { Spree.api.tax_line_serializer }, if: proc { expand?('tax_lines') }
56
69
  end
57
70
  end
58
71
  end
@@ -3,7 +3,7 @@ module Spree
3
3
  module V3
4
4
  class GiftCardSerializer < BaseSerializer
5
5
  typelize code: :string,
6
- status: :string,
6
+ status: [:string, enum: Spree::GiftCard::DISPLAY_STATUSES, enum_type_name: 'GiftCardStatus'],
7
7
  amount: [:string, nullable: true],
8
8
  amount_used: [:string, nullable: true],
9
9
  amount_authorized: [:string, nullable: true],
@@ -22,7 +22,7 @@ module Spree
22
22
  end
23
23
 
24
24
  attribute :status do |gift_card|
25
- gift_card.display_state
25
+ gift_card.display_status
26
26
  end
27
27
 
28
28
  attributes :currency
@@ -5,7 +5,7 @@ module Spree
5
5
  module V3
6
6
  class ImportRowSerializer < BaseSerializer
7
7
  typelize import_id: [:string, nullable: true], row_number: :number,
8
- status: :string, validation_errors: [:string, nullable: true],
8
+ status: [:string, enum: Spree::ImportRow.statuses, enum_type_name: 'ImportRowStatus'], validation_errors: [:string, nullable: true],
9
9
  item_type: [:string, nullable: true], item_id: [:string, nullable: true]
10
10
 
11
11
  attributes :row_number, :status, :validation_errors,
@@ -4,8 +4,10 @@ module Spree
4
4
  module Api
5
5
  module V3
6
6
  class ImportSerializer < BaseSerializer
7
- typelize number: :string, type: [:string, nullable: true], status: :string,
7
+ typelize number: :string,
8
+ type: [:string, nullable: true, comment: 'Import type. Built-in: products, product_translations, customers, price_list_prices. Extensions may register more.'], status: [:string, enum: Spree::Import.statuses, enum_type_name: 'ImportStatus'],
8
9
  owner_type: [:string, nullable: true], owner_id: [:string, nullable: true],
10
+ store_id: [:string, nullable: true], seller_id: [:string, nullable: true],
9
11
  user_id: [:string, nullable: true], rows_count: :number
10
12
 
11
13
  attributes :number, :rows_count,
@@ -23,13 +25,25 @@ module Spree
23
25
  import.status.to_s
24
26
  end
25
27
 
26
- # `"store"` / `"vendor"`, not the polymorphic class name.
28
+ # Which marketplace this import belongs to, and — when a seller ran it —
29
+ # whose it is. A null `seller_id` means the operator's own.
30
+ attribute :store_id do |import|
31
+ import.store&.prefixed_id
32
+ end
33
+
34
+ attribute :seller_id do |import|
35
+ import.seller&.prefixed_id
36
+ end
37
+
38
+ # @deprecated Read `store_id` / `seller_id` — removed in 6.1. Emitted
39
+ # from the pair above rather than the dropped columns, so a client
40
+ # still reading them sees the same answer.
27
41
  attribute :owner_type do |import|
28
- Spree::Base.polymorphic_api_type(import.owner_type)
42
+ Spree::Base.polymorphic_api_type(import.seller_id.present? ? 'Spree::Seller' : 'Spree::Store')
29
43
  end
30
44
 
31
45
  attribute :owner_id do |import|
32
- import.owner&.prefixed_id
46
+ (import.seller || import.store)&.prefixed_id
33
47
  end
34
48
 
35
49
  attribute :user_id do |import|
@@ -4,7 +4,7 @@ module Spree
4
4
  module Api
5
5
  module V3
6
6
  class InvitationSerializer < BaseSerializer
7
- typelize email: :string, status: :string,
7
+ typelize email: :string, status: [:string, enum: Spree::Invitation.statuses, enum_type_name: 'InvitationStatus'],
8
8
  resource_type: [:string, nullable: true], resource_id: [:string, nullable: true],
9
9
  inviter_type: [:string, nullable: true], inviter_id: [:string, nullable: true],
10
10
  invitee_type: [:string, nullable: true], invitee_id: [:string, nullable: true],
@@ -14,12 +14,21 @@ module Spree
14
14
  discounted_amount: [:string, nullable: true], display_discounted_amount: [:string, nullable: true],
15
15
  compare_at_amount: [:string, nullable: true], display_compare_at_amount: [:string, nullable: true],
16
16
  thumbnail_url: [:string, nullable: true],
17
- preorder: :boolean, preorder_ships_at: [:string, nullable: true]
17
+ preorder: :boolean, preorder_ships_at: [:string, nullable: true],
18
+ seller_id: [:string, nullable: true]
18
19
 
19
20
  attribute :variant_id do |line_item|
20
21
  line_item.variant&.prefixed_id
21
22
  end
22
23
 
24
+ # Which seller this line was bought from, snapshotted when it was
25
+ # added — nil is the operator's own first-party item. Always present
26
+ # so a storefront can group a multi-seller cart without paying for the
27
+ # expand; `?expand=seller` adds the public profile.
28
+ attribute :seller_id do |line_item|
29
+ line_item.seller&.prefixed_id
30
+ end
31
+
23
32
  # True when the line item's variant is currently a pre-order, so the
24
33
  # cart/checkout can flag it as shipping later.
25
34
  attribute :preorder do |line_item|
@@ -57,8 +66,16 @@ module Spree
57
66
  image_url_for(line_item.thumbnail)
58
67
  end
59
68
 
69
+ one :seller,
70
+ resource: proc { Spree.api.seller_serializer },
71
+ if: proc { expand?('seller') }
72
+
60
73
  many :option_values, resource: proc { Spree.api.option_value_serializer }
61
74
  many :digital_links, resource: proc { Spree.api.digital_link_serializer }
75
+ # Tax hangs off its adjustable, never off the cart or order: the
76
+ # exactly-one-adjustable rule makes the nested view complete, and the
77
+ # owner already carries the tax totals.
78
+ many :tax_lines, resource: proc { Spree.api.tax_line_serializer }, if: proc { expand?('tax_lines') }
62
79
  end
63
80
  end
64
81
  end
@@ -5,11 +5,11 @@ module Spree
5
5
  typelize name: :string, currency: :string,
6
6
  default_locale: :string,
7
7
  supported_locales: [:string, multi: true],
8
- country_isos: [:string, multi: true],
8
+ country_codes: [:string, multi: true],
9
9
  tax_inclusive: :boolean,
10
10
  default: :boolean
11
11
 
12
- attributes :name, :currency, :default_locale, :tax_inclusive, :default, :country_isos
12
+ attributes :name, :currency, :default_locale, :tax_inclusive, :default, :country_codes
13
13
 
14
14
  attribute :supported_locales do |market|
15
15
  market.supported_locales_list
@@ -3,11 +3,11 @@
3
3
  module Spree
4
4
  module Api
5
5
  module V3
6
- class AssetSerializer < BaseSerializer
7
- # `type` is not exposed: Spree::Image/Spree::Video were collapsed into
8
- # Spree::Asset, so the STI column is a legacy vestige with no subclasses
6
+ class MediaEventSerializer < BaseSerializer
7
+ # `type` is not exposed: the old Spree::Image/Spree::Video STI collapsed
8
+ # into one class, so the column is a legacy vestige with no subclasses
9
9
  # — `media_type` is the discriminator (see MediaSerializer).
10
- typelize media_type: :string, viewable_type: :string,
10
+ typelize media_type: [:string, enum: Spree::Media::MEDIA_TYPES], viewable_type: :string,
11
11
  viewable_id: :string, position: [:number, nullable: true],
12
12
  alt: [:string, nullable: true]
13
13
 
@@ -5,10 +5,14 @@ module Spree
5
5
  typelize position: :number, alt: [:string, nullable: true],
6
6
  product_id: [:string, nullable: true],
7
7
  variant_ids: [:string, multi: true],
8
- media_type: :string,
8
+ media_type: [:string, enum: Spree::Media::MEDIA_TYPES],
9
9
  focal_point_x: [:number, nullable: true],
10
10
  focal_point_y: [:number, nullable: true],
11
11
  external_video_url: [:string, nullable: true],
12
+ video_provider: [:string, nullable: true],
13
+ video_embed_url: [:string, nullable: true],
14
+ video_url: [:string, nullable: true],
15
+ poster_url: [:string, nullable: true],
12
16
  original_url: [:string, nullable: true], mini_url: [:string, nullable: true],
13
17
  small_url: [:string, nullable: true], medium_url: [:string, nullable: true],
14
18
  large_url: [:string, nullable: true], xlarge_url: [:string, nullable: true],
@@ -33,7 +37,36 @@ module Spree
33
37
  attributes :position, :alt, :media_type,
34
38
  :focal_point_x, :focal_point_y, :external_video_url
35
39
 
40
+ # Spree parses the YouTube/Vimeo link once, here, so no storefront has
41
+ # to reimplement it. Nil on anything that isn't an external video.
42
+ attribute :video_provider do |asset|
43
+ asset.external_video&.provider
44
+ end
45
+
46
+ attribute :video_embed_url do |asset|
47
+ asset.external_video&.embed_url
48
+ end
49
+
50
+ # The uploaded video file itself. Served as-is — Spree does not
51
+ # transcode.
52
+ attribute :video_url do |asset|
53
+ next nil unless asset.video? && asset.attachment.attached?
54
+
55
+ url_helpers.cdn_image_url(asset.attachment)
56
+ end
57
+
58
+ # Still frame for a video tile: the merchant's upload when there is one,
59
+ # otherwise the provider's own thumbnail.
60
+ attribute :poster_url do |asset|
61
+ next nil unless asset.playable_video?
62
+
63
+ still_url(asset)
64
+ end
65
+
66
+ # Nil for video rows — there is no image to size.
36
67
  attribute :original_url do |asset|
68
+ next nil if asset.playable_video?
69
+
37
70
  image_url_for(asset)
38
71
  end
39
72
 
@@ -42,18 +75,26 @@ module Spree
42
75
  # (e.g., mini, small, medium, large, xlarge)
43
76
  Spree::Config.product_image_variant_sizes.each_key do |variant_name|
44
77
  attribute :"#{variant_name}_url" do |asset|
45
- variant_url(asset, variant_name)
78
+ still_url(asset, variant_name)
46
79
  end
47
80
  end
48
81
 
49
82
  private
50
83
 
51
- def variant_url(asset, variant_name)
52
- return nil unless asset&.attachment&.attached?
84
+ # The row's still frame, sized when it's an attachment we control — an
85
+ # image's own file, or a video's poster, so a gallery that only knows
86
+ # how to draw an image still renders the right picture. A provider's
87
+ # thumbnail is served as-is: it isn't ours to resize, so every size
88
+ # resolves to the same URL.
89
+ def still_url(asset, variant_name = nil)
90
+ source = asset&.still_image
91
+ return asset&.provider_still_url if source.nil?
92
+
93
+ url_helpers.cdn_image_url(variant_name ? source.variant(variant_name) : source)
94
+ end
53
95
 
54
- Rails.application.routes.url_helpers.cdn_image_url(
55
- asset.attachment.variant(variant_name)
56
- )
96
+ def url_helpers
97
+ Rails.application.routes.url_helpers
57
98
  end
58
99
  end
59
100
  end
@@ -19,7 +19,7 @@ module Spree
19
19
  end
20
20
 
21
21
  attribute :customer_id do |subscriber|
22
- subscriber.user&.prefixed_id
22
+ subscriber.customer&.prefixed_id
23
23
  end
24
24
  end
25
25
  end
@@ -2,7 +2,7 @@ module Spree
2
2
  module Api
3
3
  module V3
4
4
  class OptionTypeSerializer < BaseSerializer
5
- typelize name: :string, label: :string, position: :number, kind: :string
5
+ typelize name: :string, label: :string, position: :number, kind: [:string, enum: Spree::OptionType::KINDS]
6
6
 
7
7
  attributes :name, :label, :position, :kind
8
8
  end
@@ -0,0 +1,60 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ # Store API Order Group Serializer
5
+ #
6
+ # What the customer bought in one checkout, when it was fulfilled by more
7
+ # than one seller. They made one purchase and paid once, so this is what
8
+ # their order history shows them — with the per-seller orders nested
9
+ # inside it, each carrying its own items, delivery and tracking.
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],
14
+ fulfillment_status: [:string, nullable: true, enum: Spree::Order::FULFILLMENT_STATUSES],
15
+ payment_status: [:string, nullable: true, enum: Spree::Order::PAYMENT_STATUSES],
16
+ completed_at: [:string, nullable: true],
17
+ billing_address: { nullable: true }, shipping_address: { nullable: true }
18
+
19
+ attributes :number, :email, :currency
20
+
21
+ attribute :total do |group|
22
+ group.total.to_s
23
+ end
24
+
25
+ attribute :display_total do |group|
26
+ group.display_total.to_s
27
+ end
28
+
29
+ attribute :item_total do |group|
30
+ group.item_total.to_s
31
+ end
32
+
33
+ attribute :display_item_total do |group|
34
+ group.display_item_total.to_s
35
+ end
36
+
37
+ # Rolled up across the children rather than stored, so it can never
38
+ # disagree with the orders it describes.
39
+ attribute :fulfillment_status do |group|
40
+ group.fulfillment_status
41
+ end
42
+
43
+ attribute :payment_status do |group|
44
+ group.payment_status
45
+ end
46
+
47
+ attribute :completed_at do |group|
48
+ group.created_at
49
+ end
50
+
51
+ one :billing_address, resource: proc { Spree.api.address_serializer }
52
+ one :shipping_address, resource: proc { Spree.api.address_serializer }
53
+
54
+ # The whole point of the group: the customer sees one purchase, and the
55
+ # seller orders inside it are how it will arrive.
56
+ many :orders, resource: proc { Spree.api.order_serializer }
57
+ end
58
+ end
59
+ end
60
+ end