spree_api 6.0.0.beta4 → 6.0.0.rc1

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 (342) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -31
  3. data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
  4. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
  5. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +1 -1
  6. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +7 -0
  7. data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +2 -2
  8. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
  9. data/app/controllers/concerns/spree/api/v3/error_handler.rb +7 -2
  10. data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
  11. data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
  12. data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
  13. data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
  14. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +1 -5
  15. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +2 -10
  16. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
  17. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +4 -8
  18. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
  19. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
  20. data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
  21. data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
  22. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +0 -5
  23. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +1 -1
  24. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +0 -6
  25. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +0 -4
  26. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +1 -1
  27. data/app/controllers/spree/api/v3/admin/channels_controller.rb +0 -4
  28. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +1 -2
  29. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +2 -2
  30. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +0 -4
  31. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
  32. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +0 -4
  33. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +1 -9
  34. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +0 -4
  35. data/app/controllers/spree/api/v3/admin/companies_controller.rb +0 -4
  36. data/app/controllers/spree/api/v3/admin/countries_controller.rb +1 -1
  37. data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
  38. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +9 -1
  39. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +0 -4
  40. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +0 -4
  41. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +0 -4
  42. data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
  43. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +0 -4
  44. data/app/controllers/spree/api/v3/admin/customers_controller.rb +2 -2
  45. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +1 -1
  46. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +3 -5
  47. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +1 -6
  48. data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +40 -0
  49. data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +30 -0
  50. data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +30 -0
  51. data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +34 -0
  52. data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
  53. data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
  54. data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +40 -0
  55. data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
  56. data/app/controllers/spree/api/v3/admin/imports_controller.rb +1 -2
  57. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +0 -7
  58. data/app/controllers/spree/api/v3/admin/me_controller.rb +1 -1
  59. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +5 -5
  60. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +0 -4
  61. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +1 -5
  62. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +1 -1
  63. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +1 -1
  64. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +18 -16
  65. data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +3 -3
  66. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +2 -10
  67. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +2 -14
  68. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +1 -5
  69. data/app/controllers/spree/api/v3/admin/orders_controller.rb +3 -3
  70. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +9 -7
  71. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +6 -53
  72. data/app/controllers/spree/api/v3/admin/prices_controller.rb +0 -4
  73. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +2 -6
  74. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +0 -4
  75. data/app/controllers/spree/api/v3/admin/products_controller.rb +1 -1
  76. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +0 -4
  77. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +0 -4
  78. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +1 -1
  79. data/app/controllers/spree/api/v3/admin/resource_controller.rb +1 -1
  80. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +1 -9
  81. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +2 -10
  82. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
  83. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
  84. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
  85. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +2 -10
  86. data/app/controllers/spree/api/v3/admin/setup_controller.rb +3 -11
  87. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +1 -1
  88. data/app/controllers/spree/api/v3/admin/store_controller.rb +6 -1
  89. data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
  90. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +17 -12
  91. data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
  92. data/app/controllers/spree/api/v3/base_controller.rb +10 -0
  93. data/app/controllers/spree/api/v3/resource_controller.rb +44 -1
  94. data/app/controllers/spree/api/v3/seller/auth_controller.rb +2 -2
  95. data/app/controllers/spree/api/v3/seller/countries_controller.rb +1 -1
  96. data/app/controllers/spree/api/v3/seller/exports_controller.rb +3 -3
  97. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +3 -3
  98. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
  99. data/app/controllers/spree/api/v3/seller/me_controller.rb +1 -1
  100. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +1 -1
  101. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +10 -11
  102. data/app/controllers/spree/api/v3/seller/products_controller.rb +2 -1
  103. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +1 -1
  104. data/app/controllers/spree/api/v3/seller/team_controller.rb +1 -1
  105. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +1 -1
  106. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +3 -11
  107. data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +5 -3
  108. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +6 -2
  109. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +1 -1
  110. data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +5 -3
  111. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +2 -2
  112. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +2 -0
  113. data/app/controllers/spree/api/v3/store/carts_controller.rb +9 -6
  114. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +0 -4
  115. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
  116. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +1 -1
  117. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +0 -4
  118. data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
  119. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +0 -5
  120. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
  121. data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
  122. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
  123. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +8 -6
  124. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +0 -4
  125. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
  126. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
  127. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
  128. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +5 -14
  129. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +1 -5
  130. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +1 -5
  131. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +0 -4
  132. data/app/serializers/spree/api/v3/admin/address_serializer.rb +5 -7
  133. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
  134. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
  135. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +1 -7
  136. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
  137. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
  138. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +5 -6
  139. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
  140. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -3
  141. data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
  142. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
  143. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
  144. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +2 -10
  145. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
  146. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +8 -22
  147. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
  148. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
  149. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
  150. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
  151. data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
  152. data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
  153. data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
  154. data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
  155. data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
  156. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +1 -3
  157. data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
  158. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
  159. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +1 -7
  160. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +1 -7
  161. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +2 -6
  162. data/app/serializers/spree/api/v3/admin/market_serializer.rb +4 -2
  163. data/app/serializers/spree/api/v3/admin/media_serializer.rb +1 -3
  164. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
  165. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +3 -9
  166. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +1 -3
  167. data/app/serializers/spree/api/v3/admin/order_serializer.rb +5 -15
  168. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
  169. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -1
  170. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +2 -7
  171. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
  172. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +1 -3
  173. data/app/serializers/spree/api/v3/admin/product_serializer.rb +2 -10
  174. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
  175. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
  176. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +1 -3
  177. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -3
  178. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +2 -15
  179. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +2 -15
  180. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
  181. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +4 -1
  182. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +1 -0
  183. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
  184. data/app/serializers/spree/api/v3/admin/return_serializer.rb +3 -11
  185. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
  186. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +4 -2
  187. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
  188. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
  189. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +5 -15
  190. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +4 -2
  191. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +6 -19
  192. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
  193. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +1 -3
  194. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +1 -3
  195. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
  196. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
  197. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
  198. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
  199. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +1 -3
  200. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +4 -18
  201. data/app/serializers/spree/api/v3/admin/store_serializer.rb +24 -6
  202. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +1 -3
  203. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +3 -9
  204. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
  205. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +5 -1
  206. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +1 -7
  207. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +6 -7
  208. data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
  209. data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
  210. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
  211. data/app/serializers/spree/api/v3/base_serializer.rb +20 -0
  212. data/app/serializers/spree/api/v3/cart_serializer.rb +17 -45
  213. data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
  214. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +11 -26
  215. data/app/serializers/spree/api/v3/claim_serializer.rb +2 -15
  216. data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
  217. data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
  218. data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
  219. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +3 -23
  220. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
  221. data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
  222. data/app/serializers/spree/api/v3/discount_serializer.rb +1 -12
  223. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +9 -27
  224. data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -15
  225. data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
  226. data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
  227. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
  228. data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +1 -3
  229. data/app/serializers/spree/api/v3/gift_card_serializer.rb +5 -17
  230. data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
  231. data/app/serializers/spree/api/v3/import_serializer.rb +3 -14
  232. data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
  233. data/app/serializers/spree/api/v3/line_item_serializer.rb +6 -20
  234. data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
  235. data/app/serializers/spree/api/v3/media_serializer.rb +1 -3
  236. data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
  237. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
  238. data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
  239. data/app/serializers/spree/api/v3/order_group_serializer.rb +2 -23
  240. data/app/serializers/spree/api/v3/order_serializer.rb +12 -38
  241. data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
  242. data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
  243. data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
  244. data/app/serializers/spree/api/v3/payment_session_serializer.rb +3 -9
  245. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
  246. data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
  247. data/app/serializers/spree/api/v3/price_history_serializer.rb +1 -3
  248. data/app/serializers/spree/api/v3/price_serializer.rb +1 -3
  249. data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
  250. data/app/serializers/spree/api/v3/product_serializer.rb +7 -21
  251. data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
  252. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
  253. data/app/serializers/spree/api/v3/refund_serializer.rb +3 -11
  254. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +12 -19
  255. data/app/serializers/spree/api/v3/return_serializer.rb +6 -15
  256. data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
  257. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +1 -7
  258. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +1 -7
  259. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
  260. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
  261. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +1 -3
  262. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
  263. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
  264. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
  265. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +7 -13
  266. data/app/serializers/spree/api/v3/seller/order_serializer.rb +4 -25
  267. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +4 -2
  268. data/app/serializers/spree/api/v3/seller/product_serializer.rb +1 -7
  269. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
  270. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +2 -6
  271. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
  272. data/app/serializers/spree/api/v3/seller/return_serializer.rb +3 -15
  273. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +4 -2
  274. data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
  275. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
  276. data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
  277. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
  278. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
  279. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
  280. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -11
  281. data/app/serializers/spree/api/v3/store_credit_serializer.rb +2 -24
  282. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
  283. data/app/serializers/spree/api/v3/tax_line_serializer.rb +10 -20
  284. data/app/serializers/spree/api/v3/variant_serializer.rb +7 -21
  285. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
  286. data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
  287. data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
  288. data/config/initializers/pagy.rb +1 -1
  289. data/config/initializers/typelizer.rb +6 -8
  290. data/config/locales/ar.yml +15 -0
  291. data/config/locales/be.yml +15 -0
  292. data/config/locales/bg.yml +15 -0
  293. data/config/locales/ca.yml +15 -0
  294. data/config/locales/cs.yml +15 -0
  295. data/config/locales/da.yml +15 -0
  296. data/config/locales/de-CH.yml +11 -0
  297. data/config/locales/de.yml +15 -0
  298. data/config/locales/el.yml +15 -0
  299. data/config/locales/en.yml +5 -40
  300. data/config/locales/es-CL.yml +10 -0
  301. data/config/locales/es-EC.yml +11 -0
  302. data/config/locales/es-MX.yml +12 -0
  303. data/config/locales/es.yml +15 -0
  304. data/config/locales/et.yml +15 -0
  305. data/config/locales/fa.yml +15 -0
  306. data/config/locales/fi.yml +15 -0
  307. data/config/locales/fr.yml +15 -0
  308. data/config/locales/hu.yml +15 -0
  309. data/config/locales/id.yml +15 -0
  310. data/config/locales/it.yml +15 -0
  311. data/config/locales/ja.yml +15 -0
  312. data/config/locales/km.yml +15 -0
  313. data/config/locales/ko.yml +15 -0
  314. data/config/locales/ku.yml +15 -0
  315. data/config/locales/lt.yml +15 -0
  316. data/config/locales/lv.yml +15 -0
  317. data/config/locales/nb.yml +15 -0
  318. data/config/locales/ne.yml +15 -0
  319. data/config/locales/nl.yml +15 -0
  320. data/config/locales/pl.yml +15 -0
  321. data/config/locales/pt-BR.yml +13 -0
  322. data/config/locales/pt.yml +15 -0
  323. data/config/locales/ro.yml +15 -0
  324. data/config/locales/ru.yml +15 -0
  325. data/config/locales/sk.yml +15 -0
  326. data/config/locales/sl-SI.yml +15 -0
  327. data/config/locales/sv.yml +15 -0
  328. data/config/locales/th.yml +15 -0
  329. data/config/locales/tr.yml +15 -0
  330. data/config/locales/uk.yml +15 -0
  331. data/config/locales/vi.yml +15 -0
  332. data/config/locales/zh-CN.yml +15 -0
  333. data/config/locales/zh-TW.yml +15 -0
  334. data/config/routes.rb +49 -99
  335. data/lib/spree/api/dependencies.rb +53 -274
  336. data/lib/spree/api/openapi/schema_helper.rb +1 -1
  337. data/lib/spree/api/typelizer_generation.rb +35 -0
  338. data/lib/spree/api/webhook_event_types.rb +140 -0
  339. data/lib/spree/api.rb +0 -2
  340. metadata +71 -36
  341. data/config/i18n-tasks.yml +0 -40
  342. data/config/initializers/alba.rb +0 -5
