spree_api 5.6.1 → 6.0.0.beta2

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 (542) 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 +20 -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 +18 -9
  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 +164 -33
  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 +239 -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 +66 -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 +74 -16
  184. data/app/controllers/spree/api/v3/resource_controller.rb +170 -39
  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/actor_serializer.rb +28 -0
  282. data/app/serializers/spree/api/v3/admin/address_serializer.rb +27 -4
  283. data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +13 -10
  284. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +15 -2
  285. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +15 -0
  286. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +34 -0
  287. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +32 -0
  288. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +23 -0
  289. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +48 -0
  290. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +23 -0
  291. data/app/serializers/spree/api/v3/admin/catalog_product_serializer.rb +57 -0
  292. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +38 -0
  293. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +37 -0
  294. data/app/serializers/spree/api/v3/admin/catalog_serializer.rb +46 -0
  295. data/app/serializers/spree/api/v3/admin/category_serializer.rb +3 -2
  296. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +15 -1
  297. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +16 -0
  298. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +21 -0
  299. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +28 -0
  300. data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +22 -0
  301. data/app/serializers/spree/api/v3/admin/collection_serializer.rb +29 -0
  302. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +67 -0
  303. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +69 -0
  304. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +61 -0
  305. data/app/serializers/spree/api/v3/admin/company_invitation_serializer.rb +15 -0
  306. data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +11 -0
  307. data/app/serializers/spree/api/v3/admin/company_serializer.rb +37 -0
  308. data/app/serializers/spree/api/v3/admin/concerns/external_references_attribute.rb +33 -0
  309. data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +28 -0
  310. data/app/serializers/spree/api/v3/admin/country_serializer.rb +2 -2
  311. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -1
  312. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +2 -2
  313. data/app/serializers/spree/api/v3/admin/custom_field_serializer.rb +2 -2
  314. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +23 -22
  315. data/app/serializers/spree/api/v3/admin/dashboard_counter_serializer.rb +24 -0
  316. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +36 -0
  317. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +32 -0
  318. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +66 -1
  319. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +15 -0
  320. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +34 -0
  321. data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +65 -0
  322. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +10 -1
  323. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +20 -0
  324. data/app/serializers/spree/api/v3/admin/delivery_zone_member_serializer.rb +11 -0
  325. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +29 -0
  326. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +59 -0
  327. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -4
  328. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +16 -0
  329. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +34 -0
  330. data/app/serializers/spree/api/v3/admin/export_serializer.rb +20 -1
  331. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +14 -0
  332. data/app/serializers/spree/api/v3/admin/freight_summary_line_serializer.rb +46 -0
  333. data/app/serializers/spree/api/v3/admin/freight_summary_serializer.rb +16 -0
  334. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +39 -0
  335. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +31 -9
  336. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -3
  337. data/app/serializers/spree/api/v3/admin/import_serializer.rb +15 -2
  338. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +32 -0
  339. data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +4 -4
  340. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +46 -5
  341. data/app/serializers/spree/api/v3/admin/market_serializer.rb +5 -1
  342. data/app/serializers/spree/api/v3/admin/media_serializer.rb +50 -2
  343. data/app/serializers/spree/api/v3/admin/membership_product_serializer.rb +29 -0
  344. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +29 -0
  345. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +50 -0
  346. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  347. data/app/serializers/spree/api/v3/admin/order_serializer.rb +126 -31
  348. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +53 -0
  349. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +8 -2
  350. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -0
  351. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +41 -0
  352. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +39 -0
  353. data/app/serializers/spree/api/v3/admin/policy_serializer.rb +11 -0
  354. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +22 -0
  355. data/app/serializers/spree/api/v3/admin/price_list_product_serializer.rb +32 -0
  356. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +20 -8
  357. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -12
  358. data/app/serializers/spree/api/v3/admin/price_serializer.rb +3 -0
  359. data/app/serializers/spree/api/v3/admin/product_serializer.rb +54 -8
  360. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +39 -0
  361. data/app/serializers/spree/api/v3/admin/product_type_custom_field_definition_serializer.rb +44 -0
  362. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +34 -0
  363. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +6 -12
  364. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +17 -15
  365. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +80 -0
  366. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +94 -0
  367. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +27 -0
  368. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +6 -5
  369. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +72 -0
  370. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +16 -0
  371. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +21 -0
  372. data/app/serializers/spree/api/v3/admin/return_serializer.rb +58 -0
  373. data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
  374. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +32 -0
  375. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +37 -0
  376. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +46 -0
  377. data/app/serializers/spree/api/v3/admin/seller_requirement_serializer.rb +68 -0
  378. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +48 -0
  379. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +57 -0
  380. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +92 -0
  381. data/app/serializers/spree/api/v3/admin/seller_team_member_serializer.rb +29 -0
  382. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +53 -0
  383. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +82 -0
  384. data/app/serializers/spree/api/v3/admin/state_serializer.rb +1 -1
  385. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +65 -0
  386. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +20 -4
  387. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +116 -0
  388. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +57 -0
  389. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +48 -0
  390. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +5 -5
  391. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +57 -0
  392. data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +36 -16
  393. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +32 -0
  394. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +42 -7
  395. data/app/serializers/spree/api/v3/admin/store_serializer.rb +65 -1
  396. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +39 -0
  397. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +67 -0
  398. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +43 -0
  399. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +21 -0
  400. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +49 -0
  401. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +49 -8
  402. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +23 -0
  403. data/app/serializers/spree/api/v3/base_serializer.rb +61 -2
  404. data/app/serializers/spree/api/v3/cart_serializer.rb +90 -12
  405. data/app/serializers/spree/api/v3/category_serializer.rb +3 -3
  406. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +50 -0
  407. data/app/serializers/spree/api/v3/claim_reason_serializer.rb +20 -0
  408. data/app/serializers/spree/api/v3/claim_serializer.rb +62 -0
  409. data/app/serializers/spree/api/v3/collection_serializer.rb +41 -0
  410. data/app/serializers/spree/api/v3/company_invitation_serializer.rb +28 -0
  411. data/app/serializers/spree/api/v3/company_membership_serializer.rb +28 -0
  412. data/app/serializers/spree/api/v3/company_serializer.rb +33 -0
  413. data/app/serializers/spree/api/v3/custom_field_serializer.rb +2 -2
  414. data/app/serializers/spree/api/v3/customer_serializer.rb +9 -1
  415. data/app/serializers/spree/api/v3/data_request_event_serializer.rb +30 -0
  416. data/app/serializers/spree/api/v3/data_request_serializer.rb +40 -0
  417. data/app/serializers/spree/api/v3/delivery_method_serializer.rb +12 -2
  418. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +34 -17
  419. data/app/serializers/spree/api/v3/delivery_serializer.rb +29 -0
  420. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +29 -0
  421. data/app/serializers/spree/api/v3/delivery_zone_serializer.rb +13 -0
  422. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +23 -0
  423. data/app/serializers/spree/api/v3/digital_link_serializer.rb +6 -2
  424. data/app/serializers/spree/api/v3/discount_serializer.rb +21 -7
  425. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +53 -0
  426. data/app/serializers/spree/api/v3/exchange_serializer.rb +61 -0
  427. data/app/serializers/spree/api/v3/fee_serializer.rb +27 -0
  428. data/app/serializers/spree/api/v3/freight_summary_serializer.rb +38 -0
  429. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +28 -15
  430. data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
  431. data/app/serializers/spree/api/v3/import_row_serializer.rb +1 -1
  432. data/app/serializers/spree/api/v3/import_serializer.rb +18 -4
  433. data/app/serializers/spree/api/v3/invitation_serializer.rb +1 -1
  434. data/app/serializers/spree/api/v3/line_item_serializer.rb +18 -1
  435. data/app/serializers/spree/api/v3/market_serializer.rb +2 -2
  436. data/app/serializers/spree/api/v3/{asset_serializer.rb → media_event_serializer.rb} +4 -4
  437. data/app/serializers/spree/api/v3/media_serializer.rb +48 -7
  438. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +1 -1
  439. data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
  440. data/app/serializers/spree/api/v3/order_group_serializer.rb +60 -0
  441. data/app/serializers/spree/api/v3/order_serializer.rb +58 -6
  442. data/app/serializers/spree/api/v3/payment_method_serializer.rb +1 -1
  443. data/app/serializers/spree/api/v3/payment_serializer.rb +2 -6
  444. data/app/serializers/spree/api/v3/payment_session_serializer.rb +10 -3
  445. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
  446. data/app/serializers/spree/api/v3/policy_serializer.rb +7 -2
  447. data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
  448. data/app/serializers/spree/api/v3/product_serializer.rb +42 -10
  449. data/app/serializers/spree/api/v3/product_type_serializer.rb +17 -0
  450. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +11 -0
  451. data/app/serializers/spree/api/v3/refund_serializer.rb +9 -3
  452. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +42 -0
  453. data/app/serializers/spree/api/v3/return_reason_serializer.rb +20 -0
  454. data/app/serializers/spree/api/v3/return_serializer.rb +62 -0
  455. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +35 -0
  456. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +21 -0
  457. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +25 -0
  458. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +32 -0
  459. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +59 -0
  460. data/app/serializers/spree/api/v3/seller/delivery_profile_serializer.rb +26 -0
  461. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +35 -0
  462. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +17 -0
  463. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +26 -0
  464. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +29 -0
  465. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +30 -0
  466. data/app/serializers/spree/api/v3/seller/export_serializer.rb +44 -0
  467. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +43 -0
  468. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +76 -0
  469. data/app/serializers/spree/api/v3/seller/import_mapping_serializer.rb +20 -0
  470. data/app/serializers/spree/api/v3/seller/import_row_serializer.rb +17 -0
  471. data/app/serializers/spree/api/v3/seller/import_serializer.rb +77 -0
  472. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +29 -0
  473. data/app/serializers/spree/api/v3/seller/media_serializer.rb +26 -0
  474. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +44 -0
  475. data/app/serializers/spree/api/v3/seller/order_serializer.rb +119 -0
  476. data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +52 -0
  477. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +34 -0
  478. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +36 -0
  479. data/app/serializers/spree/api/v3/seller/policy_serializer.rb +11 -0
  480. data/app/serializers/spree/api/v3/seller/product_serializer.rb +60 -0
  481. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +30 -0
  482. data/app/serializers/spree/api/v3/seller/product_type_serializer.rb +29 -0
  483. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +77 -0
  484. data/app/serializers/spree/api/v3/seller/reason_serializer.rb +24 -0
  485. data/app/serializers/spree/api/v3/seller/requirement_custom_field_serializer.rb +36 -0
  486. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +62 -0
  487. data/app/serializers/spree/api/v3/seller/requirement_submission_serializer.rb +33 -0
  488. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +24 -0
  489. data/app/serializers/spree/api/v3/seller/return_serializer.rb +51 -0
  490. data/app/serializers/spree/api/v3/seller/shipping_label_serializer.rb +23 -0
  491. data/app/serializers/spree/api/v3/seller/stock_level_serializer.rb +27 -0
  492. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +17 -0
  493. data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +15 -0
  494. data/app/serializers/spree/api/v3/seller/team_member_serializer.rb +22 -0
  495. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +49 -0
  496. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +71 -0
  497. data/app/serializers/spree/api/v3/seller_serializer.rb +50 -0
  498. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +11 -0
  499. data/app/serializers/spree/api/v3/{stock_item_serializer.rb → stock_level_serializer.rb} +5 -5
  500. data/app/serializers/spree/api/v3/stock_location_serializer.rb +11 -7
  501. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +8 -15
  502. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +11 -0
  503. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +6 -6
  504. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +29 -0
  505. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +11 -0
  506. data/app/serializers/spree/api/v3/tax_identifier_serializer.rb +15 -0
  507. data/app/serializers/spree/api/v3/tax_line_serializer.rb +37 -0
  508. data/app/serializers/spree/api/v3/variant_serializer.rb +52 -2
  509. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +6 -6
  510. data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
  511. data/app/services/spree/api/v3/filters_aggregator.rb +14 -12
  512. data/app/services/spree/webhooks/deliver_webhook.rb +62 -26
  513. data/app/subscribers/spree/webhook_event_subscriber.rb +9 -5
  514. data/config/brakeman.ignore +1 -1
  515. data/config/initializers/typelizer.rb +51 -4
  516. data/config/locales/en.yml +5 -0
  517. data/config/routes.rb +730 -22
  518. data/lib/spree/api/configuration.rb +19 -19
  519. data/lib/spree/api/dependencies.rb +174 -227
  520. data/lib/spree/api/engine.rb +6 -0
  521. data/lib/spree/api/openapi/schema_helper.rb +179 -13
  522. data/lib/spree/api/testing_support/v3/base.rb +45 -15
  523. data/lib/spree/api.rb +10 -4
  524. data/lib/typelizer/open_enums.rb +35 -0
  525. metadata +342 -27
  526. data/app/controllers/spree/api/v3/admin/orders/adjustments_controller.rb +0 -25
  527. data/app/controllers/spree/api/v3/admin/stock_items_controller.rb +0 -42
  528. data/app/controllers/spree/api/v3/admin/store_credit_categories_controller.rb +0 -21
  529. data/app/controllers/spree/api/v3/store/digitals_controller.rb +0 -38
  530. data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +0 -24
  531. data/app/serializers/spree/api/v3/admin/dashboard_analytics_serializer.rb +0 -143
  532. data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +0 -15
  533. data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +0 -19
  534. data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +0 -34
  535. data/app/serializers/spree/api/v3/admin/store_credit_category_serializer.rb +0 -19
  536. data/app/serializers/spree/api/v3/customer_return_serializer.rb +0 -17
  537. data/app/serializers/spree/api/v3/digital_serializer.rb +0 -17
  538. data/app/serializers/spree/api/v3/reimbursement_serializer.rb +0 -27
  539. data/app/serializers/spree/api/v3/report_serializer.rb +0 -34
  540. data/app/serializers/spree/api/v3/return_authorization_serializer.rb +0 -31
  541. data/app/serializers/spree/api/v3/return_item_serializer.rb +0 -53
  542. data/app/serializers/spree/api/v3/shipping_category_serializer.rb +0 -11
