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,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ module Admin
7
+ class ReturnSerializer < V3::ReturnSerializer
8
+ typelize memo: [:string, nullable: true],
9
+ metadata: 'Record<string, unknown>',
10
+ documents: "Array<{ kind: string; url: string }>",
11
+ stock_location_id: [:string, nullable: true],
12
+ created_by_id: [:string, nullable: true],
13
+ refunded_total: :string,
14
+ refundable_total: :string
15
+
16
+ attributes :memo, :metadata, created_at: :iso8601, updated_at: :iso8601
17
+
18
+ attribute :stock_location_id do |return_record|
19
+ return_record.stock_location&.prefixed_id
20
+ end
21
+
22
+ attribute :created_by_id do |return_record|
23
+ return_record.created_by&.prefixed_id
24
+ end
25
+
26
+ attribute :refunded_total do |return_record|
27
+ return_record.refunded_total.to_s
28
+ end
29
+
30
+ attribute :refundable_total do |return_record|
31
+ return_record.refundable_total.to_s
32
+ end
33
+
34
+ many :return_line_items,
35
+ resource: proc { Spree.api.admin_return_line_item_serializer },
36
+ if: proc { expand?('return_line_items') }
37
+
38
+ one :reason, resource: proc { Spree.api.admin_return_reason_serializer }, if: proc { expand?('reason') }
39
+ one :order, resource: proc { Spree.api.admin_order_serializer }, if: proc { expand?('order') }
40
+ one :stock_location, resource: proc { Spree.api.admin_stock_location_serializer }, if: proc { expand?('stock_location') }
41
+ many :refunds, resource: proc { Spree.api.admin_refund_serializer }, if: proc { expand?('refunds') }
42
+
43
+ # Paperwork the provider produced beside the label: a cross-border
44
+ # return is declared like any other export.
45
+ attribute :documents do |return_record|
46
+ return_record.provider.documents(return_record).map(&:as_json)
47
+ end
48
+
49
+ # The prepaid label for the parcel coming back, refunded ones
50
+ # included — the postage history of the return.
51
+ many :shipping_labels, key: :labels, resource: proc { Spree.api.admin_shipping_label_serializer }
52
+
53
+ # Where the inbound parcel is, as the carrier last reported it.
54
+ many :deliveries, resource: proc { Spree.api.admin_delivery_serializer }
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -2,14 +2,32 @@ module Spree
2
2
  module Api
3
3
  module V3
4
4
  module Admin
5
- # Admin API serializer for {Spree::Role}. Read-only used to populate
6
- # the role picker on the staff invite/edit forms. Spree core ships
7
- # with a single `admin` role today; richer role/permission management
8
- # is on the roadmap.
5
+ # Admin API serializer for {Spree::Role}. A role belongs to the store
6
+ # it governs; permissions are flat catalog keys (see the
7
+ # `/admin/permissions` discovery endpoint). `mutable: false` marks the
8
+ # protected admin role and host-locked rows — the dashboard renders
9
+ # those read-only.
9
10
  class RoleSerializer < V3::BaseSerializer
10
- typelize name: :string
11
+ typelize name: :string, description: 'string | null', mutable: :boolean,
12
+ users_count: :number
13
+ typelize permissions: [:string, multi: true]
11
14
 
12
- attributes :name, created_at: :iso8601, updated_at: :iso8601
15
+ attributes :name, :description, created_at: :iso8601, updated_at: :iso8601
16
+
17
+ # The admin role ignores its stored list and grants everything — so
18
+ # it reports every key its own audience may hold, which is what the
19
+ # role grid renders and what a duplicate of it copies.
20
+ attribute(:permissions) do |role|
21
+ role.name == Spree::Role::ADMIN_ROLE ? Spree.permissions.grantable_keys(role.audience) : role.permissions
22
+ end
23
+
24
+ attribute(:mutable, &:mutable?)
25
+
26
+ # Staff assignments. The role belongs to one store already, so every
27
+ # assignment it has is on that store.
28
+ attribute :users_count do |role|
29
+ role.role_users.size
30
+ end
13
31
  end
14
32
  end
