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,108 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ # Store API Product Serializer
5
+ # Customer-facing product data with limited fields
6
+ class ProductSerializer < BaseSerializer
7
+ typelize name: :string, description: [:string, nullable: true], slug: :string,
8
+ meta_description: [:string, nullable: true], meta_keywords: [:string, nullable: true],
9
+ variant_count: :number,
10
+ default_variant_id: :string,
11
+ thumbnail_url: [:string, nullable: true],
12
+ available_on: [:string, nullable: true],
13
+ purchasable: :boolean, in_stock: :boolean, backorderable: :boolean, available: :boolean,
14
+ price: 'StorePrice',
15
+ original_price: ['StorePrice', nullable: true],
16
+ tags: [:string, multi: true]
17
+
18
+ attributes :name, :description, :slug,
19
+ :meta_description, :meta_keywords,
20
+ :variant_count,
21
+ available_on: :iso8601, created_at: :iso8601, updated_at: :iso8601
22
+
23
+ attribute :purchasable do |product|
24
+ product.purchasable?
25
+ end
26
+
27
+ attribute :in_stock do |product|
28
+ product.in_stock?
29
+ end
30
+
31
+ attribute :backorderable do |product|
32
+ product.backorderable?
33
+ end
34
+
35
+ attribute :available do |product|
36
+ product.available?
37
+ end
38
+
39
+ attribute :default_variant_id do |product|
40
+ product.default_variant&.prefixed_id
41
+ end
42
+
43
+ # Main product image URL for listings (cached thumbnail)
44
+ attribute :thumbnail_url do |product|
45
+ image_url_for(product.thumbnail)
46
+ end
47
+
48
+ attribute :tags do |product|
49
+ product.taggings.map(&:tag)
50
+ end
51
+
52
+ # Price object - calculated price with price list resolution
53
+ attribute :price do |product|
54
+ price = price_for(product.default_variant)
55
+ Spree.api.price_serializer.new(price, params: params).to_h if price.present?
56
+ end
57
+
58
+ # Original price - base price without price list resolution (for showing strikethrough)
59
+ # Returns null when same as calculated price, only populated when a price list discount is applied
60
+ attribute :original_price do |product|
61
+ variant = product.default_variant
62
+ calculated = price_for(variant)
63
+ base = price_in(variant)
64
+
65
+ if calculated.present? && base.present? && calculated.id != base.id
66
+ Spree.api.price_serializer.new(base, params: params).to_h
67
+ end
68
+ end
69
+
70
+ # Conditional associations
71
+ many :variant_images,
72
+ key: :images,
73
+ resource: Spree.api.image_serializer,
74
+ if: proc { params[:includes]&.include?('images') }
75
+
76
+ many :variants,
77
+ resource: Spree.api.variant_serializer,
78
+ if: proc { params[:includes]&.include?('variants') }
79
+
80
+ one :default_variant,
81
+ resource: Spree.api.variant_serializer,
82
+ if: proc { params[:includes]&.include?('default_variant') }
83
+
84
+ one :master,
85
+ key: :master_variant,
86
+ resource: Spree.api.variant_serializer,
87
+ if: proc { params[:includes]&.include?('master_variant') }
88
+
89
+ many :option_types,
90
+ resource: Spree.api.option_type_serializer,
91
+ if: proc { params[:includes]&.include?('option_types') }
92
+
93
+ many :taxons,
94
+ proc { |taxons, params|
95
+ taxons.select { |t| t.taxonomy.store_id == params[:store].id }
96
+ },
97
+ resource: Spree.api.taxon_serializer,
98
+ if: proc { params[:includes]&.include?('taxons') },
99
+ params: { includes: [] }
100
+
101
+ many :public_metafields,
102
+ key: :metafields,
103
+ resource: Spree.api.metafield_serializer,
104
+ if: proc { params[:includes]&.include?('metafields') }
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class PromotionSerializer < BaseSerializer
7
+ typelize name: :string, description: [:string, nullable: true],
8
+ code: [:string, nullable: true], type: [:string, nullable: true],
9
+ kind: [:string, nullable: true], path: [:string, nullable: true],
10
+ match_policy: [:string, nullable: true], usage_limit: [:number, nullable: true],
11
+ advertise: :boolean, multi_codes: :boolean,
12
+ code_prefix: [:string, nullable: true], number_of_codes: [:number, nullable: true],
13
+ starts_at: [:string, nullable: true], expires_at: [:string, nullable: true],
14
+ promotion_category_id: [:string, nullable: true]
15
+
16
+ attributes :name, :description, :code, :type, :kind, :path,
17
+ :match_policy, :usage_limit, :advertise, :multi_codes,
18
+ :code_prefix, :number_of_codes,
19
+ starts_at: :iso8601, expires_at: :iso8601,
20
+ created_at: :iso8601, updated_at: :iso8601
21
+
22
+ attribute :promotion_category_id do |promotion|
23
+ promotion.promotion_category&.prefixed_id
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class RefundSerializer < BaseSerializer
7
+ typelize amount: [:string, nullable: true], transaction_id: [:string, nullable: true],
8
+ payment_id: [:string, nullable: true], refund_reason_id: [:string, nullable: true],
9
+ reimbursement_id: [:string, nullable: true]
10
+
11
+ attributes :transaction_id, created_at: :iso8601, updated_at: :iso8601
12
+
13
+ attribute :amount do |refund|
14
+ refund.amount&.to_s
15
+ end
16
+
17
+ attribute :payment_id do |refund|
18
+ refund.payment&.prefixed_id
19
+ end
20
+
21
+ attribute :refund_reason_id do |refund|
22
+ refund.reason&.prefixed_id
23
+ end
24
+
25
+ attribute :reimbursement_id do |refund|
26
+ refund.reimbursement&.prefixed_id
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class ReimbursementSerializer < BaseSerializer
7
+ typelize number: :string, reimbursement_status: [:string, nullable: true],
8
+ total: [:string, nullable: true],
9
+ order_id: [:string, nullable: true], customer_return_id: [:string, nullable: true]
10
+
11
+ attributes :number, :reimbursement_status,
12
+ created_at: :iso8601, updated_at: :iso8601
13
+
14
+ attribute :total do |reimbursement|
15
+ reimbursement.total&.to_s
16
+ end
17
+
18
+ attribute :order_id do |reimbursement|
19
+ reimbursement.order&.prefixed_id
20
+ end
21
+
22
+ attribute :customer_return_id do |reimbursement|
23
+ reimbursement.customer_return&.prefixed_id
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class ReportSerializer < BaseSerializer
7
+ typelize type: [:string, nullable: true],
8
+ user_id: [:string, nullable: true],
9
+ currency: [:string, nullable: true],
10
+ date_from: [:string, nullable: true], date_to: [:string, nullable: true]
11
+
12
+ attributes :type, :currency,
13
+ created_at: :iso8601, updated_at: :iso8601
14
+
15
+ attribute :user_id do |report|
16
+ report.user&.prefixed_id
17
+ end
18
+
19
+ attribute :date_from do |report|
20
+ report.date_from&.iso8601
21
+ end
22
+
23
+ attribute :date_to do |report|
24
+ report.date_to&.iso8601
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class ReturnAuthorizationSerializer < BaseSerializer
7
+ typelize number: :string, state: :string,
8
+ order_id: [:string, nullable: true], stock_location_id: [:string, nullable: true],
9
+ return_authorization_reason_id: [:string, nullable: true]
10
+
11
+ attributes :number, created_at: :iso8601, updated_at: :iso8601
12
+
13
+ attribute :state do |return_authorization|
14
+ return_authorization.state.to_s
15
+ end
16
+
17
+ attribute :order_id do |return_authorization|
18
+ return_authorization.order&.prefixed_id
19
+ end
20
+
21
+ attribute :stock_location_id do |return_authorization|
22
+ return_authorization.stock_location&.prefixed_id
23
+ end
24
+
25
+ attribute :return_authorization_reason_id do |return_authorization|
26
+ return_authorization.reason&.prefixed_id
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class ReturnItemSerializer < BaseSerializer
7
+ typelize reception_status: [:string, nullable: true], acceptance_status: [:string, nullable: true],
8
+ pre_tax_amount: [:string, nullable: true],
9
+ included_tax_total: [:string, nullable: true], additional_tax_total: [:string, nullable: true],
10
+ inventory_unit_id: [:string, nullable: true],
11
+ return_authorization_id: [:string, nullable: true],
12
+ customer_return_id: [:string, nullable: true],
13
+ reimbursement_id: [:string, nullable: true],
14
+ exchange_variant_id: [:string, nullable: true]
15
+
16
+ attributes :reception_status, :acceptance_status,
17
+ created_at: :iso8601, updated_at: :iso8601
18
+
19
+ attribute :pre_tax_amount do |item|
20
+ item.pre_tax_amount&.to_s
21
+ end
22
+
23
+ attribute :included_tax_total do |item|
24
+ item.included_tax_total&.to_s
25
+ end
26
+
27
+ attribute :additional_tax_total do |item|
28
+ item.additional_tax_total&.to_s
29
+ end
30
+
31
+ attribute :inventory_unit_id do |item|
32
+ item.inventory_unit&.prefixed_id
33
+ end
34
+
35
+ attribute :return_authorization_id do |item|
36
+ item.return_authorization&.prefixed_id
37
+ end
38
+
39
+ attribute :customer_return_id do |item|
40
+ item.customer_return&.prefixed_id
41
+ end
42
+
43
+ attribute :reimbursement_id do |item|
44
+ item.reimbursement&.prefixed_id
45
+ end
46
+
47
+ attribute :exchange_variant_id do |item|
48
+ item.exchange_variant&.prefixed_id
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class ShipmentSerializer < BaseSerializer
5
+ typelize number: :string, state: :string, tracking: [:string, nullable: true],
6
+ tracking_url: [:string, nullable: true], shipped_at: [:string, nullable: true],
7
+ cost: :string, display_cost: :string
8
+
9
+ attributes :number, :state, :tracking, :tracking_url,
10
+ :cost, :display_cost,
11
+ shipped_at: :iso8601, created_at: :iso8601, updated_at: :iso8601
12
+
13
+ one :shipping_method, resource: Spree.api.shipping_method_serializer
14
+ one :stock_location, resource: Spree.api.stock_location_serializer
15
+ many :shipping_rates, resource: Spree.api.shipping_rate_serializer
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class ShippingMethodSerializer < BaseSerializer
5
+ typelize name: :string, code: [:string, nullable: true]
6
+
7
+ attributes :name, :code
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class ShippingRateSerializer < BaseSerializer
5
+ typelize name: :string, selected: :boolean, shipping_method_id: :string,
6
+ cost: :number, display_cost: :string
7
+
8
+ attribute :shipping_method_id do |shipping_rate|
9
+ shipping_rate.shipping_method&.prefixed_id
10
+ end
11
+
12
+ attributes :name, :selected
13
+
14
+ attribute :cost do |shipping_rate|
15
+ shipping_rate.cost.to_f
16
+ end
17
+
18
+ attribute :display_cost do |shipping_rate|
19
+ shipping_rate.display_cost.to_s
20
+ end
21
+
22
+ one :shipping_method, resource: Spree.api.shipping_method_serializer
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,14 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class StateSerializer
5
+ include Alba::Resource
6
+ include Typelizer::DSL
7
+
8
+ typelize abbr: :string, name: :string
9
+
10
+ attributes :abbr, :name
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class StockItemSerializer < BaseSerializer
7
+ typelize count_on_hand: :number, backorderable: :boolean,
8
+ stock_location_id: [:string, nullable: true], variant_id: [:string, nullable: true]
9
+
10
+ attributes :count_on_hand, :backorderable,
11
+ created_at: :iso8601, updated_at: :iso8601
12
+
13
+ attribute :stock_location_id do |stock_item|
14
+ stock_item.stock_location&.prefixed_id
15
+ end
16
+
17
+ attribute :variant_id do |stock_item|
18
+ stock_item.variant&.prefixed_id
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class StockLocationSerializer < BaseSerializer
5
+ typelize name: :string, address1: [:string, nullable: true], city: [:string, nullable: true],
6
+ zipcode: [:string, nullable: true], country_iso: [:string, nullable: true],
7
+ country_name: [:string, nullable: true], state_abbr: [:string, nullable: true],
8
+ state_text: [:string, nullable: true]
9
+
10
+ attribute :state_abbr do |stock_location|
11
+ stock_location.state&.abbr
12
+ end
13
+
14
+ attributes :name, :address1, :city, :zipcode, :country_iso, :country_name, :state_text
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class StockMovementSerializer < BaseSerializer
7
+ typelize quantity: :number, action: [:string, nullable: true],
8
+ originator_type: [:string, nullable: true], originator_id: [:string, nullable: true],
9
+ stock_item_id: [:string, nullable: true]
10
+
11
+ attributes :quantity, :action, :originator_type,
12
+ created_at: :iso8601, updated_at: :iso8601
13
+
14
+ attribute :originator_id do |movement|
15
+ movement.originator&.prefixed_id
16
+ end
17
+
18
+ attribute :stock_item_id do |movement|
19
+ movement.stock_item&.prefixed_id
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Api
5
+ module V3
6
+ class StockTransferSerializer < BaseSerializer
7
+ typelize number: [:string, nullable: true], type: [:string, nullable: true],
8
+ reference: [:string, nullable: true],
9
+ source_location_id: [:string, nullable: true],
10
+ destination_location_id: [:string, nullable: true]
11
+
12
+ attributes :number, :type, :reference,
13
+ created_at: :iso8601, updated_at: :iso8601
14
+
15
+ attribute :source_location_id do |transfer|
16
+ transfer.source_location&.prefixed_id
17
+ end
18
+
19
+ attribute :destination_location_id do |transfer|
20
+ transfer.destination_location&.prefixed_id
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class StoreCreditSerializer < BaseSerializer
5
+ typelize amount: :string, amount_used: :string, amount_remaining: :string,
6
+ display_amount: :string, display_amount_used: :string, display_amount_remaining: :string,
7
+ currency: :string
8
+
9
+ attribute :amount do |store_credit|
10
+ store_credit.amount.to_s
11
+ end
12
+
13
+ attribute :amount_used do |store_credit|
14
+ store_credit.amount_used.to_s
15
+ end
16
+
17
+ attribute :amount_remaining do |store_credit|
18
+ store_credit.amount_remaining.to_s
19
+ end
20
+
21
+ attribute :display_amount do |store_credit|
22
+ store_credit.display_amount.to_s
23
+ end
24
+
25
+ attribute :display_amount_used do |store_credit|
26
+ store_credit.display_amount_used.to_s
27
+ end
28
+
29
+ attribute :display_amount_remaining do |store_credit|
30
+ store_credit.display_amount_remaining.to_s
31
+ end
32
+
33
+ attributes :currency
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,38 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class StoreSerializer < BaseSerializer
5
+ typelize name: :string, url: :string, meta_description: [:string, nullable: true],
6
+ meta_keywords: [:string, nullable: true], seo_title: [:string, nullable: true],
7
+ code: :string,
8
+ facebook: [:string, nullable: true], twitter: [:string, nullable: true], instagram: [:string, nullable: true],
9
+ customer_support_email: [:string, nullable: true],
10
+ favicon_image_url: [:string, nullable: true],
11
+ logo_image_url: [:string, nullable: true], social_image_url: [:string, nullable: true]
12
+
13
+ attributes :name, :url, :meta_description, :meta_keywords, :seo_title,
14
+ :code, :facebook, :twitter,
15
+ :instagram, :customer_support_email,
16
+ created_at: :iso8601, updated_at: :iso8601
17
+
18
+ attribute :favicon_image_url do |store|
19
+ image_url_for(store.favicon_image)
20
+ end
21
+
22
+ attribute :logo_image_url do |store|
23
+ image_url_for(store.logo)
24
+ end
25
+
26
+ attribute :social_image_url do |store|
27
+ image_url_for(store.social_image)
28
+ end
29
+
30
+ many :payment_methods,
31
+ proc { |payment_methods, _params|
32
+ payment_methods.select { |pm| pm.available_on_front_end? && pm.active? }
33
+ },
34
+ resource: Spree.api.payment_method_serializer
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,78 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class TaxonSerializer < BaseSerializer
5
+ typelize name: :string, permalink: :string, position: :number, depth: :number,
6
+ meta_title: [:string, nullable: true], meta_description: [:string, nullable: true], meta_keywords: [:string, nullable: true],
7
+ parent_id: [:string, nullable: true], taxonomy_id: :string, children_count: :number,
8
+ description: :string, description_html: :string,
9
+ image_url: [:string, nullable: true], square_image_url: [:string, nullable: true],
10
+ is_root: :boolean, is_child: :boolean, is_leaf: :boolean
11
+
12
+ attributes :name, :permalink, :position, :depth,
13
+ :meta_title, :meta_description, :meta_keywords,
14
+ :children_count,
15
+ created_at: :iso8601, updated_at: :iso8601
16
+
17
+ attribute :parent_id do |taxon|
18
+ taxon.parent&.prefixed_id
19
+ end
20
+
21
+ attribute :taxonomy_id do |taxon|
22
+ taxon.taxonomy&.prefixed_id
23
+ end
24
+
25
+ attribute :description do |taxon|
26
+ taxon.description&.to_plain_text.to_s
27
+ end
28
+
29
+ attribute :description_html do |taxon|
30
+ taxon.description&.body&.to_s.to_s
31
+ end
32
+
33
+ attribute :image_url do |taxon|
34
+ image_url_for(taxon.image)
35
+ end
36
+
37
+ attribute :square_image_url do |taxon|
38
+ image_url_for(taxon.square_image)
39
+ end
40
+
41
+ attribute :is_root do |taxon|
42
+ taxon.root?
43
+ end
44
+
45
+ attribute :is_child do |taxon|
46
+ taxon.child?
47
+ end
48
+
49
+ attribute :is_leaf do |taxon|
50
+ taxon.leaf?
51
+ end
52
+
53
+ # Conditional associations
54
+ # Note: We pass empty includes to nested taxons to prevent infinite recursion
55
+ # (e.g., ancestors trying to load their own ancestors)
56
+ one :parent,
57
+ resource: Spree.api.taxon_serializer,
58
+ if: proc { params[:includes]&.include?('parent') },
59
+ params: { includes: [] }
60
+
61
+ many :children,
62
+ resource: Spree.api.taxon_serializer,
63
+ if: proc { params[:includes]&.include?('children') },
64
+ params: { includes: [] }
65
+
66
+ many :ancestors,
67
+ resource: Spree.api.taxon_serializer,
68
+ if: proc { params[:includes]&.include?('ancestors') },
69
+ params: { includes: [] }
70
+
71
+ many :public_metafields,
72
+ key: :metafields,
73
+ resource: Spree.api.metafield_serializer,
74
+ if: proc { params[:includes]&.include?('metafields') }
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ class TaxonomySerializer < BaseSerializer
5
+ typelize name: :string, position: :number, root_id: [:string, nullable: true]
6
+
7
+ attributes :name, :position,
8
+ created_at: :iso8601, updated_at: :iso8601
9
+
10
+ attribute :root_id do |taxonomy|
11
+ taxonomy.root&.prefixed_id
12
+ end
13
+
14
+ # Conditional associations
15
+ # Note: We pass empty includes to nested taxons to prevent infinite recursion
16
+ one :root,
17
+ resource: Spree.api.taxon_serializer,
18
+ if: proc { params[:includes]&.include?('root') },
19
+ params: { includes: [] }
20
+
21
+ many :taxons,
22
+ resource: Spree.api.taxon_serializer,
23
+ if: proc { params[:includes]&.include?('taxons') },
24
+ params: { includes: [] }
25
+
26
+ many :public_metafields,
27
+ key: :metafields,
28
+ resource: Spree.api.metafield_serializer,
29
+ if: proc { params[:includes]&.include?('metafields') }
30
+ end
31
+ end
32
+ end
33
+ end