@@ -0,0 +1,77 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # One of a seller's CSV imports, as their panel's wizard reads it: the
6
+ # mapping payload while `mapping`, the poll counters afterwards.
7
+ #
8
+ # Declared from the store base rather than the admin serializer, like
9
+ # every serializer on this branch — the two are parallel, and an admin
10
+ # serializer gaining an operator-only field would otherwise leak it
11
+ # here. The fields below are the wizard's own working data (what the
12
+ # seller uploaded, how its columns map, how many rows have landed), so
13
+ # they are restated rather than inherited.
14
+ class ImportSerializer < V3::ImportSerializer
15
+ typelize completed_rows_count: :number,
16
+ failed_rows_count: :number,
17
+ processing_errors: [:string, nullable: true],
18
+ preferred_delimiter: :string,
19
+ schema_fields: 'Array<{ name: string; label: string; required: boolean }>',
20
+ csv_headers: [:string, multi: true],
21
+ sample_row: 'Record<string, string | null>',
22
+ original_filename: [:string, nullable: true],
23
+ original_byte_size: [:number, nullable: true],
24
+ original_file_url: [:string, nullable: true]
25
+
26
+ attributes :processing_errors, :preferred_delimiter
27
+
28
+ # The file the seller uploaded. `original_file_url` is this branch's
29
+ # own streaming endpoint (JWT-authenticated), not a signed
30
+ # ActiveStorage URL — the panel's `/api/*` proxy would not carry one.
31
+ attribute :original_filename do |import|
32
+ import.attachment.blob&.filename&.to_s if import.attachment.attached?
33
+ end
34
+
35
+ attribute :original_byte_size do |import|
36
+ import.attachment.blob&.byte_size if import.attachment.attached?
37
+ end
38
+
39
+ attribute :original_file_url do |import|
40
+ next nil unless import.attachment.attached?
41
+
42
+ Spree::Core::Engine.routes.url_helpers.download_api_v3_seller_import_path(
43
+ id: import.prefixed_id
44
+ )
45
+ end
46
+
47
+ attribute :completed_rows_count do |import|
48
+ import.rows_status_counts['completed'] || 0
49
+ end
50
+
51
+ attribute :failed_rows_count do |import|
52
+ import.rows_status_counts['failed'] || 0
53
+ end
54
+
55
+ attribute :schema_fields do |import|
56
+ import.schema_fields.map do |field|
57
+ { name: field[:name], label: field[:label], required: field[:required].present? }
58
+ end
59
+ end
60
+
61
+ # Mapping-state only: these read the attached blob, which the 2s
62
+ # processing poll must never do.
63
+ attribute :csv_headers do |import|
64
+ import.mapping? ? (import.csv_headers || []) : []
65
+ end
66
+
67
+ attribute :sample_row do |import|
68
+ import.mapping? ? import.sample_row : {}
69
+ end
70
+
71
+ many :mappings,
72
+ resource: proc { Spree.api.seller_import_mapping_serializer }
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,29 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ class InvitationSerializer < V3::BaseSerializer
6
+ typelize email: :string, status: [:string, enum: Spree::Invitation.statuses, enum_type_name: 'InvitationStatus'],
7
+ expires_at: [:string, nullable: true],
8
+ accepted_at: [:string, nullable: true],
9
+ acceptance_url: :string
10
+
11
+ attributes :email,
12
+ created_at: :iso8601, expires_at: :iso8601, accepted_at: :iso8601
13
+
14
+ attribute :status do |invitation|
15
+ invitation.status.to_s
16
+ end
17
+
18
+ attribute :acceptance_url do |invitation|
19
+ if Spree::Config[:seller_panel_url].present? || Spree::Config[:dashboard_url].present?
20
+ Rails.application.routes.url_helpers.admin_invitation_acceptance_url(invitation)
21
+ else
22
+ "/accept-invitation/#{invitation.prefixed_id}?token=#{invitation.token}"
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,26 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # A file on a seller's own product.
6
+ #
7
+ # Declared from the store base rather than the admin serializer, like
8
+ # every serializer on this branch. What a seller needs is the file, how
9
+ # it is cropped, and which variants it belongs to.
10
+ class MediaSerializer < V3::MediaSerializer
11
+ typelize position: :number,
12
+ variant_ids: [:string, multi: true],
13
+ focal_point_x: [:number, nullable: true],
14
+ focal_point_y: [:number, nullable: true]
15
+
16
+ attributes :position, :focal_point_x, :focal_point_y,
17
+ created_at: :iso8601, updated_at: :iso8601
18
+
19
+ attribute :variant_ids do |media|
20
+ media.variants.map(&:prefixed_id)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,44 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # A line on one of this seller's orders — what to pick, how many, and
6
+ # what it sold for.
7
+ #
8
+ # Declared rather than subclassed from the store's line item: that one
9
+ # carries the associations a storefront needs (digital links, tax
10
+ # lines, the seller's own public profile), none of which help someone
11
+ # packing a box, and each of which would pull another serializer into
12
+ # this branch's generated types.
13
+ class OrderLineItemSerializer < V3::BaseSerializer
14
+ typelize name: :string,
15
+ sku: [:string, nullable: true],
16
+ options_text: [:string, nullable: true],
17
+ quantity: :number,
18
+ currency: :string,
19
+ variant_id: [:string, nullable: true],
20
+ thumbnail_url: [:string, nullable: true],
21
+ price: [:string, nullable: true], display_price: [:string, nullable: true],
22
+ total: [:string, nullable: true], display_total: [:string, nullable: true]
23
+
24
+ attributes :name, :options_text, :quantity, :currency
25
+
26
+ money_attributes :price, :display_price, :total, :display_total
27
+
28
+ attribute :variant_id do |line_item|
29
+ line_item.variant&.prefixed_id
30
+ end
31
+
32
+ # How a seller finds the item on their own shelf.
33
+ attribute :sku do |line_item|
34
+ line_item.variant&.sku
35
+ end
36
+
37
+ attribute :thumbnail_url do |line_item|
38
+ image_url_for(line_item.thumbnail)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,119 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # An order placed with this seller.
6
+ #
7
+ # Built from the base rather than the store serializer: that one is
8
+ # written for the shopper who placed the order, and carries payments —
9
+ # how the customer paid the marketplace is not the seller's business.
10
+ # What they are owed overall is still the commission ledger; this
11
+ # carries only what this one sale was charged.
12
+ #
13
+ # The addresses are here because the seller is merchant of record for
14
+ # their child order (docs/plans/6.0-multi-vendor-marketplace.md): the
15
+ # shipping address to post the parcel, the billing address because the
16
+ # invoice for that sale is theirs to issue. Both marketplace platforms
17
+ # we surveyed give a seller the same two.
18
+ #
19
+ # The buyer's email is not. A seller reaching the customer about a
20
+ # delivery has the phone on the shipping address; an email address is
21
+ # the one contact detail that lets a marketplace's customer be taken
22
+ # off it, and it is not needed to pack, post or invoice.
23
+ class OrderSerializer < V3::BaseSerializer
24
+ typelize number: :string,
25
+ customer_note: [:string, nullable: true],
26
+ currency: :string,
27
+ total_quantity: :number,
28
+ fulfillment_status: [:string, nullable: true, enum: Spree::Order::FULFILLMENT_STATUSES],
29
+ payment_status: [:string, nullable: true, enum: Spree::Order::PAYMENT_STATUSES],
30
+ status: [:string, enum: Spree::Order::STATUSES],
31
+ item_total: [:string, nullable: true], display_item_total: [:string, nullable: true],
32
+ delivery_total: [:string, nullable: true], display_delivery_total: [:string, nullable: true],
33
+ discount_total: [:string, nullable: true], display_discount_total: [:string, nullable: true],
34
+ adjustment_total: [:string, nullable: true], display_adjustment_total: [:string, nullable: true],
35
+ included_tax_total: [:string, nullable: true], display_included_tax_total: [:string, nullable: true],
36
+ additional_tax_total: [:string, nullable: true], display_additional_tax_total: [:string, nullable: true],
37
+ tax_total: [:string, nullable: true], display_tax_total: [:string, nullable: true],
38
+ total: [:string, nullable: true], display_total: [:string, nullable: true],
39
+ payment_total: [:string, nullable: true], display_payment_total: [:string, nullable: true],
40
+ amount_due: [:string, nullable: true], display_amount_due: [:string, nullable: true],
41
+ commission_amount_total: [:string, nullable: true],
42
+ display_commission_amount_total: [:string, nullable: true],
43
+ commission_tax_total: [:string, nullable: true],
44
+ display_commission_tax_total: [:string, nullable: true],
45
+ commission_total: [:string, nullable: true],
46
+ display_commission_total: [:string, nullable: true],
47
+ canceled_at: [:string, nullable: true],
48
+ cancel_reason_name: [:string, nullable: true],
49
+ cancel_note: [:string, nullable: true],
50
+ internal_note: [:string, nullable: true],
51
+ internal_note_html: [:string, nullable: true]
52
+
53
+ attributes :number, :customer_note, :currency, :total_quantity,
54
+ :status, :fulfillment_status, :payment_status,
55
+ completed_at: :iso8601, created_at: :iso8601, updated_at: :iso8601
56
+
57
+ # The seller's own working note. A marketplace basket is split into
58
+ # one order per seller, so this row — and the note on it — is theirs
59
+ # alone; it is never the operator's note about the whole sale.
60
+ attribute :internal_note do |order|
61
+ Spree::RichTextHelper.to_plain_text(order.internal_note).presence
62
+ end
63
+
64
+ attribute :internal_note_html do |order|
65
+ order.internal_note.presence
66
+ end
67
+
68
+ # What this seller is owed for the goods, and what the buyer paid for
69
+ # them. Deliberately not the whole money surface: gift cards, store
70
+ # credit and the payment breakdown belong to the marketplace.
71
+ money_attributes :item_total, :display_item_total,
72
+ :delivery_total, :display_delivery_total,
73
+ :discount_total, :display_discount_total,
74
+ :adjustment_total, :display_adjustment_total,
75
+ :included_tax_total, :display_included_tax_total,
76
+ :additional_tax_total, :display_additional_tax_total,
77
+ :tax_total, :display_tax_total,
78
+ :total, :display_total,
79
+ :payment_total, :display_payment_total,
80
+ :amount_due, :display_amount_due
81
+
82
+ # What the marketplace charged the seller on this sale, and the tax
83
+ # on that charge. The ledger remains where a seller sees what they
84
+ # are owed overall, but the tax belongs on the order itself: the
85
+ # commission is a B2B supply from the platform, so this is the
86
+ # seller's input tax to reclaim, and it has to be attributable to
87
+ # the sale that produced it.
88
+ money_attributes :commission_amount_total, :display_commission_amount_total,
89
+ :commission_tax_total, :display_commission_tax_total,
90
+ :commission_total, :display_commission_total
91
+
92
+ # Why the sale was called off, when it was. The reason is the
93
+ # marketplace's vocabulary, so it is rendered as a name rather than
94
+ # an id a seller has nothing else to do with.
95
+ attribute :canceled_at do |order|
96
+ order.canceled_at&.iso8601
97
+ end
98
+
99
+ attribute :cancel_reason_name do |order|
100
+ order.cancel_reason&.name
101
+ end
102
+
103
+ attributes :cancel_note
104
+
105
+ many :line_items, key: :items, resource: proc { Spree.api.seller_order_line_item_serializer }
106
+ # This order's share of the basket's payment, on request: the order
107
+ # page reads it, the list never does. Empty on an order that did not
108
+ # split — a single-seller basket keeps the payment on the order
109
+ # itself, and that payment stays the marketplace's.
110
+ many :payment_splits, resource: proc { Spree.api.seller_payment_split_serializer },
111
+ if: proc { expand?('payment_splits') }
112
+ many :fulfillments, resource: proc { Spree.api.seller_fulfillment_serializer }
113
+ one :shipping_address, resource: proc { Spree.api.address_serializer }
114
+ one :billing_address, resource: proc { Spree.api.address_serializer }
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,52 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # What a seller packs their goods into: their own boxes, cartons and
6
+ # pallets, and the marketplace's shared packaging they may also use.
7
+ #
8
+ # Declared on `BaseSerializer` rather than on a store twin because
9
+ # there is none — a shopper never picks their packaging, so package
10
+ # types exist on the back-office surfaces only.
11
+ #
12
+ # `editable` is what the panel renders a marketplace row read-only by,
13
+ # mirroring the seller's delivery method serializer: a seller sees the
14
+ # operator's cartons so they know what they can pack into, and the API
15
+ # refuses to write them (docs/plans/6.0-seller-package-types.md).
16
+ class PackageTypeSerializer < V3::BaseSerializer
17
+ typelize name: :string,
18
+ kind: [:string, enum: Spree::PackageType::KINDS],
19
+ length: [:string, nullable: true],
20
+ width: [:string, nullable: true],
21
+ height: [:string, nullable: true],
22
+ dimensions_unit: [:string, enum: Spree::Variant::DIMENSION_UNITS],
23
+ weight: [:string, nullable: true],
24
+ max_weight: [:string, nullable: true],
25
+ weight_unit: [:string, enum: Spree::Variant::WEIGHT_UNITS],
26
+ volume: [:string, nullable: true],
27
+ default: :boolean,
28
+ editable: :boolean,
29
+ metadata: ['Record<string, unknown> | null']
30
+
31
+ attributes :name, :kind, :length, :width, :height, :weight, :max_weight,
32
+ :default, :metadata
33
+
34
+ attributes created_at: :iso8601, updated_at: :iso8601
35
+
36
+ # Both units read through their fallbacks, so a row that never set
37
+ # one still tells the seller what its numbers mean.
38
+ attribute :dimensions_unit, &:dimensions_unit
39
+ attribute :weight_unit, &:weight_unit
40
+
41
+ attribute :volume, &:volume
42
+
43
+ # False for a marketplace row: listed so the seller knows what they
44
+ # can pack into, and not theirs to change.
45
+ attribute :editable do |package_type|
46
+ package_type.seller_id.present?
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,34 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # This order's share of the payment the buyer made for the whole
6
+ # basket (Spree::PaymentSplit), as the seller reads it.
7
+ #
8
+ # Amounts only. Which payment it is a share of, how the buyer paid and
9
+ # what the gateway said are the marketplace's — the seller's question
10
+ # is how much of their order was captured, refunded, and can still be
11
+ # refunded.
12
+ class PaymentSplitSerializer < V3::BaseSerializer
13
+ AMOUNTS = %i[authorized_amount captured_amount refunded_amount claimed_amount
14
+ net_captured_amount refundable_amount].freeze
15
+
16
+ typelize currency: :string,
17
+ authorized_amount: :string, display_authorized_amount: :string,
18
+ captured_amount: :string, display_captured_amount: :string,
19
+ refunded_amount: :string, display_refunded_amount: :string,
20
+ claimed_amount: :string, display_claimed_amount: :string,
21
+ net_captured_amount: :string, display_net_captured_amount: :string,
22
+ refundable_amount: :string, display_refundable_amount: :string
23
+
24
+ attributes :currency, created_at: :iso8601
25
+
26
+ AMOUNTS.each do |amount|
27
+ attribute(amount) { |split| split.public_send(amount).to_s }
28
+ attribute(:"display_#{amount}") { |split| split.public_send(:"display_#{amount}").to_s }
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # One settlement to this seller, as the seller reads it.
6
+ class PayoutSerializer < V3::BaseSerializer
7
+ typelize status: :string,
8
+ currency: :string,
9
+ provider: :string,
10
+ amount: :string,
11
+ display_amount: :string,
12
+ reference: 'string | null',
13
+ period_start: 'string | null',
14
+ period_end: 'string | null',
15
+ transfers_count: :number
16
+
17
+ attributes :status, :currency, :provider, :reference,
18
+ period_start: :iso8601, period_end: :iso8601,
19
+ created_at: :iso8601, updated_at: :iso8601
20
+
21
+ attribute(:amount) { |payout| payout.amount&.to_s }
22
+ attribute(:display_amount) { |payout| payout.display_amount.to_s }
23
+
24
+ # How many earnings this settlement covers. Read from a count the
25
+ # controller made for the whole page when there is one; a single
26
+ # payout read falls back to asking for its own.
27
+ attribute(:transfers_count) do |payout, params|
28
+ counts = params && params[:transfer_counts]
29
+
30
+ counts ? counts.fetch(payout.id, 0) : payout.transfers.count
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ class PolicySerializer < V3::PolicySerializer
6
+ attributes created_at: :iso8601
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,60 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # A seller's own product.
6
+ #
7
+ # Read and write have to name the same fields: the panel loads a
8
+ # product into a form and sends it back, so anything the controller
9
+ # accepts but this withholds would be blanked on save. The reverse
10
+ # matters too — how a product is filed (categories, collections, tags)
11
+ # is the marketplace's own merchandising, so it is neither written nor
12
+ # read here. The type and the delivery profile are: a seller picks
13
+ # both from the marketplace's list
14
+ # (docs/plans/6.0-multi-vendor-marketplace.md, Decision 13).
15
+ class ProductSerializer < V3::ProductSerializer
16
+ typelize status: [:string, enum: Spree::Product.statuses, enum_type_name: 'ProductStatus'], metadata: 'Record<string, unknown>',
17
+ product_type_id: [:string, nullable: true],
18
+ delivery_profile_id: [:string, nullable: true],
19
+ submission: ['ProductSubmission', nullable: true]
20
+
21
+ attributes :status, :metadata, created_at: :iso8601, updated_at: :iso8601
22
+
23
+ attribute :product_type_id do |product|
24
+ product.product_type&.prefixed_id
25
+ end
26
+
27
+ attribute :delivery_profile_id do |product|
28
+ product.delivery_profile&.prefixed_id
29
+ end
30
+
31
+ many :variants,
32
+ resource: proc { Spree.api.seller_variant_serializer },
33
+ if: proc { expand?('variants') }
34
+
35
+ one :default_variant,
36
+ resource: proc { Spree.api.seller_variant_serializer },
37
+ if: proc { expand?('default_variant') }
38
+
39
+ many :gallery_media,
40
+ key: :media,
41
+ resource: proc { Spree.api.seller_media_serializer },
42
+ if: proc { expand?('media') }
43
+
44
+ many :option_types,
45
+ resource: proc { Spree.api.option_type_serializer },
46
+ if: proc { expand?('option_types') }
47
+
48
+ # Why the marketplace sent this back, so the panel can show it
49
+ # against a rejected listing without a second request. Expanded
50
+ # rather than always sent — it is a per-product query, and the
51
+ # products list has no use for it.
52
+ one :latest_submission,
53
+ key: :submission,
54
+ resource: proc { Spree.api.product_submission_serializer },
55
+ if: proc { expand?('submission') }
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,30 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # The marketplace's answer on a listing, as the seller sees it.
6
+ #
7
+ # The reviewer's identity is deliberately absent: a seller needs to
8
+ # know what to change, not which member of the marketplace's staff
9
+ # decided (docs/plans/6.0-seller-product-submission.md).
10
+ class ProductSubmissionSerializer < BaseSerializer
11
+ typelize status: [:string, enum: Spree::ProductSubmission.statuses, enum_type_name: 'ProductSubmissionStatus'],
12
+ product_id: :string,
13
+ review_note: [:string, nullable: true],
14
+ reviewed_at: [:string, nullable: true]
15
+
16
+ attributes :status, :review_note,
17
+ reviewed_at: :iso8601,
18
+ created_at: :iso8601
19
+
20
+ # Carried for the event payload, which is this serializer's other
21
+ # job: a subscriber holding only the submission id would have to
22
+ # fetch the row back to learn which product was decided on.
23
+ attribute :product_id do |submission|
24
+ submission.product&.prefixed_id
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,29 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ # A product type as a seller sees it: something to list against, and
6
+ # what picking it will bring.
7
+ #
8
+ # The option types are carried as **labels**, not as ids the client
9
+ # then resolves. The operator's form looks them up against the option
10
+ # types page it already loads, but a seller manages no option-type
11
+ # vocabulary and has no such endpoint — sending ids alone would leave
12
+ # the form unable to name them, and the warning it exists to show
13
+ # would silently never appear.
14
+ #
15
+ # No `category_ids` (filing is the operator's, so a seller would be
16
+ # shown a consequence they never see) and no `products_count` or
17
+ # custom field schema, which describe how the operator maintains the
18
+ # type rather than what listing against it does.
19
+ class ProductTypeSerializer < V3::ProductTypeSerializer
20
+ typelize option_type_labels: [:string, multi: true]
21
+
22
+ attribute :option_type_labels do |product_type|
23
+ product_type.option_types.map { |option_type| option_type.label.presence || option_type.name }.compact
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,77 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Seller
5
+ class ProfileSerializer < V3::SellerSerializer
6
+ typelize status: [:string, enum: Spree::Seller.statuses, enum_type_name: 'SellerStatus'],
7
+ legal_name: [:string, nullable: true],
8
+ registration_number: [:string, nullable: true],
9
+ contact_email: [:string, nullable: true],
10
+ billing_email: [:string, nullable: true],
11
+ tax_remittance: :string,
12
+ payouts_schedule_interval: [:string, nullable: true],
13
+ minimum_payout_amount: [:string, nullable: true],
14
+ holiday_mode_until: [:string, nullable: true],
15
+ terms_accepted_at: [:string, nullable: true],
16
+ on_holiday: :boolean, sellable: :boolean,
17
+ products_count: :number,
18
+ default_currency: :string,
19
+ supported_currencies: [:string, multi: true],
20
+ preferred_timezone: [:string, nullable: true]
21
+
22
+ attributes :preferred_timezone,
23
+ :status, :legal_name, :registration_number,
24
+ :contact_email, :billing_email,
25
+ :tax_remittance, :payouts_schedule_interval,
26
+ holiday_mode_until: :iso8601,
27
+ terms_accepted_at: :iso8601,
28
+ created_at: :iso8601
29
+
30
+ attribute :minimum_payout_amount do |seller|
31
+ seller.minimum_payout_amount&.to_s
32
+ end
33
+
34
+ # Rebound from the inherited store declaration to this branch's own
35
+ # serializer: a seller reading their own profile gets the seller
36
+ # shape of a policy (with `created_at`), which is what the seller
37
+ # SDK's generated type and this branch's OpenAPI schema promise.
38
+ _attributes.delete(:policies)
39
+ many :policies,
40
+ resource: proc { Spree.api.seller_policy_serializer },
41
+ if: proc { expand?('policies') }
42
+
43
+ attribute :on_holiday do |seller|
44
+ seller.on_holiday?
45
+ end
46
+
47
+ attribute :sellable do |seller|
48
+ seller.sellable?
49
+ end
50
+
51
+ # What this seller prices in. Theirs by way of the marketplace: a
52
+ # seller has no currency of their own, so the store's is the answer
53
+ # to "what does this amount mean".
54
+ attribute :default_currency do |seller|
55
+ seller.store&.default_currency
56
+ end
57
+
58
+ attribute :supported_currencies do |seller|
59
+ seller.store&.supported_currencies_list&.map(&:iso_code) || []
60
+ end
61
+
62
+ attribute :products_count do |seller|
63
+ seller.products.count
64
+ end
65
+
66
+ one :billing_address,
67
+ resource: proc { Spree.api.address_serializer },
68
+ if: proc { |seller| seller.billing_address.present? }
69
+
70
+ one :returns_address,
71
+ resource: proc { Spree.api.address_serializer },
72
+ if: proc { |seller| seller.returns_address.present? }
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ module Seller
7
+ # One entry of a marketplace-owned vocabulary — why goods came back,
8
+ # or what went wrong with a delivery.
9
+ #
10
+ # One serializer for both, unlike the store and admin branches, which
11
+ # keep ReturnReason and ClaimReason apart so Typelizer emits a concrete
12
+ # type per endpoint. Here the two endpoints answer the same shape — a
13
+ # name and whether it is still offered — and the panel renders them
14
+ # through one picker, so a single `Reason` type is what the client
15
+ # actually wants. Read-only, so nothing here is writable.
16
+ class ReasonSerializer < V3::BaseSerializer
17
+ typelize name: :string, active: :boolean
18
+
19
+ attributes :name, :active
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end