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
@@ -41,12 +41,18 @@ module Spree
41
41
  end
42
42
 
43
43
  # Renders a 401 with the shared +authentication_required+ error code.
44
- # @param message_key [String] i18n key for the error message
45
- # @param default_message [String] fallback when the key is missing
46
- def render_authentication_required(message_key, default_message)
44
+ # @param message [String] translated error message
45
+ # @param legacy_default [String, nil] deprecated: the two-argument form
46
+ # (key under +spree.+, fallback text) is removed in Spree 6.1
47
+ def render_authentication_required(message, legacy_default = nil)
48
+ unless legacy_default.nil?
49
+ Spree::Deprecation.warn('render_authentication_required(key, default) is deprecated and will be removed in Spree 6.1. Pass the translated message instead.')
50
+ message = I18n.t("spree.#{message}", default: legacy_default)
51
+ end
52
+
47
53
  render_error(
48
54
  code: ErrorHandler::ERROR_CODES[:authentication_required],
49
- message: Spree.t(message_key, default: default_message),
55
+ message: message,
50
56
  status: :unauthorized
51
57
  )
52
58
  end
@@ -57,7 +63,7 @@ module Spree
57
63
  return if try_spree_current_user.present?
58
64
  return unless current_channel&.storefront_login_required?
59
65
 
60
- render_authentication_required('api.errors.storefront_login_required', 'Authentication required to access this store')
66
+ render_authentication_required(I18n.t('spree.api.errors.storefront_login_required'))
61
67
  end
62
68
  end
63
69
  end
@@ -14,11 +14,6 @@ module Spree
14
14
  # grantable separately from store configuration (6.0-admin-rbac.md).
15
15
  scoped_resource :staff
16
16
 
17
- # POST is not exposed — staff are created via invitations.
18
- def create
19
- head :method_not_allowed
20
- end
21
-
22
17
  # DELETE /api/v3/admin/admin_users/:id
23
18
  # Removes role assignments for the current store rather than deleting
24
19
  # the account globally. The user keeps access to any other stores.
@@ -64,7 +64,7 @@ module Spree
64
64
  unless current_api_key
65
65
  return render_error(
66
66
  code: ERROR_CODES[:record_not_found],
67
- message: Spree.t(:api_key_no_current_key),
67
+ message: I18n.t('spree.api_key_no_current_key'),
68
68
  status: :not_found
69
69
  )
70
70
  end
@@ -9,7 +9,6 @@ module Spree
9
9
  class OrderMinimumsController < BaseController
10
10
  before_action :authorize_parent_access!
11
11
 
12
-
13
12
  protected
14
13
 
15
14
  def model_class
@@ -24,14 +23,9 @@ module Spree
24
23
  @parent.order_minimums
25
24
  end
26
25
 
27
- def parent_association
28
- :order_minimums
29
- end
30
-
31
26
  def permitted_params
32
27
  params.permit(:currency, :amount)
33
28
  end
34
-
35
29
  end
36
30
  end
37
31
  end
@@ -52,10 +52,6 @@ module Spree
52
52
  @catalog.quantity_rules
53
53
  end
54
54
 
55
- def parent_association
56
- :quantity_rules
57
- end
58
-
59
55
  private
60
56
 
61
57
  # Products resolve through this store, so an id belonging to
@@ -22,7 +22,7 @@ module Spree
22
22
  if @resource.price_list.nil?
23
23
  return render_error(
24
24
  code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
25
- message: Spree.t('catalogs.no_price_list_to_import'),
25
+ message: I18n.t('spree.catalogs.no_price_list_to_import'),
26
26
  status: :unprocessable_content
27
27
  )
28
28
  end
@@ -60,10 +60,6 @@ module Spree
60
60
  Spree.api.admin_channel_serializer
61
61
  end
62
62
 
63
- def scope
64
- super.for_store(current_store)
65
- end
66
-
67
63
  def permitted_params