@@ -3,288 +3,67 @@ require 'spree/core/dependencies_helper'
3
3
  module Spree
4
4
  module Api
5
5
  class ApiDependencies
6
+ # Serializers named after their key: `product_serializer` is
7
+ # Spree::Api::V3::ProductSerializer, `admin_product_serializer` its Admin
8
+ # twin and `seller_product_serializer` its Seller one.
9
+ STORE_SERIALIZERS =
10
+ %i[credit_card price price_history product product_type variant media option_type option_value cart order
11
+ order_group line_item payment payment_session payment_setup_session payment_source store_credit
12
+ fulfillment delivery address customer data_request customer_group country channel product_publication
13
+ market state wishlist wishlist_item payment_method delivery_method delivery_rate freight_summary
14
+ stock_location category collection applied_promotion discount tax_line delivery_zone delivery_zone_member
15
+ fee digital_link gift_card currency locale policy custom_field tax_category tax_identifier
16
+ product_filters product_filter_price_range product_filter_availability product_filter_availability_option
17
+ product_filter_option product_filter_option_value product_filter_category product_filter_category_option
18
+ product_filter_sort_option media_event return return_line_item exchange exchange_line_item claim
19
+ claim_line_item return_reason claim_reason digital_asset export gift_card_batch import import_row
20
+ invitation newsletter_subscriber promotion refund stock_level stock_movement stock_reservation
21
+ stock_transfer company company_membership company_invitation seller].freeze
22
+
23
+ ADMIN_SERIALIZERS =
24
+ %i[country state applied_promotion discount tax_line cart delivery_zone delivery_profile
25
+ delivery_origin_group integration delivery_method_rule delivery_zone_member fee consent_record customer
26
+ data_request newsletter_subscriber order order_group product product_type
27
+ product_type_custom_field_definition variant price price_history custom_field custom_field_definition
28
+ category collection collection_rule line_item option_type option_value media stock_level stock_movement
29
+ stock_transfer stock_transfer_item supplier purchase_order purchase_order_item stock_receipt
30
+ stock_receipt_item fulfillment fulfillment_item delivery shipping_label gift_card gift_card_batch payment
31
+ refund return_reason claim_reason refund_reason order_cancellation_reason return return_line_item
32
+ exchange exchange_line_item claim claim_line_item package_type policy tax_category tax_rate
33
+ tax_identifier company company_membership company_invitation catalog catalog_price catalog_price_tier
34
+ catalog_product price_list_product catalog_assignment catalog_quantity_rule catalog_product_term
35
+ catalog_order_minimum tax_exemption_certificate admin_user actor seller_team_member product_submission
36
+ seller seller_requirement seller_requirement_submission seller_requirement_status commission_rate
37
+ commission_rule commission_line seller_transfer seller_payout seller_balance payment_split address
38
+ channel order_routing_rule product_publication market delivery_method delivery_method_service
39
+ stock_location stock_reservation delivery_rate freight_summary freight_summary_line payment_method
40
+ credit_card store_credit store_credit_event customer_group payment_source digital_asset digital_link
41
+ store setup_task api_key allowed_origin webhook_endpoint webhook_event webhook_delivery invitation
42
+ invitation_acceptance_link role permission export saved_report import import_row import_mapping promotion
43
+ promotion_action promotion_rule coupon_code price_adjustment_tier price_list price_rule
44
+ resource_translations email_template email_template_draft email_template_revision email_template_preview
45
+ email_template_sample_record].freeze
46
+
47
+ SELLER_SERIALIZERS =
48
+ %i[profile policy team_member account invitation invitation_acceptance_link product product_type
49
+ delivery_profile delivery_method delivery_method_rule delivery_zone variant media stock_level order
50
+ order_line_item fulfillment fulfillment_item delivery delivery_rate shipping_label return
51
+ return_line_item exchange exchange_line_item claim claim_line_item reason package_type stock_location
52
+ requirement_custom_field tax_identifier requirement_status import import_row import_mapping
53
+ requirement_submission export transfer payout balance payment_split].freeze
54
+
6
55
  INJECTION_POINTS_WITH_DEFAULTS = {
7
- # v3 serializers (API v3)
8
- credit_card_serializer: 'Spree::Api::V3::CreditCardSerializer',
9
- price_serializer: 'Spree::Api::V3::PriceSerializer',
10
- price_history_serializer: 'Spree::Api::V3::PriceHistorySerializer',
11
- product_serializer: 'Spree::Api::V3::ProductSerializer',
12
- product_type_serializer: 'Spree::Api::V3::ProductTypeSerializer',
13
- variant_serializer: 'Spree::Api::V3::VariantSerializer',
14
- media_serializer: 'Spree::Api::V3::MediaSerializer',
15
- option_type_serializer: 'Spree::Api::V3::OptionTypeSerializer',
16
- option_value_serializer: 'Spree::Api::V3::OptionValueSerializer',
17
- cart_serializer: 'Spree::Api::V3::CartSerializer',
18
- order_serializer: 'Spree::Api::V3::OrderSerializer',
19
- order_group_serializer: 'Spree::Api::V3::OrderGroupSerializer',
20
- line_item_serializer: 'Spree::Api::V3::LineItemSerializer',
21
- payment_serializer: 'Spree::Api::V3::PaymentSerializer',
22
- payment_session_serializer: 'Spree::Api::V3::PaymentSessionSerializer',
23
- payment_setup_session_serializer: 'Spree::Api::V3::PaymentSetupSessionSerializer',
24
- payment_source_serializer: 'Spree::Api::V3::PaymentSourceSerializer',
25
- store_credit_serializer: 'Spree::Api::V3::StoreCreditSerializer',
56
+ **STORE_SERIALIZERS.to_h { |name| [:"#{name}_serializer", "Spree::Api::V3::#{name.to_s.camelize}Serializer"] },
57
+ **ADMIN_SERIALIZERS.to_h { |name| [:"admin_#{name}_serializer", "Spree::Api::V3::Admin::#{name.to_s.camelize}Serializer"] },
58
+ **SELLER_SERIALIZERS.to_h { |name| [:"seller_#{name}_serializer", "Spree::Api::V3::Seller::#{name.to_s.camelize}Serializer"] },
26
59
  shipment_serializer: 'Spree::Api::V3::FulfillmentSerializer',
27
- fulfillment_serializer: 'Spree::Api::V3::FulfillmentSerializer',
28
- delivery_serializer: 'Spree::Api::V3::DeliverySerializer',
29
- address_serializer: 'Spree::Api::V3::AddressSerializer',
30
- customer_serializer: 'Spree::Api::V3::CustomerSerializer',
31
- data_request_serializer: 'Spree::Api::V3::DataRequestSerializer',
32
- customer_group_serializer: 'Spree::Api::V3::CustomerGroupSerializer',
33
- country_serializer: 'Spree::Api::V3::CountrySerializer',
34
- channel_serializer: 'Spree::Api::V3::ChannelSerializer',
35
- product_publication_serializer: 'Spree::Api::V3::ProductPublicationSerializer',
36
- market_serializer: 'Spree::Api::V3::MarketSerializer',
37
- state_serializer: 'Spree::Api::V3::StateSerializer',
38
- wishlist_serializer: 'Spree::Api::V3::WishlistSerializer',
39
- wishlist_item_serializer: 'Spree::Api::V3::WishlistItemSerializer',
40
60
  wished_item_serializer: 'Spree::Api::V3::WishlistItemSerializer',
41
- payment_method_serializer: 'Spree::Api::V3::PaymentMethodSerializer',
42
61
  shipping_method_serializer: 'Spree::Api::V3::DeliveryMethodSerializer',
43
62
  shipping_rate_serializer: 'Spree::Api::V3::DeliveryRateSerializer',
44
- delivery_method_serializer: 'Spree::Api::V3::DeliveryMethodSerializer',
45
- delivery_rate_serializer: 'Spree::Api::V3::DeliveryRateSerializer',
46
- freight_summary_serializer: 'Spree::Api::V3::FreightSummarySerializer',
47
- stock_location_serializer: 'Spree::Api::V3::StockLocationSerializer',
48
- category_serializer: 'Spree::Api::V3::CategorySerializer',
49
- collection_serializer: 'Spree::Api::V3::CollectionSerializer',
50
- applied_promotion_serializer: 'Spree::Api::V3::AppliedPromotionSerializer',
51
- discount_serializer: 'Spree::Api::V3::DiscountSerializer',
52
- tax_line_serializer: 'Spree::Api::V3::TaxLineSerializer',
53
- delivery_zone_serializer: 'Spree::Api::V3::DeliveryZoneSerializer',
54
- delivery_zone_member_serializer: 'Spree::Api::V3::DeliveryZoneMemberSerializer',
55
- fee_serializer: 'Spree::Api::V3::FeeSerializer',
56
- digital_link_serializer: 'Spree::Api::V3::DigitalLinkSerializer',
57
- gift_card_serializer: 'Spree::Api::V3::GiftCardSerializer',
58
- currency_serializer: 'Spree::Api::V3::CurrencySerializer',
59
- locale_serializer: 'Spree::Api::V3::LocaleSerializer',
60
- policy_serializer: 'Spree::Api::V3::PolicySerializer',
61
- custom_field_serializer: 'Spree::Api::V3::CustomFieldSerializer',
62
- tax_category_serializer: 'Spree::Api::V3::TaxCategorySerializer',
63
- tax_identifier_serializer: 'Spree::Api::V3::TaxIdentifierSerializer',
64
- product_filters_serializer: 'Spree::Api::V3::ProductFiltersSerializer',
65
- product_filter_price_range_serializer: 'Spree::Api::V3::ProductFilterPriceRangeSerializer',
66
- product_filter_availability_serializer: 'Spree::Api::V3::ProductFilterAvailabilitySerializer',
67
- product_filter_availability_option_serializer: 'Spree::Api::V3::ProductFilterAvailabilityOptionSerializer',
68
- product_filter_option_serializer: 'Spree::Api::V3::ProductFilterOptionSerializer',
69
- product_filter_option_value_serializer: 'Spree::Api::V3::ProductFilterOptionValueSerializer',
70
- product_filter_category_serializer: 'Spree::Api::V3::ProductFilterCategorySerializer',
71
- product_filter_category_option_serializer: 'Spree::Api::V3::ProductFilterCategoryOptionSerializer',
72
- product_filter_sort_option_serializer: 'Spree::Api::V3::ProductFilterSortOptionSerializer',
73
-
74
- # v3 event serializers (for models without Store API endpoints yet)
75
- media_event_serializer: 'Spree::Api::V3::MediaEventSerializer',
76
- return_serializer: 'Spree::Api::V3::ReturnSerializer',
77
- return_line_item_serializer: 'Spree::Api::V3::ReturnLineItemSerializer',
78
- exchange_serializer: 'Spree::Api::V3::ExchangeSerializer',
79
- exchange_line_item_serializer: 'Spree::Api::V3::ExchangeLineItemSerializer',
80
- claim_serializer: 'Spree::Api::V3::ClaimSerializer',
81
- claim_line_item_serializer: 'Spree::Api::V3::ClaimLineItemSerializer',
82
- return_reason_serializer: 'Spree::Api::V3::ReturnReasonSerializer',
83
- claim_reason_serializer: 'Spree::Api::V3::ClaimReasonSerializer',
84
- digital_asset_serializer: 'Spree::Api::V3::DigitalAssetSerializer',
85
- export_serializer: 'Spree::Api::V3::ExportSerializer',
86
- gift_card_batch_serializer: 'Spree::Api::V3::GiftCardBatchSerializer',
87
- import_serializer: 'Spree::Api::V3::ImportSerializer',
88
- import_row_serializer: 'Spree::Api::V3::ImportRowSerializer',
89
- invitation_serializer: 'Spree::Api::V3::InvitationSerializer',
90
- newsletter_subscriber_serializer: 'Spree::Api::V3::NewsletterSubscriberSerializer',
91
- promotion_serializer: 'Spree::Api::V3::PromotionSerializer',
92
- refund_serializer: 'Spree::Api::V3::RefundSerializer',
93
- stock_level_serializer: 'Spree::Api::V3::StockLevelSerializer',
94
- stock_movement_serializer: 'Spree::Api::V3::StockMovementSerializer',
95
- stock_reservation_serializer: 'Spree::Api::V3::StockReservationSerializer',
96
- stock_transfer_serializer: 'Spree::Api::V3::StockTransferSerializer',
97
-
98
- # v3 admin serializers (API v3 Admin)
99
- admin_country_serializer: 'Spree::Api::V3::Admin::CountrySerializer',
100
- admin_state_serializer: 'Spree::Api::V3::Admin::StateSerializer',
101
- admin_applied_promotion_serializer: 'Spree::Api::V3::Admin::AppliedPromotionSerializer',
102
- admin_discount_serializer: 'Spree::Api::V3::Admin::DiscountSerializer',
103
- admin_tax_line_serializer: 'Spree::Api::V3::Admin::TaxLineSerializer',
104
- admin_cart_serializer: 'Spree::Api::V3::Admin::CartSerializer',
105
- admin_delivery_zone_serializer: 'Spree::Api::V3::Admin::DeliveryZoneSerializer',
106
- admin_delivery_profile_serializer: 'Spree::Api::V3::Admin::DeliveryProfileSerializer',
107
- admin_delivery_origin_group_serializer: 'Spree::Api::V3::Admin::DeliveryOriginGroupSerializer',
108
- admin_integration_serializer: 'Spree::Api::V3::Admin::IntegrationSerializer',
109
- admin_delivery_method_rule_serializer: 'Spree::Api::V3::Admin::DeliveryMethodRuleSerializer',
110
- admin_delivery_zone_member_serializer: 'Spree::Api::V3::Admin::DeliveryZoneMemberSerializer',
111
- admin_fee_serializer: 'Spree::Api::V3::Admin::FeeSerializer',
112
- admin_consent_record_serializer: 'Spree::Api::V3::Admin::ConsentRecordSerializer',
113
- admin_customer_serializer: 'Spree::Api::V3::Admin::CustomerSerializer',
114
- admin_data_request_serializer: 'Spree::Api::V3::Admin::DataRequestSerializer',
115
- admin_newsletter_subscriber_serializer: 'Spree::Api::V3::Admin::NewsletterSubscriberSerializer',
116
- admin_order_serializer: 'Spree::Api::V3::Admin::OrderSerializer',
117
- admin_order_group_serializer: 'Spree::Api::V3::Admin::OrderGroupSerializer',
118
- admin_product_serializer: 'Spree::Api::V3::Admin::ProductSerializer',
119
- admin_product_type_serializer: 'Spree::Api::V3::Admin::ProductTypeSerializer',
120
- admin_product_type_custom_field_definition_serializer: 'Spree::Api::V3::Admin::ProductTypeCustomFieldDefinitionSerializer',
121
- admin_variant_serializer: 'Spree::Api::V3::Admin::VariantSerializer',
122
- admin_price_serializer: 'Spree::Api::V3::Admin::PriceSerializer',
123
- admin_price_history_serializer: 'Spree::Api::V3::Admin::PriceHistorySerializer',
124
- admin_custom_field_serializer: 'Spree::Api::V3::Admin::CustomFieldSerializer',
125
- admin_custom_field_definition_serializer: 'Spree::Api::V3::Admin::CustomFieldDefinitionSerializer',
126
- admin_category_serializer: 'Spree::Api::V3::Admin::CategorySerializer',
127
- admin_collection_serializer: 'Spree::Api::V3::Admin::CollectionSerializer',
128
- admin_collection_rule_serializer: 'Spree::Api::V3::Admin::CollectionRuleSerializer',
129
- admin_line_item_serializer: 'Spree::Api::V3::Admin::LineItemSerializer',
130
- admin_option_type_serializer: 'Spree::Api::V3::Admin::OptionTypeSerializer',
131
- admin_option_value_serializer: 'Spree::Api::V3::Admin::OptionValueSerializer',
132
- admin_media_serializer: 'Spree::Api::V3::Admin::MediaSerializer',
133
- admin_stock_level_serializer: 'Spree::Api::V3::Admin::StockLevelSerializer',
134
- admin_stock_movement_serializer: 'Spree::Api::V3::Admin::StockMovementSerializer',
135
- admin_stock_transfer_serializer: 'Spree::Api::V3::Admin::StockTransferSerializer',
136
- admin_stock_transfer_item_serializer: 'Spree::Api::V3::Admin::StockTransferItemSerializer',
137
- admin_supplier_serializer: 'Spree::Api::V3::Admin::SupplierSerializer',
138
- admin_purchase_order_serializer: 'Spree::Api::V3::Admin::PurchaseOrderSerializer',
139
- admin_purchase_order_item_serializer: 'Spree::Api::V3::Admin::PurchaseOrderItemSerializer',
140
- admin_stock_receipt_serializer: 'Spree::Api::V3::Admin::StockReceiptSerializer',
141
- admin_stock_receipt_item_serializer: 'Spree::Api::V3::Admin::StockReceiptItemSerializer',
142
63
  admin_shipment_serializer: 'Spree::Api::V3::Admin::FulfillmentSerializer',
143
- admin_fulfillment_serializer: 'Spree::Api::V3::Admin::FulfillmentSerializer',
144
- admin_fulfillment_item_serializer: 'Spree::Api::V3::Admin::FulfillmentItemSerializer',
145
- admin_delivery_serializer: 'Spree::Api::V3::Admin::DeliverySerializer',
146
- admin_shipping_label_serializer: 'Spree::Api::V3::Admin::ShippingLabelSerializer',
147
- admin_gift_card_serializer: 'Spree::Api::V3::Admin::GiftCardSerializer',
148
- admin_gift_card_batch_serializer: 'Spree::Api::V3::Admin::GiftCardBatchSerializer',
149
- admin_payment_serializer: 'Spree::Api::V3::Admin::PaymentSerializer',
150
- admin_refund_serializer: 'Spree::Api::V3::Admin::RefundSerializer',
151
- admin_return_reason_serializer: 'Spree::Api::V3::Admin::ReturnReasonSerializer',
152
- admin_claim_reason_serializer: 'Spree::Api::V3::Admin::ClaimReasonSerializer',
153
- admin_refund_reason_serializer: 'Spree::Api::V3::Admin::RefundReasonSerializer',
154
- admin_order_cancellation_reason_serializer: 'Spree::Api::V3::Admin::OrderCancellationReasonSerializer',
155
- admin_return_serializer: 'Spree::Api::V3::Admin::ReturnSerializer',
156
- admin_return_line_item_serializer: 'Spree::Api::V3::Admin::ReturnLineItemSerializer',
157
- admin_exchange_serializer: 'Spree::Api::V3::Admin::ExchangeSerializer',
158
- admin_exchange_line_item_serializer: 'Spree::Api::V3::Admin::ExchangeLineItemSerializer',
159
- admin_claim_serializer: 'Spree::Api::V3::Admin::ClaimSerializer',
160
- admin_claim_line_item_serializer: 'Spree::Api::V3::Admin::ClaimLineItemSerializer',
161
- admin_package_type_serializer: 'Spree::Api::V3::Admin::PackageTypeSerializer',
162
- admin_policy_serializer: 'Spree::Api::V3::Admin::PolicySerializer',
163
- admin_tax_category_serializer: 'Spree::Api::V3::Admin::TaxCategorySerializer',
164
- admin_tax_rate_serializer: 'Spree::Api::V3::Admin::TaxRateSerializer',
165
- admin_tax_identifier_serializer: 'Spree::Api::V3::Admin::TaxIdentifierSerializer',
166
-
167
- company_serializer: 'Spree::Api::V3::CompanySerializer',
168
- company_membership_serializer: 'Spree::Api::V3::CompanyMembershipSerializer',
169
- company_invitation_serializer: 'Spree::Api::V3::CompanyInvitationSerializer',
170
- admin_company_serializer: 'Spree::Api::V3::Admin::CompanySerializer',
171
- admin_company_membership_serializer: 'Spree::Api::V3::Admin::CompanyMembershipSerializer',
172
- admin_company_invitation_serializer: 'Spree::Api::V3::Admin::CompanyInvitationSerializer',
173
- admin_catalog_serializer: 'Spree::Api::V3::Admin::CatalogSerializer',
174
- admin_catalog_price_serializer: 'Spree::Api::V3::Admin::CatalogPriceSerializer',
175
- admin_catalog_price_tier_serializer: 'Spree::Api::V3::Admin::CatalogPriceTierSerializer',
176
- admin_catalog_product_serializer: 'Spree::Api::V3::Admin::CatalogProductSerializer',
177
- admin_price_list_product_serializer: 'Spree::Api::V3::Admin::PriceListProductSerializer',
178
- admin_catalog_assignment_serializer: 'Spree::Api::V3::Admin::CatalogAssignmentSerializer',
179
- admin_catalog_quantity_rule_serializer: 'Spree::Api::V3::Admin::CatalogQuantityRuleSerializer',
180
- admin_catalog_product_term_serializer: 'Spree::Api::V3::Admin::CatalogProductTermSerializer',
181
- admin_catalog_order_minimum_serializer: 'Spree::Api::V3::Admin::CatalogOrderMinimumSerializer',
182
- admin_tax_exemption_certificate_serializer: 'Spree::Api::V3::Admin::TaxExemptionCertificateSerializer',
183
- admin_admin_user_serializer: 'Spree::Api::V3::Admin::AdminUserSerializer',
184
- admin_actor_serializer: 'Spree::Api::V3::Admin::ActorSerializer',
185
- admin_seller_team_member_serializer: 'Spree::Api::V3::Admin::SellerTeamMemberSerializer',
186
- seller_serializer: 'Spree::Api::V3::SellerSerializer',
187
- seller_profile_serializer: 'Spree::Api::V3::Seller::ProfileSerializer',
188
- seller_policy_serializer: 'Spree::Api::V3::Seller::PolicySerializer',
189
- seller_team_member_serializer: 'Spree::Api::V3::Seller::TeamMemberSerializer',
190
- seller_account_serializer: 'Spree::Api::V3::Seller::AccountSerializer',
191
- seller_invitation_serializer: 'Spree::Api::V3::Seller::InvitationSerializer',
192
- seller_invitation_acceptance_link_serializer: 'Spree::Api::V3::Seller::InvitationAcceptanceLinkSerializer',
193
- seller_product_serializer: 'Spree::Api::V3::Seller::ProductSerializer',
194
- seller_product_type_serializer: 'Spree::Api::V3::Seller::ProductTypeSerializer',
195
- seller_delivery_profile_serializer: 'Spree::Api::V3::Seller::DeliveryProfileSerializer',
196
- seller_delivery_method_serializer: 'Spree::Api::V3::Seller::DeliveryMethodSerializer',
197
- seller_delivery_method_rule_serializer: 'Spree::Api::V3::Seller::DeliveryMethodRuleSerializer',
198
- seller_delivery_zone_serializer: 'Spree::Api::V3::Seller::DeliveryZoneSerializer',
199
- seller_variant_serializer: 'Spree::Api::V3::Seller::VariantSerializer',
200
- seller_media_serializer: 'Spree::Api::V3::Seller::MediaSerializer',
201
- seller_stock_level_serializer: 'Spree::Api::V3::Seller::StockLevelSerializer',
202
- seller_order_serializer: 'Spree::Api::V3::Seller::OrderSerializer',
203
- seller_order_line_item_serializer: 'Spree::Api::V3::Seller::OrderLineItemSerializer',
204
- seller_fulfillment_serializer: 'Spree::Api::V3::Seller::FulfillmentSerializer',
205
- seller_fulfillment_item_serializer: 'Spree::Api::V3::Seller::FulfillmentItemSerializer',
206
- seller_delivery_serializer: 'Spree::Api::V3::Seller::DeliverySerializer',
207
- seller_delivery_rate_serializer: 'Spree::Api::V3::Seller::DeliveryRateSerializer',
208
- seller_shipping_label_serializer: 'Spree::Api::V3::Seller::ShippingLabelSerializer',
209
- seller_return_serializer: 'Spree::Api::V3::Seller::ReturnSerializer',
210
- seller_return_line_item_serializer: 'Spree::Api::V3::Seller::ReturnLineItemSerializer',
211
- seller_exchange_serializer: 'Spree::Api::V3::Seller::ExchangeSerializer',
212
- seller_exchange_line_item_serializer: 'Spree::Api::V3::Seller::ExchangeLineItemSerializer',
213
- seller_claim_serializer: 'Spree::Api::V3::Seller::ClaimSerializer',
214
- seller_claim_line_item_serializer: 'Spree::Api::V3::Seller::ClaimLineItemSerializer',
215
- seller_reason_serializer: 'Spree::Api::V3::Seller::ReasonSerializer',
216
- seller_package_type_serializer: 'Spree::Api::V3::Seller::PackageTypeSerializer',
217
- seller_stock_location_serializer: 'Spree::Api::V3::Seller::StockLocationSerializer',
218
- seller_requirement_custom_field_serializer: 'Spree::Api::V3::Seller::RequirementCustomFieldSerializer',
219
- seller_tax_identifier_serializer: 'Spree::Api::V3::Seller::TaxIdentifierSerializer',
220
- seller_requirement_status_serializer: 'Spree::Api::V3::Seller::RequirementStatusSerializer',
221
- seller_import_serializer: 'Spree::Api::V3::Seller::ImportSerializer',
222
- seller_import_row_serializer: 'Spree::Api::V3::Seller::ImportRowSerializer',
223
- seller_import_mapping_serializer: 'Spree::Api::V3::Seller::ImportMappingSerializer',
224
64
  product_submission_serializer: 'Spree::Api::V3::Seller::ProductSubmissionSerializer',
225
- admin_product_submission_serializer: 'Spree::Api::V3::Admin::ProductSubmissionSerializer',
226
- seller_requirement_submission_serializer: 'Spree::Api::V3::Seller::RequirementSubmissionSerializer',
227
- seller_export_serializer: 'Spree::Api::V3::Seller::ExportSerializer',
228
- admin_seller_serializer: 'Spree::Api::V3::Admin::SellerSerializer',
229
- admin_seller_requirement_serializer: 'Spree::Api::V3::Admin::SellerRequirementSerializer',
230
- admin_seller_requirement_submission_serializer: 'Spree::Api::V3::Admin::SellerRequirementSubmissionSerializer',
231
- admin_seller_requirement_status_serializer: 'Spree::Api::V3::Admin::SellerRequirementStatusSerializer',
232
- admin_commission_rate_serializer: 'Spree::Api::V3::Admin::CommissionRateSerializer',
233
- admin_commission_rule_serializer: 'Spree::Api::V3::Admin::CommissionRuleSerializer',
234
- admin_commission_line_serializer: 'Spree::Api::V3::Admin::CommissionLineSerializer',
235
- admin_seller_transfer_serializer: 'Spree::Api::V3::Admin::SellerTransferSerializer',
236
- admin_seller_payout_serializer: 'Spree::Api::V3::Admin::SellerPayoutSerializer',
237
- admin_seller_balance_serializer: 'Spree::Api::V3::Admin::SellerBalanceSerializer',
238
- admin_payment_split_serializer: 'Spree::Api::V3::Admin::PaymentSplitSerializer',
239
- seller_transfer_serializer: 'Spree::Api::V3::Seller::TransferSerializer',
240
- seller_payout_serializer: 'Spree::Api::V3::Seller::PayoutSerializer',
241
- seller_balance_serializer: 'Spree::Api::V3::Seller::BalanceSerializer',
242
- seller_payment_split_serializer: 'Spree::Api::V3::Seller::PaymentSplitSerializer',
243
- admin_address_serializer: 'Spree::Api::V3::Admin::AddressSerializer',
244
- admin_channel_serializer: 'Spree::Api::V3::Admin::ChannelSerializer',
245
- admin_order_routing_rule_serializer: 'Spree::Api::V3::Admin::OrderRoutingRuleSerializer',
246
- admin_product_publication_serializer: 'Spree::Api::V3::Admin::ProductPublicationSerializer',
247
- admin_market_serializer: 'Spree::Api::V3::Admin::MarketSerializer',
248
65
  admin_shipping_method_serializer: 'Spree::Api::V3::Admin::DeliveryMethodSerializer',
249
- admin_delivery_method_serializer: 'Spree::Api::V3::Admin::DeliveryMethodSerializer',
250
- admin_delivery_method_service_serializer: 'Spree::Api::V3::Admin::DeliveryMethodServiceSerializer',
251
- admin_stock_location_serializer: 'Spree::Api::V3::Admin::StockLocationSerializer',
252
- admin_stock_reservation_serializer: 'Spree::Api::V3::Admin::StockReservationSerializer',
253
- admin_shipping_rate_serializer: 'Spree::Api::V3::Admin::DeliveryRateSerializer',
254
- admin_delivery_rate_serializer: 'Spree::Api::V3::Admin::DeliveryRateSerializer',
255
- admin_freight_summary_serializer: 'Spree::Api::V3::Admin::FreightSummarySerializer',
256
- admin_freight_summary_line_serializer: 'Spree::Api::V3::Admin::FreightSummaryLineSerializer',
257
- admin_payment_method_serializer: 'Spree::Api::V3::Admin::PaymentMethodSerializer',
258
- admin_credit_card_serializer: 'Spree::Api::V3::Admin::CreditCardSerializer',
259
- admin_store_credit_serializer: 'Spree::Api::V3::Admin::StoreCreditSerializer',
260
- admin_store_credit_event_serializer: 'Spree::Api::V3::Admin::StoreCreditEventSerializer',
261
- admin_customer_group_serializer: 'Spree::Api::V3::Admin::CustomerGroupSerializer',
262
- admin_payment_source_serializer: 'Spree::Api::V3::Admin::PaymentSourceSerializer',
263
- admin_digital_asset_serializer: 'Spree::Api::V3::Admin::DigitalAssetSerializer',
264
- admin_digital_link_serializer: 'Spree::Api::V3::Admin::DigitalLinkSerializer',
265
- admin_store_serializer: 'Spree::Api::V3::Admin::StoreSerializer',
266
- admin_setup_task_serializer: 'Spree::Api::V3::Admin::SetupTaskSerializer',
267
- admin_api_key_serializer: 'Spree::Api::V3::Admin::ApiKeySerializer',
268
- admin_allowed_origin_serializer: 'Spree::Api::V3::Admin::AllowedOriginSerializer',
269
- admin_webhook_endpoint_serializer: 'Spree::Api::V3::Admin::WebhookEndpointSerializer',
270
- admin_webhook_delivery_serializer: 'Spree::Api::V3::Admin::WebhookDeliverySerializer',
271
- admin_invitation_serializer: 'Spree::Api::V3::Admin::InvitationSerializer',
272
- admin_invitation_acceptance_link_serializer: 'Spree::Api::V3::Admin::InvitationAcceptanceLinkSerializer',
273
- admin_role_serializer: 'Spree::Api::V3::Admin::RoleSerializer',
274
- admin_permission_serializer: 'Spree::Api::V3::Admin::PermissionSerializer',
275
- admin_export_serializer: 'Spree::Api::V3::Admin::ExportSerializer',
276
- admin_saved_report_serializer: 'Spree::Api::V3::Admin::SavedReportSerializer',
277
- admin_import_serializer: 'Spree::Api::V3::Admin::ImportSerializer',
278
- admin_import_row_serializer: 'Spree::Api::V3::Admin::ImportRowSerializer',
279
- admin_import_mapping_serializer: 'Spree::Api::V3::Admin::ImportMappingSerializer',
280
- admin_promotion_serializer: 'Spree::Api::V3::Admin::PromotionSerializer',
281
- admin_promotion_action_serializer: 'Spree::Api::V3::Admin::PromotionActionSerializer',
282
- admin_promotion_rule_serializer: 'Spree::Api::V3::Admin::PromotionRuleSerializer',
283
- admin_coupon_code_serializer: 'Spree::Api::V3::Admin::CouponCodeSerializer',
284
- admin_price_adjustment_tier_serializer: 'Spree::Api::V3::Admin::PriceAdjustmentTierSerializer',
285
- admin_price_list_serializer: 'Spree::Api::V3::Admin::PriceListSerializer',
286
- admin_price_rule_serializer: 'Spree::Api::V3::Admin::PriceRuleSerializer',
287
- admin_resource_translations_serializer: 'Spree::Api::V3::Admin::ResourceTranslationsSerializer',
66
+ admin_shipping_rate_serializer: 'Spree::Api::V3::Admin::DeliveryRateSerializer'
288
67
  }