15
33
  end
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin API serializer for {Spree::SavedReport}: the reporting contract
6
+ # query and its attribution.
7
+ class SavedReportSerializer < V3::BaseSerializer
8
+ typelize name: :string,
9
+ description: [:string, nullable: true],
10
+ query: 'Record<string, unknown>',
11
+ seeded: :boolean,
12
+ user_id: [:string, nullable: true],
13
+ author_name: [:string, nullable: true],
14
+ created_at: :string,
15
+ updated_at: :string
16
+
17
+ attributes :name, :description, :query, :seeded, :created_at, :updated_at
18
+
19
+ attribute :user_id do |report|
20
+ report.user&.prefixed_id
21
+ end
22
+
23
+ attribute :author_name do |report|
24
+ user = report.user
25
+ next nil unless user
26
+
27
+ user.full_name.presence || user.email
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,37 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # A seller's position in one currency (Spree::SellerBalance), for the
6
+ # operator. A computed value rather than a record, so it carries no id.
7
+ class SellerBalanceSerializer < V3::BaseSerializer
8
+ typelize seller_id: :string,
9
+ currency: :string,
10
+ settlement_currency: :string,
11
+ converted: :boolean,
12
+ earned: :string, display_earned: :string,
13
+ payable: :string, display_payable: :string,
14
+ paid: :string, display_paid: :string,
15
+ balance: :string, display_balance: :string,
16
+ pending: :string, display_pending: :string
17
+
18
+ _attributes.delete(:id)
19
+
20
+ # Two sides when the account settles in another currency: what the
21
+ # sales were worth, and what the account received once the provider
22
+ # converted. Never added together.
23
+ attributes :currency, :settlement_currency
24
+
25
+ attribute(:converted) { |balance| balance.converted? }
26
+
27
+ attribute(:seller_id) { |balance| balance.seller&.prefixed_id }
28
+
29
+ %i[earned payable paid balance pending].each do |figure|
30
+ attribute(figure) { |balance| balance.public_send(figure).to_s }
31
+ attribute(:"display_#{figure}") { |balance| balance.public_send(:"display_#{figure}").to_s }
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,46 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Serializes Spree::SellerPayout — one settlement to one seller.
6
+ #
7
+ # Created by the sweep rather than by a caller, so the API offers no
8
+ # create or update. The one thing an operator does to a payout is say
9
+ # it landed, which is its own member action.
10
+ class SellerPayoutSerializer < V3::BaseSerializer
11
+ typelize seller_id: :string,
12
+ seller_name: 'string | null',
13
+ status: [:string, enum: Spree::SellerPayout.statuses, enum_type_name: 'SellerPayoutStatus'],
14
+ provider: [:string, comment: 'Payout provider class name. Built-in: Spree::PayoutProvider::System. Provider gems register more.'],
15
+ amount: :string,
16
+ currency: :string,
17
+ reference: 'string | null',
18
+ period_start: 'string | null',
19
+ period_end: 'string | null',
20
+ transfers_count: :number,
21
+ display_amount: :string
22
+
23
+ attributes :status, :currency, :provider, :reference, :metadata,
24
+ period_start: :iso8601, period_end: :iso8601,
25
+ created_at: :iso8601, updated_at: :iso8601
26
+
27
+ attribute(:amount) { |payout| payout.amount&.to_s }
28
+ attribute(:display_amount) { |payout| payout.display_amount.to_s }
29
+ attribute(:seller_id) { |payout| payout.seller&.prefixed_id }
30
+ attribute(:seller_name) { |payout| payout.seller&.name }
31
+
32
+ # How many earnings this settlement covers, so a list answers "what
33
+ # is in this deposit" without loading every transfer.
34
+ #
35
+ # Read from a count the controller made for the whole page when there
36
+ # is one; a single payout read falls back to asking for its own.
37
+ attribute(:transfers_count) do |payout, params|
38
+ counts = params && params[:transfer_counts]
39
+
40
+ counts ? counts.fetch(payout.id, 0) : payout.transfers.count
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,68 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # A configured requirement, as the operator manages it. Admin-only:
6
+ # what a marketplace asks of its sellers is between the operator and
7
+ # the seller, and never appears on the store surface.
8
+ class SellerRequirementSerializer < BaseSerializer
9
+ typelize kind: [:string, comment: 'Requirement kind. Built-in: accept_terms, complete_profile, billing_address, returns_address, delivery_method, package_type, minimum_products, payout_account, required_custom_fields, policy, attestation, operator_review, document. Extensions may register more.'], name: :string, description: [:string, nullable: true],
10
+ position: :number, active: :boolean, required: :boolean,
11
+ allow_multiple: :boolean, accepts_submissions: :boolean,
12
+ reviewed_by_operator: :boolean,
13
+ preferences: 'Record<string, unknown>',
14
+ custom_field_definition_ids: [:string, multi: true],
15
+ metadata: 'Record<string, unknown> | null'
16
+
17
+ attributes :position, :active, :required, :metadata,
18
+ created_at: :iso8601,
19
+ updated_at: :iso8601
20
+
21
+ # The kind, so a dashboard can key presentation off it without
22
+ # parsing the Ruby class name.
23
+ attribute :kind do |requirement|
24
+ requirement.class.api_type
25
+ end
26
+
27
+ # What the seller sees — the operator's wording, or the kind's own.
28
+ attribute :name do |requirement|
29
+ requirement.display_name
30
+ end
31
+
32
+ attribute :description do |requirement|
33
+ requirement.display_description
34
+ end
35
+
36
+ attribute :preferences do |requirement|
37
+ requirement.serialized_preferences
38
+ end
39
+
40
+ # The definitions a requirement asks for, when its kind takes any.
41
+ # Read through the association, so one the operator deleted is gone
42
+ # rather than echoed back as an id nothing can address.
43
+ attribute :custom_field_definition_ids do |requirement|
44
+ if requirement.respond_to?(:custom_field_definition_prefixed_ids)
45
+ requirement.custom_field_definition_prefixed_ids
46
+ else
47
+ []
48
+ end
49
+ end
50
+
51
+ # Capabilities of the kind, so the operator's form knows whether to
52
+ # offer a second row of it and whether sellers can submit anything.
53
+ attribute :allow_multiple do |requirement|
54
+ requirement.class.allow_multiple?
55
+ end
56
+
57
+ attribute :accepts_submissions do |requirement|
58
+ requirement.class.accepts_submissions?
59
+ end
60
+
61
+ attribute :reviewed_by_operator do |requirement|
62
+ requirement.class.reviewed_by_operator?
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,48 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # One line of a seller's onboarding checklist — a requirement
6
+ # evaluated against them. A value object, so no id of its own: the
7
+ # `id` here is the requirement it came from, which is what a caller
8
+ # acts on.
9
+ class SellerRequirementStatusSerializer
10
+ include Alba::Resource
11
+ include Typelizer::DSL
12
+
13
+ typelize id: :string, kind: [:string, comment: 'Requirement kind. Built-in: accept_terms, complete_profile, billing_address, returns_address, delivery_method, package_type, minimum_products, payout_account, required_custom_fields, policy, attestation, operator_review, document. Extensions may register more.'], name: :string,
14
+ description: [:string, nullable: true],
15
+ required: :boolean, position: :number, status: [:string, enum: Spree::SellerRequirementStatus::STATUSES],
16
+ blocking: :boolean, action_url: [:string, nullable: true],
17
+ blocker: ['{ state: string; message: string | null } | null'],
18
+ required_policy_name: [:string, nullable: true]
19
+
20
+ attributes :id, :kind, :name, :description, :required, :position, :status, :action_url, :blocker
21
+
22
+ # Whether this stands between the seller and approval. Serialized
23
+ # rather than left to each client to derive, so the dashboard's
24
+ # override warning and the approval gate cannot disagree.
25
+ attribute :blocking do |status|
26
+ status.blocking?
27
+ end
28
+
29
+ # The document this line asks for, and what the seller published
30
+ # against it. Embedded rather than left to a second request: the
31
+ # operator is deciding whether to approve, and a line that says
32
+ # "Done" without showing the text is not something to approve on.
33
+ attribute :required_policy_name do |status|
34
+ status.required_policy_name
35
+ end
36
+
37
+ one :submission,
38
+ resource: proc { Spree.api.admin_seller_requirement_submission_serializer },
39
+ if: proc { |status| status.submission.present? }
40
+
41
+ one :published_policy,
42
+ resource: proc { Spree.api.admin_policy_serializer },
43
+ if: proc { |status| status.published_policy.present? }
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,57 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # What a seller submitted about one requirement, and what was made of
6
+ # it. The file is exposed as a URL rather than a blob id — it is what
7
+ # the reviewer opens.
8
+ class SellerRequirementSubmissionSerializer < BaseSerializer
9
+ typelize status: [:string, enum: Spree::SellerRequirementSubmission.statuses, enum_type_name: 'SellerRequirementSubmissionStatus'], note: [:string, nullable: true],
10
+ review_note: [:string, nullable: true],
11
+ reference: [:string, nullable: true],
12
+ reviewed_at: [:string, nullable: true],
13
+ file_url: [:string, nullable: true],
14
+ file_name: [:string, nullable: true],
15
+ seller_id: :string, requirement_id: :string,
16
+ requirement_name: :string,
17
+ metadata: 'Record<string, unknown> | null'
18
+
19
+ attributes :status, :note, :review_note, :reference, :metadata,
20
+ reviewed_at: :iso8601,
21
+ created_at: :iso8601,
22
+ updated_at: :iso8601
23
+
24
+ attribute :seller_id do |submission|
25
+ submission.seller&.prefixed_id
26
+ end
27
+
28
+ attribute :requirement_id do |submission|
29
+ submission.requirement&.prefixed_id
30
+ end
31
+
32
+ # The reviewer is looking at a queue of these and needs to know what
33
+ # each one answers without fetching the requirement.
34
+ attribute :requirement_name do |submission|
35
+ submission.requirement&.display_name
36
+ end
37
+
38
+ # A path to this API's own download action rather than a storage
39
+ # URL: these are identity documents, and the download is authorized
40
+ # per request instead of being readable by anyone holding a link.
41
+ attribute :file_url do |submission|
42
+ next nil unless submission.file.attached?
43
+
44
+ Spree::Core::Engine.routes.url_helpers.download_api_v3_admin_seller_requirement_submission_path(
45
+ seller_id: submission.seller.prefixed_id,
46
+ id: submission.prefixed_id
47
+ )
48
+ end
49
+
50
+ attribute :file_name do |submission|
51
+ submission.file.attached? ? submission.file.filename.to_s : nil
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,92 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # A seller as the marketplace operator sees it: the public profile the
6
+ # shopper also gets, plus the operational state and the settlement and
7
+ # tax configuration only the operator sets.
8
+ class SellerSerializer < V3::SellerSerializer
9
+ typelize status: [:string, enum: Spree::Seller.statuses, enum_type_name: 'SellerStatus'],
10
+ legal_name: [:string, nullable: true],
11
+ registration_number: [:string, nullable: true],
12
+ contact_email: [:string, nullable: true], billing_email: [:string, nullable: true],
13
+ tax_remittance: :string,
14
+ payouts_schedule_interval: [:string, nullable: true],
15
+ minimum_payout_amount: [:string, nullable: true],
16
+ holiday_mode_until: [:string, nullable: true],
17
+ terms_accepted_at: [:string, nullable: true],
18
+ deleted_at: [:string, nullable: true],
19
+ on_holiday: :boolean, sellable: :boolean,
20
+ products_count: :number, users_count: :number,
21
+ onboarding_progress: '{ done: number; total: number }',
22
+ onboarding_complete: :boolean,
23
+ metadata: 'Record<string, unknown> | null'
24
+
25
+ attributes :status, :contact_email, :billing_email,
26
+ :tax_remittance, :payouts_schedule_interval, :metadata,
27
+ holiday_mode_until: :iso8601,
28
+ terms_accepted_at: :iso8601,
29
+ created_at: :iso8601,
30
+ updated_at: :iso8601,
31
+ deleted_at: :iso8601
32
+
33
+ # A seller's policies are the seller's own, managed on the seller
34
+ # branch — the operator neither edits nor lists them in 6.0. The
35
+ # inherited declaration is dropped rather than shadowed, since
36
+ # keeping it would render a store serializer inside an admin
37
+ # response.
38
+ _attributes.delete(:policies)
39
+
40
+ attribute :minimum_payout_amount do |seller|
41
+ seller.minimum_payout_amount&.to_s
42
+ end
43
+
44
+ # Approved but away still cannot sell, and the list has to say so
45
+ # without the dashboard re-deriving the rule.
46
+ attribute :on_holiday do |seller|
47
+ seller.on_holiday?
48
+ end
49
+
50
+ attribute :sellable do |seller|
51
+ seller.sellable?
52
+ end
53
+
54
+ # Saves the dashboard a request per row for the two counts its list
55
+ # and header show. Read off the seller, which memoizes the SQL count
56
+ # so the minimum-products requirement asks the same question free.
57
+ attribute :products_count do |seller|
58
+ seller.products_count
59
+ end
60
+
61
+ attribute :users_count do |seller|
62
+ seller.users.size
63
+ end
64
+
65
+ # How far through the marketplace's checklist this seller is — what
66
+ # the list's progress column and the profile's badge render. The
67
+ # requirements themselves, with their submissions, stay on the
68
+ # heavier `onboarding` action; a list of sellers needs the number,
69
+ # not the rows behind it.
70
+ attribute :onboarding_progress do |seller|
71
+ seller.onboarding_progress
72
+ end
73
+
74
+ attribute :onboarding_complete do |seller|
75
+ seller.onboarding_complete?
76
+ end
77
+
78
+ attribute :legal_name, &:legal_name
79
+ attribute :registration_number, &:registration_number
80
+
81
+ one :billing_address,
82
+ resource: proc { Spree.api.admin_address_serializer },
83
+ if: proc { |seller| seller.billing_address.present? }
84
+
85
+ one :returns_address,
86
+ resource: proc { Spree.api.admin_address_serializer },
87
+ if: proc { |seller| seller.returns_address.present? }
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,29 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # A person who runs one of the marketplace's sellers.
6
+ #
7
+ # Deliberately not `AdminUserSerializer`: its `roles` attribute keeps
8
+ # only the roles held on the current *store*, and a seller's team hold
9
+ # theirs on the seller — so every member would read as having none. The
10
+ # role is not worth reporting anyway, since a seller's team all hold
11
+ # the one seeded role that carries the whole seller vocabulary.
12
+ class SellerTeamMemberSerializer < V3::BaseSerializer
13
+ typelize email: :string,
14
+ first_name: [:string, nullable: true],
15
+ last_name: [:string, nullable: true],
16
+ full_name: [:string, nullable: true],
17
+ avatar_url: [:string, nullable: true]
18
+
19
+ attributes :email, :first_name, :last_name, :full_name,
20
+ created_at: :iso8601, updated_at: :iso8601
21
+
22
+ attribute :avatar_url do |user|
23
+ image_url_for(user.avatar)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,53 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Serializes Spree::SellerTransfer — what one order earned one seller.
6
+ #
7
+ # Read-only: a transfer records money that moved, or is moving. What
8
+ # corrects it is a reversal, which is another row rather than an edit.
9
+ class SellerTransferSerializer < V3::BaseSerializer
10
+ typelize seller_id: :string,
11
+ order_id: 'string | null',
12
+ payout_id: 'string | null',
13
+ reversed_from_id: 'string | null',
14
+ refund_id: 'string | null',
15
+ seller_name: 'string | null',
16
+ order_number: 'string | null',
17
+ kind: [:string, enum: Spree::SellerTransfer::KINDS],
18
+ status: [:string, enum: Spree::SellerTransfer.statuses, enum_type_name: 'SellerTransferStatus'],
19
+ provider: [:string, comment: 'Payout provider class name. Built-in: Spree::PayoutProvider::System. Provider gems register more.'],
20
+ amount: :string,
21
+ currency: :string,
22
+ settled_amount: 'string | null',
23
+ settled_currency: 'string | null',
24
+ converted: :boolean,
25
+ reference: 'string | null',
26
+ display_amount: :string
27
+
28
+ attributes :kind, :status, :currency, :provider, :reference, :metadata,
29
+ created_at: :iso8601, updated_at: :iso8601
30
+
31
+ # A string, so the figure a seller is paid round-trips exactly.
32
+ attribute(:amount) { |transfer| transfer.amount&.to_s }
33
+ attribute(:display_amount) { |transfer| transfer.display_amount.to_s }
34
+
35
+ # What the seller's account received, when the provider converted on
36
+ # the way in. Null when it settled in the currency of the sale.
37
+ attribute(:settled_amount) { |transfer| transfer.settled_amount&.to_s }
38
+ attribute(:settled_currency) { |transfer| transfer.settled_currency }
39
+ attribute(:converted) { |transfer| transfer.converted? }
40
+
41
+ %i[seller order payout reversed_from refund].each do |association|
42
+ attribute(:"#{association}_id") { |transfer| transfer.public_send(association)&.prefixed_id }
43
+ end
44
+
45
+ # Both readable without expanding, since a ledger table is read row
46
+ # by row and these are what identify a row to an operator.
47
+ attribute(:seller_name) { |transfer| transfer.seller&.name }
48
+ attribute(:order_number) { |transfer| transfer.order&.number }
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,82 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # A bought or uploaded carrier label. Admin-only by design: the cost is
6
+ # what the merchant paid the carrier, and the ids are the provider's.
7
+ # The file is streamed through +download_url+, never linked to storage.
8
+ class ShippingLabelSerializer < V3::BaseSerializer
9
+ typelize owner_id: :string,
10
+ owner_type: [:string, enum: Spree::ShippingLabel::OWNER_TYPES],
11
+ source: [:string, enum: Spree::ShippingLabel::SOURCES],
12
+ status: [:string, enum: Spree::ShippingLabel.statuses, enum_type_name: 'ShippingLabelStatus'],
13
+ carrier: [:string, nullable: true],
14
+ carrier_name: [:string, nullable: true],
15
+ service: [:string, nullable: true],
16
+ tracking_number: [:string, nullable: true],
17
+ cost: :string,
18
+ currency: [:string, nullable: true],
19
+ display_cost: :string,
20
+ format: [:string, nullable: true],
21
+ external_id: [:string, nullable: true],
22
+ integration_id: [:string, nullable: true],
23
+ download_url: [:string, nullable: true],
24
+ file_pending: :boolean,
25
+ refunded_at: [:string, nullable: true],
26
+ metadata: 'Record<string, unknown>'
27
+
28
+ attributes :source, :status, :carrier, :carrier_name, :service, :tracking_number, :currency, :format,
29
+ :external_id, :metadata, refunded_at: :iso8601, created_at: :iso8601, updated_at: :iso8601
30
+
31
+ attribute :owner_id do |shipping_label|
32
+ shipping_label.owner&.prefixed_id
33
+ end
34
+
35
+ attribute :owner_type do |shipping_label|
36
+ shipping_label.owner_type == 'Spree::Return' ? 'return' : 'fulfillment'
37
+ end
38
+
39
+ attribute :cost do |shipping_label|
40
+ shipping_label.cost.to_s
41
+ end
42
+
43
+ attribute :display_cost do |shipping_label|
44
+ shipping_label.display_cost.to_s
45
+ end
46
+
47
+ attribute :integration_id do |shipping_label|
48
+ shipping_label.integration&.prefixed_id
49
+ end
50
+
51
+ # Whether the file is still being fetched from the carrier; the
52
+ # download proxies the provider's copy meanwhile.
53
+ attribute :file_pending do |shipping_label|
54
+ shipping_label.file_pending?
55
+ end
56
+
57
+ # Our own endpoint rather than a storage URL: the controller streams
58
+ # the bytes, so admin auth runs on every print.
59
+ attribute :download_url do |shipping_label|
60
+ next nil unless shipping_label.file.attached? || shipping_label.file_pending?
61
+
62
+ helpers = Spree::Core::Engine.routes.url_helpers
63
+ owner = shipping_label.owner
64
+ # Both paths are nested under an order; a fulfillment still on a
65
+ # cart has none, so there is nowhere to download it from yet.
66
+ next nil if owner.order.nil?
67
+
68
+ if owner.is_a?(Spree::Return)
69
+ helpers.download_api_v3_admin_order_return_label_path(
70
+ order_id: owner.order.prefixed_id, return_id: owner.prefixed_id, id: shipping_label.prefixed_id
71
+ )
72
+ else
73
+ helpers.download_api_v3_admin_order_fulfillment_label_path(
74
+ order_id: owner.order.prefixed_id, fulfillment_id: owner.prefixed_id, id: shipping_label.prefixed_id
75
+ )
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -2,8 +2,8 @@ module Spree
2
2
  module Api
3
3
  module V3
4
4
  module Admin
5
+ # No timestamps — see Admin::CountrySerializer.
5
6
  class StateSerializer < V3::StateSerializer
6
- attributes created_at: :iso8601, updated_at: :iso8601
7
7
  end
8
8
  end
9
9
  end