68
64
  params.permit(*model_additional_permitted_attributes, :name, :code, :active, :default, :preferred_order_routing_strategy,
69
65
  :preferred_storefront_access, :preferred_guest_checkout,
@@ -80,8 +80,7 @@ module Spree
80
80
 
81
81
  render_error(
82
82
  code: ERROR_CODES[:validation_error],
83
- message: Spree.t('api.errors.automatic_collection_curation',
84
- default: "Products of an automatic collection are managed by its rules and can't be curated manually"),
83
+ message: I18n.t('spree.api.errors.automatic_collection_curation'),
85
84
  status: :unprocessable_content
86
85
  )
87
86
  end
@@ -26,7 +26,7 @@ module Spree
26
26
  {
27
27
  type: klass.api_type,
28
28
  name: klass.human_name,
29
- description: klass.description,
29
+ description: klass.human_description,
30
30
  preference_schema: klass.serialized_preference_schema,
31
31
  # Config a rule takes beyond its preferences — a catalog-scale
32
32
  # reference list lives in its own table, not the blob, and an
@@ -139,7 +139,7 @@ module Spree
139
139
  errors = ActiveModel::Errors.new(Spree::CommissionRate.new)
140
140
  unknown.each do |type|
141
141
  errors.add(:rules, :invalid_commission_rule_type, type: type,
142
- message: Spree.t('errors.messages.invalid_commission_rule_type', type: type))
142
+ message: I18n.t('spree.errors.messages.invalid_commission_rule_type', type: type))
143
143
  end
144
144
  render_validation_error(errors)
145
145
 
@@ -53,10 +53,6 @@ module Spree
53
53
  def scope
54
54
  @parent.addresses
55
55
  end
56
-
57
- def parent_association
58
- :addresses
59
- end
60
56
  end
61
57
  end
62
58
  end
@@ -17,7 +17,7 @@ module Spree
17
17
  else
18
18
  render_error(
19
19
  code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
20
- message: Spree.t('company_invitations.not_pending'),
20
+ message: I18n.t('spree.company_invitations.not_pending'),
21
21
  status: :unprocessable_content
22
22
  )
23
23
  end
@@ -44,10 +44,6 @@ module Spree
44
44
  def scope
45
45
  action_name == 'index' ? @parent.invitations.pending : @parent.invitations
46
46
  end
47
-
48
- def parent_association
49
- :invitations
50
- end
51
47
  end
52
48
  end
53
49
  end
@@ -47,10 +47,6 @@ module Spree
47
47
  @parent.memberships
48
48
  end
49
49
 
50
- def parent_association
51
- :memberships
52
- end
53
-
54
50
  def collection_includes
55
51
  [:customer]
56
52
  end
@@ -24,11 +24,7 @@ module Spree
24
24
  verified_by: try_spree_current_user
25
25
  )
26
26
 
27
- if result.success?
28
- render json: serialize_resource(result.value)
29
- else
30
- render_result_error(result)
31
- end
27
+ render_result(result)
32
28
  end
33
29
 
34
30
  # PATCH .../:id/revoke — withdrawing evidence that was accepted.
@@ -88,10 +84,6 @@ module Spree
88
84
  @parent.tax_exemption_certificates
89
85
  end
90
86
 
91
- def parent_association
92
- :tax_exemption_certificates
93
- end
94
-
95
87
  def collection_includes
96
88
  [{ document_attachment: :blob }]
97
89
  end
@@ -31,10 +31,6 @@ module Spree
31
31
  @parent.tax_identifiers
32
32
  end
33
33
 
34
- def parent_association
35
- :tax_identifiers
36
- end
37
-
38
34
  def permitted_params
39
35
  params.permit(:kind, :value)
40
36
  end
@@ -22,10 +22,6 @@ module Spree
22
22
  Spree.api.admin_company_serializer
23
23
  end
24
24
 
25
- def scope
26
- super.for_store(current_store)
27
- end
28
-
29
25
  def collection_includes
30
26
  [:children, :memberships, :external_references]
31
27
  end
@@ -11,7 +11,7 @@ module Spree
11
11
 
12
12
  # Override base index to skip pagination — there are ~250 countries
13
13
  # and address-form dropdowns need them all at once. Pagy's global
14
- # max_limit (100) prevents using the paginated path for this.
14
+ # client_limit (100) prevents using the paginated path for this.
15
15
  #
