spree_api 5.3.4 → 5.4.0.beta

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 (332) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +71 -33
  3. data/Rakefile +25 -0
  4. data/app/controllers/concerns/spree/api/v3/api_key_authentication.rb +51 -0
  5. data/app/controllers/concerns/spree/api/v3/error_handler.rb +255 -0
  6. data/app/controllers/concerns/spree/api/v3/http_caching.rb +90 -0
  7. data/app/controllers/concerns/spree/api/v3/jwt_authentication.rb +95 -0
  8. data/app/controllers/concerns/spree/api/v3/locale_and_currency.rb +73 -0
  9. data/app/controllers/concerns/spree/api/v3/order_concern.rb +51 -0
  10. data/app/controllers/concerns/spree/api/v3/resource_serializer.rb +41 -0
  11. data/app/controllers/spree/api/v3/base_controller.rb +42 -0
  12. data/app/controllers/spree/api/v3/resource_controller.rb +210 -0
  13. data/app/controllers/spree/api/v3/store/auth_controller.rb +140 -0
  14. data/app/controllers/spree/api/v3/store/base_controller.rb +12 -0
  15. data/app/controllers/spree/api/v3/store/cart_controller.rb +82 -0
  16. data/app/controllers/spree/api/v3/store/countries_controller.rb +31 -0
  17. data/app/controllers/spree/api/v3/store/currencies_controller.rb +18 -0
  18. data/app/controllers/spree/api/v3/store/customer/account_controller.rb +38 -0
  19. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +85 -0
  20. data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +31 -0
  21. data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +36 -0
  22. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +35 -0
  23. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +83 -0
  24. data/app/controllers/spree/api/v3/store/digitals_controller.rb +37 -0
  25. data/app/controllers/spree/api/v3/store/locales_controller.rb +24 -0
  26. data/app/controllers/spree/api/v3/store/orders/coupon_codes_controller.rb +68 -0
  27. data/app/controllers/spree/api/v3/store/orders/line_items_controller.rb +87 -0
  28. data/app/controllers/spree/api/v3/store/orders/payment_methods_controller.rb +43 -0
  29. data/app/controllers/spree/api/v3/store/orders/payment_sessions_controller.rb +96 -0
  30. data/app/controllers/spree/api/v3/store/orders/payments_controller.rb +45 -0
  31. data/app/controllers/spree/api/v3/store/orders/shipments_controller.rb +53 -0
  32. data/app/controllers/spree/api/v3/store/orders/store_credits_controller.rb +42 -0
  33. data/app/controllers/spree/api/v3/store/orders_controller.rb +125 -0
  34. data/app/controllers/spree/api/v3/store/products/filters_controller.rb +38 -0
  35. data/app/controllers/spree/api/v3/store/products_controller.rb +74 -0
  36. data/app/controllers/spree/api/v3/store/resource_controller.rb +12 -0
  37. data/app/controllers/spree/api/v3/store/stores_controller.rb +26 -0
  38. data/app/controllers/spree/api/v3/store/taxonomies_controller.rb +19 -0
  39. data/app/controllers/spree/api/v3/store/taxons/products_controller.rb +37 -0
  40. data/app/controllers/spree/api/v3/store/taxons_controller.rb +34 -0
  41. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +33 -0
  42. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +41 -0
  43. data/app/serializers/spree/api/v3/address_serializer.rb +22 -0
  44. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +43 -0
  45. data/app/serializers/spree/api/v3/admin/metafield_serializer.rb +15 -0
  46. data/app/serializers/spree/api/v3/admin/order_serializer.rb +39 -0
  47. data/app/serializers/spree/api/v3/admin/price_serializer.rb +21 -0
  48. data/app/serializers/spree/api/v3/admin/product_serializer.rb +47 -0
  49. data/app/serializers/spree/api/v3/admin/taxon_serializer.rb +20 -0
  50. data/app/serializers/spree/api/v3/admin/taxonomy_serializer.rb +15 -0
  51. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +44 -0
  52. data/app/serializers/spree/api/v3/asset_serializer.rb +20 -0
  53. data/app/serializers/spree/api/v3/base_serializer.rb +98 -0
  54. data/app/serializers/spree/api/v3/country_serializer.rb +35 -0
  55. data/app/serializers/spree/api/v3/credit_card_serializer.rb +12 -0
  56. data/app/serializers/spree/api/v3/currency_serializer.rb +14 -0
  57. data/app/serializers/spree/api/v3/customer_return_serializer.rb +17 -0
  58. data/app/serializers/spree/api/v3/customer_serializer.rb +19 -0
  59. data/app/serializers/spree/api/v3/digital_link_serializer.rb +30 -0
  60. data/app/serializers/spree/api/v3/digital_serializer.rb +17 -0
  61. data/app/serializers/spree/api/v3/export_serializer.rb +19 -0
  62. data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +28 -0
  63. data/app/serializers/spree/api/v3/gift_card_serializer.rb +78 -0
  64. data/app/serializers/spree/api/v3/image_serializer.rb +43 -0
  65. data/app/serializers/spree/api/v3/import_row_serializer.rb +24 -0
  66. data/app/serializers/spree/api/v3/import_serializer.rb +32 -0
  67. data/app/serializers/spree/api/v3/invitation_serializer.rb +47 -0
  68. data/app/serializers/spree/api/v3/line_item_serializer.rb +48 -0
  69. data/app/serializers/spree/api/v3/locale_serializer.rb +14 -0
  70. data/app/serializers/spree/{v2/storefront → api/v3}/metafield_serializer.rb +5 -3
  71. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +27 -0
  72. data/app/serializers/spree/api/v3/option_type_serializer.rb +11 -0
  73. data/app/serializers/spree/api/v3/option_value_serializer.rb +24 -0
  74. data/app/serializers/spree/api/v3/order_promotion_serializer.rb +16 -0
  75. data/app/serializers/spree/api/v3/order_serializer.rb +39 -0
  76. data/app/serializers/spree/api/v3/payment_method_serializer.rb +15 -0
  77. data/app/serializers/spree/api/v3/payment_serializer.rb +54 -0
  78. data/app/serializers/spree/api/v3/payment_session_serializer.rb +32 -0
  79. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +33 -0
  80. data/app/serializers/spree/api/v3/payment_source_serializer.rb +18 -0
  81. data/app/serializers/spree/api/v3/post_category_serializer.rb +13 -0
  82. data/app/serializers/spree/api/v3/post_serializer.rb +25 -0
  83. data/app/serializers/spree/api/v3/price_serializer.rb +34 -0
  84. data/app/serializers/spree/api/v3/product_serializer.rb +108 -0
  85. data/app/serializers/spree/api/v3/promotion_serializer.rb +28 -0
  86. data/app/serializers/spree/api/v3/refund_serializer.rb +31 -0
  87. data/app/serializers/spree/api/v3/reimbursement_serializer.rb +28 -0
  88. data/app/serializers/spree/api/v3/report_serializer.rb +29 -0
  89. data/app/serializers/spree/api/v3/return_authorization_serializer.rb +31 -0
  90. data/app/serializers/spree/api/v3/return_item_serializer.rb +53 -0
  91. data/app/serializers/spree/api/v3/shipment_serializer.rb +19 -0
  92. data/app/serializers/spree/api/v3/shipping_method_serializer.rb +11 -0
  93. data/app/serializers/spree/api/v3/shipping_rate_serializer.rb +26 -0
  94. data/app/serializers/spree/api/v3/state_serializer.rb +14 -0
  95. data/app/serializers/spree/api/v3/stock_item_serializer.rb +23 -0
  96. data/app/serializers/spree/api/v3/stock_location_serializer.rb +18 -0
  97. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +24 -0
  98. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +25 -0
  99. data/app/serializers/spree/api/v3/store_credit_serializer.rb +37 -0
  100. data/app/serializers/spree/api/v3/store_serializer.rb +38 -0
  101. data/app/serializers/spree/api/v3/taxon_serializer.rb +78 -0
  102. data/app/serializers/spree/api/v3/taxonomy_serializer.rb +33 -0
  103. data/app/serializers/spree/api/v3/variant_serializer.rb +86 -0
  104. data/app/serializers/spree/api/v3/wished_item_serializer.rb +22 -0
  105. data/app/serializers/spree/api/v3/wishlist_serializer.rb +25 -0
  106. data/app/services/spree/api/v3/filters_aggregator.rb +156 -0
  107. data/app/services/spree/api/v3/orders/update.rb +103 -0
  108. data/config/initializers/alba.rb +5 -0
  109. data/config/initializers/pagy.rb +10 -0
  110. data/config/initializers/typelizer.rb +25 -0
  111. data/config/locales/en.yml +1 -0
  112. data/config/routes.rb +63 -196
  113. data/lib/spree/api/dependencies.rb +68 -0
  114. data/lib/spree/api/engine.rb +0 -5
  115. data/lib/spree/api/openapi/schema_helper.rb +177 -0
  116. data/lib/spree/api/testing_support/factories.rb +1 -3
  117. data/lib/spree/api/testing_support/v3/base.rb +118 -0
  118. data/lib/spree/api.rb +7 -4
  119. metadata +131 -264
  120. data/LICENSE.md +0 -57
  121. data/app/controllers/concerns/spree/api/v2/caching.rb +0 -40
  122. data/app/controllers/concerns/spree/api/v2/coupon_codes_helper.rb +0 -29
  123. data/app/controllers/concerns/spree/api/v2/number_resource.rb +0 -11
  124. data/app/controllers/concerns/spree/api/v2/platform/nested_set_reposition_concern.rb +0 -37
  125. data/app/controllers/concerns/spree/api/v2/platform/promotion_calculator_params.rb +0 -17
  126. data/app/controllers/concerns/spree/api/v2/platform/promotion_rule_params.rb +0 -16
  127. data/app/controllers/concerns/spree/api/v2/product_list_includes.rb +0 -21
  128. data/app/controllers/concerns/spree/api/v2/storefront/metadata_controller_concern.rb +0 -18
  129. data/app/controllers/concerns/spree/api/v2/storefront/order_concern.rb +0 -49
  130. data/app/controllers/spree/api/v2/base_controller.rb +0 -233
  131. data/app/controllers/spree/api/v2/data_feeds/google_controller.rb +0 -24
  132. data/app/controllers/spree/api/v2/platform/addresses_controller.rb +0 -23
  133. data/app/controllers/spree/api/v2/platform/adjustments_controller.rb +0 -23
  134. data/app/controllers/spree/api/v2/platform/classifications_controller.rb +0 -26
  135. data/app/controllers/spree/api/v2/platform/countries_controller.rb +0 -23
  136. data/app/controllers/spree/api/v2/platform/data_feeds_controller.rb +0 -19
  137. data/app/controllers/spree/api/v2/platform/digital_links_controller.rb +0 -29
  138. data/app/controllers/spree/api/v2/platform/digitals_controller.rb +0 -23
  139. data/app/controllers/spree/api/v2/platform/gift_cards_controller.rb +0 -23
  140. data/app/controllers/spree/api/v2/platform/line_items_controller.rb +0 -63
  141. data/app/controllers/spree/api/v2/platform/option_types_controller.rb +0 -19
  142. data/app/controllers/spree/api/v2/platform/option_values_controller.rb +0 -23
  143. data/app/controllers/spree/api/v2/platform/orders_controller.rb +0 -167
  144. data/app/controllers/spree/api/v2/platform/payment_methods_controller.rb +0 -31
  145. data/app/controllers/spree/api/v2/platform/payments_controller.rb +0 -21
  146. data/app/controllers/spree/api/v2/platform/products_controller.rb +0 -41
  147. data/app/controllers/spree/api/v2/platform/promotion_actions_controller.rb +0 -34
  148. data/app/controllers/spree/api/v2/platform/promotion_categories_controller.rb +0 -23
  149. data/app/controllers/spree/api/v2/platform/promotion_rules_controller.rb +0 -29
  150. data/app/controllers/spree/api/v2/platform/promotions_controller.rb +0 -35
  151. data/app/controllers/spree/api/v2/platform/resource_controller.rb +0 -154
  152. data/app/controllers/spree/api/v2/platform/roles_controller.rb +0 -19
  153. data/app/controllers/spree/api/v2/platform/shipments_controller.rb +0 -147
  154. data/app/controllers/spree/api/v2/platform/shipping_categories_controller.rb +0 -19
  155. data/app/controllers/spree/api/v2/platform/shipping_methods_controller.rb +0 -28
  156. data/app/controllers/spree/api/v2/platform/states_controller.rb +0 -23
  157. data/app/controllers/spree/api/v2/platform/stock_items_controller.rb +0 -23
  158. data/app/controllers/spree/api/v2/platform/stock_locations_controller.rb +0 -23
  159. data/app/controllers/spree/api/v2/platform/store_credit_categories_controller.rb +0 -19
  160. data/app/controllers/spree/api/v2/platform/store_credit_types_controller.rb +0 -19
  161. data/app/controllers/spree/api/v2/platform/store_credits_controller.rb +0 -23
  162. data/app/controllers/spree/api/v2/platform/tax_categories_controller.rb +0 -23
  163. data/app/controllers/spree/api/v2/platform/tax_rates_controller.rb +0 -27
  164. data/app/controllers/spree/api/v2/platform/taxonomies_controller.rb +0 -23
  165. data/app/controllers/spree/api/v2/platform/taxons_controller.rb +0 -59
  166. data/app/controllers/spree/api/v2/platform/users_controller.rb +0 -37
  167. data/app/controllers/spree/api/v2/platform/variants_controller.rb +0 -23
  168. data/app/controllers/spree/api/v2/platform/wished_items_controller.rb +0 -23
  169. data/app/controllers/spree/api/v2/platform/wishlists_controller.rb +0 -23
  170. data/app/controllers/spree/api/v2/platform/zones_controller.rb +0 -23
  171. data/app/controllers/spree/api/v2/resource_controller.rb +0 -79
  172. data/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb +0 -77
  173. data/app/controllers/spree/api/v2/storefront/account/credit_cards_controller.rb +0 -52
  174. data/app/controllers/spree/api/v2/storefront/account/orders_controller.rb +0 -50
  175. data/app/controllers/spree/api/v2/storefront/account_controller.rb +0 -52
  176. data/app/controllers/spree/api/v2/storefront/cart_controller.rb +0 -246
  177. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +0 -183
  178. data/app/controllers/spree/api/v2/storefront/countries_controller.rb +0 -57
  179. data/app/controllers/spree/api/v2/storefront/digitals_controller.rb +0 -58
  180. data/app/controllers/spree/api/v2/storefront/order_status_controller.rb +0 -34
  181. data/app/controllers/spree/api/v2/storefront/policies_controller.rb +0 -31
  182. data/app/controllers/spree/api/v2/storefront/post_categories_controller.rb +0 -35
  183. data/app/controllers/spree/api/v2/storefront/posts_controller.rb +0 -51
  184. data/app/controllers/spree/api/v2/storefront/products_controller.rb +0 -66
  185. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +0 -27
  186. data/app/controllers/spree/api/v2/storefront/taxons_controller.rb +0 -51
  187. data/app/controllers/spree/api/v2/storefront/variants_controller.rb +0 -41
  188. data/app/controllers/spree/api/v2/storefront/wishlists_controller.rb +0 -214
  189. data/app/helpers/spree/api/v2/collection_options_helpers.rb +0 -46
  190. data/app/helpers/spree/api/v2/display_money_helper.rb +0 -63
  191. data/app/helpers/spree/api/v2/store_media_serializer_images_concern.rb +0 -30
  192. data/app/models/concerns/spree/user_api_authentication.rb +0 -19
  193. data/app/models/concerns/spree/user_api_methods.rb +0 -7
  194. data/app/models/spree/oauth_access_grant.rb +0 -7
  195. data/app/models/spree/oauth_access_token.rb +0 -7
  196. data/app/models/spree/oauth_application.rb +0 -22
  197. data/app/paginators/spree/api/paginate.rb +0 -68
  198. data/app/presenters/spree/api/products/filters_presenter.rb +0 -39
  199. data/app/serializers/concerns/spree/api/v2/image_transformation_concern.rb +0 -15
  200. data/app/serializers/concerns/spree/api/v2/public_metafields_concern.rb +0 -15
  201. data/app/serializers/concerns/spree/api/v2/resource_serializer_concern.rb +0 -42
  202. data/app/serializers/concerns/spree/api/v2/taxon_image_transformation_concern.rb +0 -15
  203. data/app/serializers/spree/api/v2/base_serializer.rb +0 -43
  204. data/app/serializers/spree/api/v2/platform/address_serializer.rb +0 -15
  205. data/app/serializers/spree/api/v2/platform/adjustment_serializer.rb +0 -20
  206. data/app/serializers/spree/api/v2/platform/admin_user_serializer.rb +0 -11
  207. data/app/serializers/spree/api/v2/platform/asset_serializer.rb +0 -13
  208. data/app/serializers/spree/api/v2/platform/base_serializer.rb +0 -10
  209. data/app/serializers/spree/api/v2/platform/calculator_serializer.rb +0 -17
  210. data/app/serializers/spree/api/v2/platform/classification_serializer.rb +0 -14
  211. data/app/serializers/spree/api/v2/platform/country_serializer.rb +0 -13
  212. data/app/serializers/spree/api/v2/platform/credit_card_serializer.rb +0 -14
  213. data/app/serializers/spree/api/v2/platform/customer_return_serializer.rb +0 -17
  214. data/app/serializers/spree/api/v2/platform/data_feed_serializer.rb +0 -13
  215. data/app/serializers/spree/api/v2/platform/digital_link_serializer.rb +0 -16
  216. data/app/serializers/spree/api/v2/platform/digital_serializer.rb +0 -29
  217. data/app/serializers/spree/api/v2/platform/gift_card_serializer.rb +0 -17
  218. data/app/serializers/spree/api/v2/platform/image_serializer.rb +0 -17
  219. data/app/serializers/spree/api/v2/platform/inventory_unit_serializer.rb +0 -19
  220. data/app/serializers/spree/api/v2/platform/line_item_serializer.rb +0 -19
  221. data/app/serializers/spree/api/v2/platform/log_entry_serializer.rb +0 -13
  222. data/app/serializers/spree/api/v2/platform/metafield_serializer.rb +0 -21
  223. data/app/serializers/spree/api/v2/platform/option_type_serializer.rb +0 -13
  224. data/app/serializers/spree/api/v2/platform/option_value_serializer.rb +0 -13
  225. data/app/serializers/spree/api/v2/platform/order_promotion_serializer.rb +0 -14
  226. data/app/serializers/spree/api/v2/platform/order_serializer.rb +0 -31
  227. data/app/serializers/spree/api/v2/platform/payment_capture_event_serializer.rb +0 -13
  228. data/app/serializers/spree/api/v2/platform/payment_method_serializer.rb +0 -18
  229. data/app/serializers/spree/api/v2/platform/payment_serializer.rb +0 -22
  230. data/app/serializers/spree/api/v2/platform/payment_source_serializer.rb +0 -12
  231. data/app/serializers/spree/api/v2/platform/price_serializer.rb +0 -19
  232. data/app/serializers/spree/api/v2/platform/product_property_serializer.rb +0 -11
  233. data/app/serializers/spree/api/v2/platform/product_serializer.rb +0 -90
  234. data/app/serializers/spree/api/v2/platform/promotion_action_line_item_serializer.rb +0 -14
  235. data/app/serializers/spree/api/v2/platform/promotion_action_serializer.rb +0 -19
  236. data/app/serializers/spree/api/v2/platform/promotion_category_serializer.rb +0 -13
  237. data/app/serializers/spree/api/v2/platform/promotion_rule_serializer.rb +0 -21
  238. data/app/serializers/spree/api/v2/platform/promotion_serializer.rb +0 -17
  239. data/app/serializers/spree/api/v2/platform/property_serializer.rb +0 -11
  240. data/app/serializers/spree/api/v2/platform/prototype_serializer.rb +0 -15
  241. data/app/serializers/spree/api/v2/platform/refund_reason_serializer.rb +0 -11
  242. data/app/serializers/spree/api/v2/platform/refund_serializer.rb +0 -17
  243. data/app/serializers/spree/api/v2/platform/reimbursement_credit_serializer.rb +0 -10
  244. data/app/serializers/spree/api/v2/platform/reimbursement_serializer.rb +0 -19
  245. data/app/serializers/spree/api/v2/platform/reimbursement_type_serializer.rb +0 -11
  246. data/app/serializers/spree/api/v2/platform/return_authorization_reason_serializer.rb +0 -11
  247. data/app/serializers/spree/api/v2/platform/return_authorization_serializer.rb +0 -17
  248. data/app/serializers/spree/api/v2/platform/return_item_serializer.rb +0 -16
  249. data/app/serializers/spree/api/v2/platform/role_serializer.rb +0 -11
  250. data/app/serializers/spree/api/v2/platform/shipment_serializer.rb +0 -22
  251. data/app/serializers/spree/api/v2/platform/shipping_category_serializer.rb +0 -11
  252. data/app/serializers/spree/api/v2/platform/shipping_method_serializer.rb +0 -16
  253. data/app/serializers/spree/api/v2/platform/shipping_rate_serializer.rb +0 -15
  254. data/app/serializers/spree/api/v2/platform/state_change_serializer.rb +0 -13
  255. data/app/serializers/spree/api/v2/platform/state_serializer.rb +0 -13
  256. data/app/serializers/spree/api/v2/platform/stock_item_serializer.rb +0 -18
  257. data/app/serializers/spree/api/v2/platform/stock_location_serializer.rb +0 -14
  258. data/app/serializers/spree/api/v2/platform/stock_movement_serializer.rb +0 -11
  259. data/app/serializers/spree/api/v2/platform/stock_transfer_serializer.rb +0 -15
  260. data/app/serializers/spree/api/v2/platform/store_credit_category_serializer.rb +0 -12
  261. data/app/serializers/spree/api/v2/platform/store_credit_event_serializer.rb +0 -14
  262. data/app/serializers/spree/api/v2/platform/store_credit_serializer.rb +0 -18
  263. data/app/serializers/spree/api/v2/platform/store_credit_type_serializer.rb +0 -12
  264. data/app/serializers/spree/api/v2/platform/store_serializer.rb +0 -14
  265. data/app/serializers/spree/api/v2/platform/tax_category_serializer.rb +0 -13
  266. data/app/serializers/spree/api/v2/platform/tax_rate_serializer.rb +0 -14
  267. data/app/serializers/spree/api/v2/platform/taxon_image_serializer.rb +0 -15
  268. data/app/serializers/spree/api/v2/platform/taxon_serializer.rb +0 -47
  269. data/app/serializers/spree/api/v2/platform/taxonomy_serializer.rb +0 -14
  270. data/app/serializers/spree/api/v2/platform/user_serializer.rb +0 -37
  271. data/app/serializers/spree/api/v2/platform/variant_serializer.rb +0 -66
  272. data/app/serializers/spree/api/v2/platform/wished_item_serializer.rb +0 -29
  273. data/app/serializers/spree/api/v2/platform/wishlist_serializer.rb +0 -19
  274. data/app/serializers/spree/api/v2/platform/zone_member_serializer.rb +0 -13
  275. data/app/serializers/spree/api/v2/platform/zone_serializer.rb +0 -13
  276. data/app/serializers/spree/v2/storefront/address_serializer.rb +0 -22
  277. data/app/serializers/spree/v2/storefront/base_serializer.rb +0 -10
  278. data/app/serializers/spree/v2/storefront/cart_serializer.rb +0 -67
  279. data/app/serializers/spree/v2/storefront/country_serializer.rb +0 -24
  280. data/app/serializers/spree/v2/storefront/credit_card_serializer.rb +0 -15
  281. data/app/serializers/spree/v2/storefront/digital_link_serializer.rb +0 -11
  282. data/app/serializers/spree/v2/storefront/estimated_shipping_rate_serializer.rb +0 -35
  283. data/app/serializers/spree/v2/storefront/gift_card_serializer.rb +0 -16
  284. data/app/serializers/spree/v2/storefront/image_serializer.rb +0 -13
  285. data/app/serializers/spree/v2/storefront/line_item_serializer.rb +0 -23
  286. data/app/serializers/spree/v2/storefront/option_type_serializer.rb +0 -15
  287. data/app/serializers/spree/v2/storefront/option_value_serializer.rb +0 -13
  288. data/app/serializers/spree/v2/storefront/order_promotion_serializer.rb +0 -14
  289. data/app/serializers/spree/v2/storefront/order_serializer.rb +0 -11
  290. data/app/serializers/spree/v2/storefront/payment_method_serializer.rb +0 -17
  291. data/app/serializers/spree/v2/storefront/payment_serializer.rb +0 -20
  292. data/app/serializers/spree/v2/storefront/payment_source_serializer.rb +0 -12
  293. data/app/serializers/spree/v2/storefront/policy_serializer.rb +0 -19
  294. data/app/serializers/spree/v2/storefront/post_category_serializer.rb +0 -23
  295. data/app/serializers/spree/v2/storefront/post_serializer.rb +0 -51
  296. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +0 -19
  297. data/app/serializers/spree/v2/storefront/product_serializer.rb +0 -92
  298. data/app/serializers/spree/v2/storefront/shipment_serializer.rb +0 -26
  299. data/app/serializers/spree/v2/storefront/shipping_category_serializer.rb +0 -10
  300. data/app/serializers/spree/v2/storefront/shipping_method_serializer.rb +0 -12
  301. data/app/serializers/spree/v2/storefront/shipping_rate_serializer.rb +0 -26
  302. data/app/serializers/spree/v2/storefront/state_serializer.rb +0 -11
  303. data/app/serializers/spree/v2/storefront/stock_location_serializer.rb +0 -11
  304. data/app/serializers/spree/v2/storefront/store_credit_category_serializer.rb +0 -11
  305. data/app/serializers/spree/v2/storefront/store_credit_event_serializer.rb +0 -15
  306. data/app/serializers/spree/v2/storefront/store_credit_serializer.rb +0 -19
  307. data/app/serializers/spree/v2/storefront/store_credit_type_serializer.rb +0 -11
  308. data/app/serializers/spree/v2/storefront/store_serializer.rb +0 -18
  309. data/app/serializers/spree/v2/storefront/taxon_image_serializer.rb +0 -13
  310. data/app/serializers/spree/v2/storefront/taxon_serializer.rb +0 -55
  311. data/app/serializers/spree/v2/storefront/taxonomy_serializer.rb +0 -13
  312. data/app/serializers/spree/v2/storefront/user_serializer.rb +0 -33
  313. data/app/serializers/spree/v2/storefront/variant_serializer.rb +0 -58
  314. data/app/serializers/spree/v2/storefront/wished_item_serializer.rb +0 -29
  315. data/app/serializers/spree/v2/storefront/wishlist_serializer.rb +0 -17
  316. data/config/initializers/doorkeeper.rb +0 -50
  317. data/config/initializers/json_api_mime_types.rb +0 -8
  318. data/config/initializers/user_class_extensions.rb +0 -7
  319. data/db/migrate/20100107141738_add_api_key_to_spree_users.rb +0 -7
  320. data/db/migrate/20120411123334_resize_api_key_field.rb +0 -7
  321. data/db/migrate/20120530054546_rename_api_key_to_spree_api_key.rb +0 -7
  322. data/db/migrate/20131017162334_add_index_to_user_spree_api_key.rb +0 -7
  323. data/db/migrate/20180320110726_create_doorkeeper_tables.rb +0 -69
  324. data/db/migrate/20210727102516_change_integer_id_columns_type.rb +0 -9
  325. data/db/migrate/20210919183228_enable_polymorphic_resource_owner.rb +0 -21
  326. data/lib/generators/spree/api/install/install_generator.rb +0 -24
  327. data/lib/spree/api/testing_support/factories/oauth_application_factory.rb +0 -6
  328. data/lib/spree/api/testing_support/serializers.rb +0 -15
  329. data/lib/spree/api/testing_support/v2/base.rb +0 -13
  330. data/lib/spree/api/testing_support/v2/current_order.rb +0 -116
  331. data/lib/spree/api/testing_support/v2/platform_contexts.rb +0 -272
  332. data/lib/spree/api/testing_support/v2/serializers_params.rb +0 -16