289
68
 
290
69
  include Spree::DependenciesHelper
@@ -92,7 +92,7 @@ module Spree
92
92
  properties: {
93
93
  allow: { type: :boolean, description: 'true for `can`, false for `cannot`' },
94
94
  actions: { type: :array, items: { type: :string }, description: 'Action names, e.g. ["read", "update"] or ["manage"]' },
95
- subjects: { type: :array, items: { type: :string }, description: 'Subject class names, e.g. ["Spree::Product"] or ["all"]' },
95
+ subjects: { type: :array, items: { type: :string }, description: 'Subject short names, e.g. ["product"] or ["all"]' },
96
96
  has_conditions: { type: :boolean, description: 'True if the server-side rule has per-record conditions. The SPA shows the action optimistically and handles 403 from the API.' }
97
97
  },
98
98
  required: %w[allow actions subjects has_conditions]
@@ -0,0 +1,35 @@
1
+ module Spree
2
+ module Api
3
+ # Generates every SDK's TypeScript types from the serializers, the email
4
+ # template types included. Runs inside spree_emails' test app, the one
5
+ # place where the API's and the email serializers are all loaded: running
6
+ # it with any serializer missing would delete that serializer's types.
7
+ module TypelizerGeneration
8
+ # @param serializer_dirs [Array<String, Pathname>] directories to load before generating
9
+ def self.call(serializer_dirs)
10
+ serializer_dirs.each { |dir| Rails.autoloaders.main.eager_load_dir(dir.to_s) }
11
+
12
+ require 'typelizer/generator'
13
+ Typelizer::Generator.call(force: true)
14
+
15
+ # `interface` rather than `type`, so SDK consumers can extend generated
16
+ # types through declaration merging.
17
+ api_root = Spree::Api::Engine.root
18
+ [api_root.join('../../packages/sdk/src/types/generated'), api_root.join('../../packages/admin-sdk/src/types/generated'),
19
+ api_root.join('../../packages/admin-sdk/src/types/generated/emails')].each do |dir|
20
+ Dir[File.join(dir, '*.ts')].each do |file|
21
+ next if File.basename(file) == 'index.ts'
22
+
23
+ content = File.read(file)
24
+ updated = content.gsub(/^type (\w+) = \{/, 'interface \1 {')
25
+ File.write(file, updated) if updated != content
26
+ end
27
+ end
28
+
29
+ # The typed webhook events in @spree/sdk, from the event catalog.
30
+ require Spree::Api::Engine.root.join('lib/spree/api/webhook_event_types').to_s
31
+ Spree::Api::WebhookEventTypes.new.write!(api_root.join('../..'))
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,140 @@
1
+ module Spree
2
+ module Api
3
+ # Renders the event catalog ({Spree::Events.catalog}) into the typed event
4
+ # map `@spree/sdk/webhooks` exports and the matching Zod schema map, so a
5
+ # webhook consumer's `event.name` check narrows `event.data` to the record
6
+ # the event carries.
7
+ #
8
+ # Run by `rake typelizer:generate`; `webhook_event_types_spec.rb` fails when
9
+ # the committed files no longer match the catalog.
10
+ class WebhookEventTypes
11
+ # The payload of an event whose record has no Store serializer.
12
+ RECORD_REFERENCE = 'WebhookRecordReference'.freeze
13
+ BACK_OFFICE_SERIALIZER = /\ASpree::Api::V3::\w+::/
14
+ HEADER = "// This file is auto-generated from Spree's event catalog by `rake typelizer:generate`. Do not edit directly.\n".freeze
15
+
16
+ FILES = {
17
+ types: 'packages/sdk/src/webhooks/generated/events.ts',
18
+ schemas: 'packages/sdk/src/webhooks/generated/schemas.ts'
19
+ }.freeze
20
+
21
+ # @param catalog [Spree::Events::Catalog]
22
+ def initialize(catalog = Spree::Events.catalog)
23
+ @catalog = catalog
24
+ end
25
+
26
+ # @return [Hash{Symbol => String}] file contents keyed like {FILES}
27
+ def render
28
+ { types: types_source, schemas: schemas_source }
29
+ end
30
+
31
+ # Writes both files under the monorepo root.
32
+ #
33
+ # @param root [Pathname]
34
+ # @return [void]
35
+ def write!(root)
36
+ render.each do |key, source|
37
+ path = root.join(FILES.fetch(key))
38
+ FileUtils.mkdir_p(path.dirname)
39
+ File.write(path, source)
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ attr_reader :catalog
46
+
47
+ def entries
48
+ @entries ||= catalog.webhook_events
49
+ end
50
+
51
+ def payload_type_names
52
+ @payload_type_names ||= type_names.values.uniq.sort - [RECORD_REFERENCE]
53
+ end
54
+
55
+ def type_name(entry)
56
+ type_names.fetch(entry.name)
57
+ end
58
+
59
+ def type_names
60
+ @type_names ||= entries.to_h { |entry| [entry.name, resolve_type_name(entry)] }
61
+ end
62
+
63
+ # Named the way the Store SDK's type writer names it. A back-office shape
64
+ # stays behind the Admin API even when a Store-level class inherits it
65
+ # (docs/plans/6.0-typed-webhook-events.md).
66
+ def resolve_type_name(entry)
67
+ serializer = entry.payload_serializer
68
+ return RECORD_REFERENCE unless serializer
69
+
70
+ back_office = serializer.ancestors.grep(Class).any? { |ancestor| ancestor.name.to_s.match?(BACK_OFFICE_SERIALIZER) }
71
+ if back_office || store_writer.reject_class.call(serializer: serializer)
72
+ raise ArgumentError, "#{entry.name} is built by #{serializer.name}, which is not a Store API serializer"
73
+ end
74
+
75
+ store_writer.serializer_name_mapper.call(serializer)
76
+ end
77
+
78
+ def store_writer
79
+ Typelizer.configuration.writers.fetch(:store)
80
+ end
81
+
82
+ def types_source
83
+ <<~TS
84
+ #{HEADER}import type {
85
+ #{payload_type_names.map { |name| " #{name}," }.join("\n")}
86
+ } from '../../types/generated'
87
+
88
+ /** The payload of an event whose record has no Store API representation. */
89
+ export interface #{RECORD_REFERENCE} {
90
+ id: string
91
+ created_at: string | null
92
+ updated_at: string | null
93
+ }
94
+
95
+ /**
96
+ * Every webhook event Spree publishes, mapped to the record its `data`
97
+ * carries. An interface, so an extension adds its own events by
98
+ * declaration merging.
99
+ */
100
+ export interface WebhookEventMap {
101
+ #{entries.map { |entry| map_line(entry) }.join("\n")}
102
+ }
103
+ TS
104
+ end
105
+
106
+ def map_line(entry)
107
+ notes = []
108
+ notes << "@deprecated Use `#{entry.deprecated_alias_of}` instead." if entry.deprecated?
109
+ notes << 'Carries a live credential: delivered only to endpoints that name this event.' if entry.credential?
110
+ comment = notes.map { |note| " /** #{note} */\n" }.join
111
+ "#{comment} '#{entry.name}': #{type_name(entry)}"
112
+ end
113
+
114
+ def schemas_source
115
+ schema_names = payload_type_names.map { |name| "#{name}Schema" }
116
+
117
+ <<~TS
118
+ #{HEADER}import { z } from 'zod'
119
+ import {
120
+ #{schema_names.map { |name| " #{name}," }.join("\n")}
121
+ } from '../../zod/generated'
122
+
123
+ export const #{RECORD_REFERENCE}Schema = z.object({
124
+ id: z.string(),
125
+ created_at: z.string().nullable(),
126
+ updated_at: z.string().nullable(),
127
+ })
128
+
129
+ type WebhookEventName =
130
+ #{entries.map { |entry| " | '#{entry.name}'" }.join("\n")}
131
+
132
+ /** The Zod schema for each webhook event's `data`, for `constructWebhookEvent`'s `schemas` option. */
133
+ export const webhookEventSchemas: Readonly<Record<WebhookEventName, z.ZodType>> = {
134
+ #{entries.map { |entry| " '#{entry.name}': #{type_name(entry)}Schema," }.join("\n")}
135
+ }
136
+ TS
137
+ end
138
+ end
139
+ end
140
+ end
data/lib/spree/api.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  require 'spree/core'
2
2
  require 'pagy'
3
- require 'alba'
4
- require 'oj'
5
3
  require 'typelizer'
6
4
  require 'typelizer/proc_resource_resolution'
7
5
  require 'typelizer/open_enums'