16
16
  # Countries are reference data rather than records, so this reads
17
17
  # from the registry and needs no authorization beyond the admin
@@ -22,10 +22,6 @@ module Spree
22
22
  @parent = current_store.promotions.accessible_by(current_ability, :show)
23
23
  .find_by_prefix_id!(params[:promotion_id])
24
24
  end
25
-
26
- def parent_association
27
- :coupon_codes
28
- end
29
25
  end
30
26
  end
31
27
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  module Admin
5
5
  # Schema-side metadata for custom fields. Definitions are per resource
6
6
  # *type* (every Spree::Product shares the same definitions), so this is
7
- # a flat top-level endpoint. Filter by `?resource_type=Spree::Product`
7
+ # a flat top-level endpoint. Filter by `q[resource_type_eq]=product`
8
8
  # (or any other registered custom-field-bearing resource) to scope the
9
9
  # list to one parent type.
10
10
  class CustomFieldDefinitionsController < ResourceController
@@ -39,6 +39,14 @@ module Spree
39
39
  :searchable, :sortable)
40
40
  end
41
41
 
42
+ # `resource_type` is a plain column rather than a polymorphic
43
+ # association, so its filter goes through the model's own normalizer.
44
+ def api_type_resolver(attribute)
45
+ return super unless attribute == 'resource_type'
46
+
47
+ ->(api_type) { model_class.normalize_value_for(:resource_type, api_type) }
48
+ end
49
+
42
50
  # Pure registry discovery — maps to the read scope.
43
51
  def read_actions
44
52
  super + %w[resource_types]
@@ -43,10 +43,6 @@ module Spree
43
43
  Spree.api.admin_custom_field_serializer
44
44
  end
45
45
 
46
- def parent_association
47
- :custom_fields
48
- end
49
-
50
46
  def set_parent
51
47
  # Routes always mount this controller under a recognized parent, so
52
48
  # `parent_lookup` matches in normal flows. The explicit raise is a
@@ -17,10 +17,6 @@ module Spree
17
17
  Spree.api.admin_customer_group_serializer
18
18
  end
19
19
 
20
- def scope
21
- super.for_store(current_store)
22
- end
23
-
24
20
  def permitted_params
25
21
  params.permit(*model_additional_permitted_attributes, :name, :description, customer_ids: [])
26
22
  end
@@ -50,10 +50,6 @@ module Spree
50
50
 
51
51
  protected
52
52
 
53
- def parent_association
54
- :addresses
55
- end
56
-
57
53
  def model_class
58
54
  Spree::Address
59
55
  end
@@ -6,10 +6,6 @@ module Spree
6
6
  class CreditCardsController < BaseController
7
7
  protected
8
8
 
9
- def parent_association
10
- :credit_cards
11
- end
12
-
13
9
  # Customers are global; a saved card belongs to the store-scoped
14
10
  # payment method it was created against, so the nested collection is
15
11
  # bound to the current store's payment methods.
@@ -62,10 +62,6 @@ module Spree
62
62
 
63
63
  protected
64
64
 
65
- def parent_association
66
- :store_credits
67
- end
68
-
69
65
  # Customers are global; store credits belong to a store, so the
70
66
  # nested collection is bound to the current store.
71
67
  def scope
@@ -51,7 +51,7 @@ module Spree
51
51
  rescue Spree::Core::DestroyWithOrdersError => e
52
52
  render_error(
53
53
  code: 'customer_has_orders',
54
- message: e.message.presence || Spree.t(:error_user_destroy_with_orders),
54
+ message: e.message.presence || I18n.t('spree.error_user_destroy_with_orders'),
55
55
  status: :unprocessable_content
56
56
  )
57
57
  end
@@ -108,7 +108,7 @@ module Spree
108
108
  if @resource.anonymized?
109
109
  return render_error(
110
110
  code: ERROR_CODES[:validation_error],
111
- message: Spree.t('data_request_errors.already_anonymized'),
111
+ message: I18n.t('spree.data_request_errors.already_anonymized'),
112
112
  status: :unprocessable_content
113
113
  )