@@ -0,0 +1,41 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class WishlistsController < ResourceController
6
+ prepend_before_action :require_authentication!
7
+
8
+ # POST /api/v3/store/wishlists
9
+ def create
10
+ @resource = current_user.wishlists.build(permitted_params)
11
+ @resource.store = current_store
12
+
13
+ if @resource.save
14
+ render json: serialize_resource(@resource), status: :created
15
+ else
16
+ render_errors(@resource.errors)
17
+ end
18
+ end
19
+
20
+ protected
21
+
22
+ def scope
23
+ current_user.wishlists.for_store(current_store)
24
+ end
25
+
26
+ def model_class
27
+ Spree::Wishlist
28
+ end
29
+
30
+ def serializer_class
31
+ Spree.api.wishlist_serializer
32
+ end
33
+
34
+ def permitted_params
35
+ params.permit(Spree::PermittedAttributes.wishlist_attributes)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,22 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class AddressSerializer < BaseSerializer
5
+ typelize firstname: [:string, nullable: true], lastname: [:string, nullable: true], full_name: :string,
6
+ address1: [:string, nullable: true], address2: [:string, nullable: true],
7
+ city: [:string, nullable: true], zipcode: [:string, nullable: true], phone: [:string, nullable: true],
8
+ company: [:string, nullable: true], state_abbr: [:string, nullable: true], state_name: [:string, nullable: true],
9
+ state_text: [:string, nullable: true], country_iso: :string, country_name: :string
10
+
11
+ attributes :firstname, :lastname, :full_name, :address1, :address2,
12
+ :city, :zipcode, :phone, :company, :country_name, :country_iso, :state_text,
13
+ :state_abbr
14
+
15
+ # State name - used for countries without predefined states
16
+ attribute :state_name do |address|
17
+ address.state_name.presence || address.state&.name
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,43 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin API Customer Serializer
6
+ # Full customer data including admin-only fields
7
+ class CustomerSerializer < V3::CustomerSerializer
8
+ typelize phone: [:string, nullable: true], login: [:string, nullable: true],
9
+ accepts_email_marketing: :boolean,
10
+ last_sign_in_at: [:string, nullable: true], current_sign_in_at: [:string, nullable: true],
11
+ sign_in_count: :number, failed_attempts: :number,
12
+ last_sign_in_ip: [:string, nullable: true], current_sign_in_ip: [:string, nullable: true]
13
+
14
+ # Admin-only attributes
15
+ attributes :phone, :login, :accepts_email_marketing,
16
+ last_sign_in_at: :iso8601, current_sign_in_at: :iso8601
17
+
18
+ attribute :sign_in_count do |user|
19
+ user.sign_in_count
20
+ end
21
+
22
+ attribute :failed_attempts do |user|
23
+ user.failed_attempts
24
+ end
25
+
26
+ attribute :last_sign_in_ip do |user|
27
+ user.last_sign_in_ip
28
+ end
29
+
30
+ attribute :current_sign_in_ip do |user|
31
+ user.current_sign_in_ip
32
+ end
33
+
34
+ many :orders,
35
+ resource: Spree.api.admin_order_serializer,
36
+ if: proc { params[:includes]&.include?('orders') }
37
+
38
+ # TODO: Add store_credits association when Admin API is implemented
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin API Metafield Serializer
6
+ # Full metafield data including admin-only fields
7
+ class MetafieldSerializer < V3::MetafieldSerializer
8
+ typelize display_on: :string
9
+
10
+ attributes :display_on
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,39 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin API Order Serializer
6
+ # Full order data including admin-only fields
7
+ class OrderSerializer < V3::OrderSerializer
8
+
9
+ typelize channel: [:string, nullable: true], last_ip_address: [:string, nullable: true],
10
+ considered_risky: :boolean, confirmation_delivered: :boolean,
11
+ store_owner_notification_delivered: :boolean,
12
+ internal_note: [:string, nullable: true], approver_id: [:string, nullable: true],
13
+ canceler_id: [:string, nullable: true], created_by_id: [:string, nullable: true],
14
+ canceled_at: [:string, nullable: true], approved_at: [:string, nullable: true]
15
+
16
+ # Admin-only attributes
17
+ attributes :channel, :last_ip_address, :considered_risky,
18
+ :confirmation_delivered, :store_owner_notification_delivered,
19
+ :internal_note, :approver_id,
20
+ canceled_at: :iso8601, approved_at: :iso8601
21
+
22
+ attribute :canceler_id do |order|
23
+ order.canceler_id
24
+ end
25
+
26
+ attribute :created_by_id do |order|
27
+ order.created_by_id
28
+ end
29
+
30
+ one :user,
31
+ resource: Spree.api.admin_customer_serializer,
32
+ if: proc { params[:includes]&.include?('user') }
33
+
34
+ # TODO: Add adjustments associations when Admin API is implemented
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin API Price Serializer
6
+ # Extends Store Price Serializer with admin-only fields
7
+ class PriceSerializer < V3::PriceSerializer
8
+ typelize variant_id: [:string, nullable: true],
9
+ created_at: :string,
10
+ updated_at: :string
11
+
12
+ attribute :variant_id do |price|
13
+ price&.variant&.prefixed_id
14
+ end
15
+
16
+ attributes created_at: :iso8601, updated_at: :iso8601
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,47 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin API Product Serializer
6
+ # Full product data including admin-only fields
7
+ # Extends the store serializer with additional attributes
8
+ class ProductSerializer < V3::ProductSerializer
9
+
10
+ # Additional type hints for admin-only computed attributes
11
+ typelize status: :string, make_active_at: [:string, nullable: true], discontinue_on: [:string, nullable: true],
12
+ cost_price: [:number, nullable: true], cost_currency: [:string, nullable: true],
13
+ deleted_at: [:string, nullable: true]
14
+
15
+ # Admin-only attributes
16
+ attributes :status, :make_active_at, :discontinue_on, deleted_at: :iso8601
17
+
18
+ attribute :cost_price do |product|
19
+ product.master&.cost_price&.to_f
20
+ end
21
+
22
+ attribute :cost_currency do |product|
23
+ product.master&.cost_currency
24
+ end
25
+
26
+ # Admin uses admin variant serializer
27
+ many :variants,
28
+ resource: Spree.api.admin_variant_serializer,
29
+ if: proc { params[:includes]&.include?('variants') }
30
+
31
+ one :default_variant,
32
+ resource: Spree.api.admin_variant_serializer,
33
+ if: proc { params[:includes]&.include?('default_variant') }
34
+
35
+ one :master,
36
+ key: :master_variant,
37
+ resource: Spree.api.admin_variant_serializer,
38
+ if: proc { params[:includes]&.include?('master_variant') }
39
+
40
+ many :metafields,
41
+ resource: Spree.api.admin_metafield_serializer,
42
+ if: proc { params[:includes]&.include?('metafields') }
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,20 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin API Taxon Serializer
6
+ # Full taxon data including admin-only fields
7
+ class TaxonSerializer < V3::TaxonSerializer
8
+ typelize lft: :number, rgt: :number
9
+
10
+ # Nested set columns for tree operations
11
+ attributes :lft, :rgt
12
+
13
+ many :metafields,
14
+ resource: Spree.api.admin_metafield_serializer,
15
+ if: proc { params[:includes]&.include?('metafields') }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin API Taxonomy Serializer
6
+ # Full taxonomy data including admin-only fields
7
+ class TaxonomySerializer < V3::TaxonomySerializer
8
+ many :metafields,
9
+ resource: Spree.api.admin_metafield_serializer,
10
+ if: proc { params[:includes]&.include?('metafields') }
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,44 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin API Variant Serializer
6
+ # Full variant data including admin-only fields
7
+ class VariantSerializer < V3::VariantSerializer
8
+
9
+ # Additional type hints for admin-only attributes
10
+ typelize position: :number, tax_category_id: [:string, nullable: true],
11
+ cost_price: [:number, nullable: true], cost_currency: [:string, nullable: true],
12
+ total_on_hand: [:number, nullable: true],
13
+ deleted_at: [:string, nullable: true]
14
+
15
+ # Admin-only attributes
16
+ attributes :position, :tax_category_id, deleted_at: :iso8601
17
+
18
+ attribute :cost_price do |variant|
19
+ variant.cost_price&.to_f
20
+ end
21
+
22
+ attribute :cost_currency do |variant|
23
+ variant.cost_currency
24
+ end
25
+
26
+ attribute :total_on_hand do |variant|
27
+ variant.total_on_hand
28
+ end
29
+
30
+ # All prices for this variant (for admin management)
31
+ many :prices,
32
+ resource: Spree.api.admin_price_serializer,
33
+ if: proc { params[:includes]&.include?('prices') }
34
+
35
+ many :metafields,
36
+ resource: Spree.api.admin_metafield_serializer,
37
+ if: proc { params[:includes]&.include?('metafields') }
38
+
39
+ # TODO: Add stock_items association when Admin API is implemented
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class AssetSerializer < BaseSerializer
7
+ typelize type: [:string, nullable: true], viewable_type: :string,
8
+ viewable_id: :string, position: [:number, nullable: true],
9
+ alt: [:string, nullable: true]
10
+
11
+ attribute :viewable_id do |asset|
12
+ asset.viewable&.prefixed_id
13
+ end
14
+
15
+ attributes :type, :viewable_type, :position, :alt,
16
+ created_at: :iso8601, updated_at: :iso8601
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,98 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class BaseSerializer
5
+ include Alba::Resource
6
+ include Typelizer::DSL
7
+
8
+ # Common type hints for fields present in most serializers
9
+ typelize id: :string, created_at: :string, updated_at: :string
10
+
11
+ # Use prefixed IDs (Stripe-style) for all API v3 serializers
12
+ # e.g., prod_86Rf07xd4z, variant_k5nR8xLq, or_m3Rp9wXz
13
+ attribute :id do |object|
14
+ next nil unless object.respond_to?(:prefixed_id)
15
+
16
+ object.prefixed_id
17
+ end
18
+
19
+ # Context accessors
20
+ def current_store
21
+ params[:store]
22
+ end
23
+
24
+ def current_currency
25
+ params[:currency]
26
+ end
27
+
28
+ def current_user
29
+ params[:user]
30
+ end
31
+
32
+ def current_locale
33
+ params[:locale]
34
+ end
35
+
36
+ def includes
37
+ @includes ||= Array(params[:includes] || [])
38
+ end
39
+
40
+ # Check if an association should be included
41
+ def include?(name)
42
+ includes.include?(name.to_s)
43
+ end
44
+
45
+ # Get nested includes for a given parent
46
+ def nested_includes_for(parent)
47
+ prefix = "#{parent}."
48
+ includes.select { |i| i.start_with?(prefix) }.map { |i| i.sub(prefix, '') }
49
+ end
50
+
51
+ # Build nested params for child serializers
52
+ def nested_params(parent = nil)
53
+ params.merge(includes: parent ? nested_includes_for(parent) : [])
54
+ end
55
+
56
+ # Returns price for a variant using full Price List resolution
57
+ # This may return a price from a price list if applicable
58
+ # Memoized per variant to avoid duplicate queries
59
+ def price_for(variant, quantity: nil)
60
+ return nil unless variant.respond_to?(:price_for)
61
+
62
+ @price_for_cache ||= {}
63
+ cache_key = [variant.id, quantity]
64
+ return @price_for_cache[cache_key] if @price_for_cache.key?(cache_key)
65
+
66
+ @price_for_cache[cache_key] = variant.price_for(
67
+ currency: current_currency,
68
+ store: current_store,
69
+ user: current_user,
70
+ quantity: quantity
71
+ )
72
+ end
73
+
74
+ # Returns the base price for a variant without Price List resolution
75
+ # This is the "original" price before any price list discounts
76
+ # Memoized per variant to avoid duplicate queries
77
+ def price_in(variant)
78
+ return nil unless variant.respond_to?(:price_in)
79
+
80
+ @price_in_cache ||= {}
81
+ return @price_in_cache[variant.id] if @price_in_cache.key?(variant.id)
82
+
83
+ @price_in_cache[variant.id] = variant.price_in(current_currency)
84
+ end
85
+
86
+ def image_url_for(image)
87
+ return nil if image.nil?
88
+ return nil unless image.respond_to?(:attached?) && image.attached?
89
+
90
+ # Handle Spree::Asset models (like Spree::Image) which have attachment inside
91
+ # vs direct ActiveStorage attachments (like taxon.image)
92
+ attachment = image.is_a?(Spree::Asset) ? image.attachment : image
93
+ Rails.application.routes.url_helpers.cdn_image_url(attachment)
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,35 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class CountrySerializer
5
+ include Alba::Resource
6
+ include Typelizer::DSL
7
+
8
+ # ISO 3166-1 codes - iso is the identifier, no redundant id field
9
+ typelize iso: :string, iso3: :string, name: :string,
10
+ states_required: :boolean, zipcode_required: :boolean,
11
+ currency: [:string, nullable: true],
12
+ default_locale: [:string, nullable: true],
13
+ supported_locales: [:string, multi: true]
14
+
15
+ attributes :iso, :iso3, :name, :states_required, :zipcode_required
16
+
17
+ attribute :currency do |country|
18
+ country.market_currency
19
+ end
20
+
21
+ attribute :default_locale do |country|
22
+ country.market_locale
23
+ end
24
+
25
+ attribute :supported_locales do |country|
26
+ country.market_supported_locales
27
+ end
28
+
29
+ many :states,
30
+ resource: Spree.api.state_serializer,
31
+ if: proc { params[:includes]&.include?('states') }
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,12 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class CreditCardSerializer < BaseSerializer
5
+ typelize cc_type: :string, last_digits: :string, month: :number, year: :number,
6
+ name: [:string, nullable: true], default: :boolean, gateway_payment_profile_id: [:string, nullable: true]
7
+
8
+ attributes :cc_type, :last_digits, :month, :year, :name, :default, :gateway_payment_profile_id
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class CurrencySerializer
5
+ include Alba::Resource
6
+ include Typelizer::DSL
7
+
8
+ typelize iso_code: :string, name: :string, symbol: :string
9
+
10
+ attributes :iso_code, :name, :symbol
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class CustomerReturnSerializer < BaseSerializer
7
+ typelize number: :string, stock_location_id: [:string, nullable: true]
8
+
9
+ attributes :number, created_at: :iso8601, updated_at: :iso8601
10
+
11
+ attribute :stock_location_id do |customer_return|
12
+ customer_return.stock_location&.prefixed_id
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ # Store API Customer Serializer
5
+ # Customer-facing user data
6
+ class CustomerSerializer < BaseSerializer
7
+ typelize email: :string, first_name: [:string, nullable: true], last_name: [:string, nullable: true],
8
+ default_billing_address: { nullable: true }, default_shipping_address: { nullable: true }
9
+
10
+ attributes :email, :first_name, :last_name,
11
+ created_at: :iso8601, updated_at: :iso8601
12
+
13
+ many :addresses, resource: Spree.api.address_serializer
14
+ one :bill_address, key: :default_billing_address, resource: Spree.api.address_serializer
15
+ one :ship_address, key: :default_shipping_address, resource: Spree.api.address_serializer
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class DigitalLinkSerializer < BaseSerializer
5
+ typelize access_counter: :number, filename: :string, content_type: :string,
6
+ download_url: :string,
7
+ authorizable: :boolean, expired: :boolean, access_limit_exceeded: :boolean
8
+
9
+ attributes :access_counter, :filename, :content_type,
10
+ created_at: :iso8601, updated_at: :iso8601
11
+
12
+ attribute :download_url do |digital_link|
13
+ Spree::Core::Engine.routes.url_helpers.api_v3_store_digital_download_path(token: digital_link.token)
14
+ end
15
+
16
+ attribute :authorizable do |digital_link|
17
+ digital_link.authorizable?
18
+ end
19
+
20
+ attribute :expired do |digital_link|
21
+ digital_link.expired?
22
+ end
23
+
24
+ attribute :access_limit_exceeded do |digital_link|
25
+ digital_link.access_limit_exceeded?
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class DigitalSerializer < BaseSerializer
7
+ typelize variant_id: [:string, nullable: true]
8
+
9
+ attributes created_at: :iso8601, updated_at: :iso8601
10
+
11
+ attribute :variant_id do |digital|
12
+ digital.variant&.prefixed_id
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class ExportSerializer < BaseSerializer
7
+ typelize number: :string, type: [:string, nullable: true], format: [:string, nullable: true],
8
+ user_id: [:string, nullable: true]
9
+
10
+ attributes :number, :type, :format,
11
+ created_at: :iso8601, updated_at: :iso8601
12
+
13
+ attribute :user_id do |export|
14
+ export.user&.prefixed_id
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class GiftCardBatchSerializer < BaseSerializer
7
+ typelize codes_count: :number, amount: [:string, nullable: true], currency: [:string, nullable: true],
8
+ prefix: [:string, nullable: true], expires_at: [:string, nullable: true],
9
+ created_by_id: [:string, nullable: true]
10
+
11
+ attributes :codes_count, :currency, :prefix,
12
+ created_at: :iso8601, updated_at: :iso8601
13
+
14
+ attribute :amount do |batch|
15
+ batch.amount&.to_s
16
+ end
17
+
18
+ attribute :expires_at do |batch|
19
+ batch.expires_at&.iso8601
20
+ end
21
+
22
+ attribute :created_by_id do |batch|
23
+ batch.created_by&.prefixed_id
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end