114
114
  end
@@ -16,7 +16,7 @@ module Spree
16
16
  if rule_class.nil?
17
17
  return render_error(
18
18
  code: ERROR_CODES[:validation_error],
19
- message: Spree.t('errors.messages.invalid_delivery_method_rule'),
19
+ message: I18n.t('spree.errors.messages.invalid_delivery_method_rule'),
20
20
  status: :unprocessable_entity
21
21
  )
22
22
  end
@@ -31,9 +31,8 @@ module Spree
31
31
 
32
32
  data = Spree.fulfillment_providers.map do |provider_class|
33
33
  {
34
- type: provider_class.to_s,
34
+ type: provider_class.api_type,
35
35
  name: provider_class.provider_name,
36
- integration_class: provider_class.integration_class,
37
36
  integration_type: integration_api_type(provider_class),
38
37
  available: provider_class.available_for_store?(current_store),
39
38
  digital: provider_class.digital?,
@@ -61,9 +60,8 @@ module Spree
61
60
  catalog = provider_class.service_catalog(integration)
62
61
 
63
62
  {
64
- type: provider_class.to_s,
63
+ type: provider_class.api_type,
65
64
  name: provider_class.provider_name,
66
- integration_class: provider_class.integration_class,
67
65
  integration_type: integration_api_type(provider_class),
68
66
  available: provider_class.available_for_store?(current_store),
69
67
  requires_address: provider_class.requires_address?,
@@ -76,7 +74,7 @@ module Spree
76
74
  }
77
75
  end
78
76
 
79
- render json: { data: data, default: Spree::DeliveryMethod::DEFAULT_RATE_PROVIDER }
77
+ render json: { data: data, default: Spree::ApiTyped.api_type_for(Spree::DeliveryMethod::DEFAULT_RATE_PROVIDER) }
80
78
  end
81
79
 
82
80
  def create
@@ -15,12 +15,7 @@ module Spree
15
15
  def kinds
16
16
  authorize! :create, model_class
17
17
 
18
- data = Spree.delivery_profile_types.map do |profile_class|
19
- {
20
- type: profile_class.to_s,
21
- kind: profile_class.api_type
22
- }
23
- end
18
+ data = Spree.delivery_profile_types.map { |profile_class| { kind: profile_class.api_type } }
24
19
 
25
20
  render json: { data: data }
26
21
  end
@@ -0,0 +1,40 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module EmailTemplates
6
+ # The draft of an editable email template: saved in any state, while
7
+ # customers keep receiving the published version.
8
+ class DraftsController < Admin::BaseController
9
+ include Spree::Api::V3::Admin::EmailTemplateLookup
10
+
11
+ # PUT /api/v3/admin/email_templates/:email_template_id/draft
12
+ #
13
+ # Send the `lock_version` the draft was loaded with: a save made from
14
+ # an older copy is refused with 409, naming who saved last. `rebase`
15
+ # marks the draft as based on Spree's current default.
16
+ def update
17
+ authorize! :update, Spree::EmailTemplate
18
+
19
+ result = Spree.email_template_save_draft_workflow.call(
20
+ store: current_store, key: email_template.key, locale: language, actor: current_actor,
21
+ attributes: params.permit(:subject, :body, :lock_version, :rebase).to_h.symbolize_keys
22
+ )
23
+ render_email_template_result(result)
24
+ end
25
+
26
+ # DELETE /api/v3/admin/email_templates/:email_template_id/draft
27
+ def destroy
28
+ authorize! :update, Spree::EmailTemplate
29
+
30
+ result = Spree.email_template_discard_draft_workflow.call(
31
+ store: current_store, key: email_template.key, locale: language, lock_version: params[:lock_version].presence
32
+ )
33
+ render_email_template_result(result)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,30 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module EmailTemplates
6
+ class PreviewsController < Admin::BaseController
7
+ include Spree::Api::V3::Admin::EmailTemplateLookup
8
+
9
+ before_action :authorize_sample_data!
10
+
11
+ # POST /api/v3/admin/email_templates/:email_template_id/preview
12
+ #
13
+ # Renders the template with sample data built from the store's latest
14
+ # matching record, or the one `record_id` names. An unsaved `subject`
15
+ # and `body` take the place of the current version. Returns the
16
+ # rendered email and the variables it was rendered with.
17
+ def create
18
+ authorize! :update, Spree::EmailTemplate
19
+
20
+ preview = build_preview
21
+ preview.call
22
+
23
+ render json: Spree.api.admin_email_template_preview_serializer.new(preview, params: serializer_params).to_h
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module EmailTemplates
6
+ class PublicationsController < Admin::BaseController
7
+ include Spree::Api::V3::Admin::EmailTemplateLookup
8
+
9
+ before_action :authorize_sample_data!
10
+
11
+ # POST /api/v3/admin/email_templates/:email_template_id/publication
12
+ #
13
+ # Makes the draft live. A draft that does not render with sample data
14
+ # (for the layout or a partial: in any email using it) is refused with
15
+ # 422 and each problem's email and line.
16
+ def create
17
+ authorize! :update, Spree::EmailTemplate
18
+
19
+ result = Spree.email_template_publish_workflow.call(
20
+ store: current_store, key: email_template.key, locale: language, actor: current_actor,
21
+ lock_version: params[:lock_version].presence
22
+ )
23
+ render_email_template_result(result, status: :created)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,34 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module EmailTemplates
6
+ class RestorationsController < Admin::BaseController
7
+ include Spree::Api::V3::Admin::EmailTemplateLookup
8
+
9
+ # POST /api/v3/admin/email_templates/:email_template_id/revisions/:revision_id/restoration
10
+ #
11
+ # Copies the revision into the language's draft, to be published
12
+ # like any change. A language without a version of its own can
13
+ # restore one of the version for every language its customers get.
14
+ def create
15
+ authorize! :update, Spree::EmailTemplate
16
+
17
+ revision = Spree::EmailTemplateRevision.where(
18
+ email_template: current_store.email_templates.where(
19
+ key: email_template.key, locale: [language, Spree::EmailTemplate::ANY_LOCALE]
20
+ )
21
+ ).find_by_prefix_id!(params[:revision_id])
22
+
23
+ result = Spree.email_template_restore_revision_workflow.call(
24
+ revision: revision, actor: current_actor, locale: language,
25
+ draft_version: params.key?(:lock_version) ? { lock_version: params[:lock_version] } : {}
26
+ )
27
+ render_email_template_result(result, status: :created)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,35 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module EmailTemplates
6
+ # The published versions of an email template in one language, newest
7
+ # first. Reverting keeps them, so they outlive the published version.
8
+ class RevisionsController < ResourceController
9
+ include Spree::Api::V3::Admin::EmailTemplateLookup
10
+
11
+ before_action { authorize! :read, Spree::EmailTemplate }
12
+
13
+ protected
14
+
15
+ def model_class
16
+ Spree::EmailTemplateRevision
17
+ end
18
+
19
+ def serializer_class
20
+ Spree.api.admin_email_template_revision_serializer
21
+ end
22
+
23
+ def scope
24
+ email_template_revisions.order(created_at: :desc)
25
+ end
26
+
27
+ def collection_includes
28
+ [:published_by]
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module EmailTemplates
6
+ class SampleRecordsController < Admin::BaseController
7
+ include Spree::Api::V3::Admin::EmailTemplateLookup
8
+
9
+ before_action :authorize_sample_data!
10
+
11
+ # GET /api/v3/admin/email_templates/:email_template_id/sample_records
12
+ #
13
+ # The store's five latest records the template can be previewed
14
+ # with (for the layout and partials, those of the email `email_key`
15
+ # names). Empty for an email that needs no record.
16
+ def index
17
+ authorize! :update, Spree::EmailTemplate
18
+
19
+ records = build_preview.email.sample_class.new(store: current_store).recent_records
20
+ render json: { data: records.map { |record| serializer_class.new(record, params: serializer_params).to_h } }
21
+ end
22
+
23
+ private
24
+
25
+ def serializer_class
26
+ Spree.api.admin_email_template_sample_record_serializer
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end