spree_legacy_api_v2 1.0.0

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 (230) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +47 -0
  3. data/Rakefile +23 -0
  4. data/app/controllers/concerns/spree/api/v2/caching.rb +40 -0
  5. data/app/controllers/concerns/spree/api/v2/coupon_codes_helper.rb +29 -0
  6. data/app/controllers/concerns/spree/api/v2/number_resource.rb +11 -0
  7. data/app/controllers/concerns/spree/api/v2/platform/nested_set_reposition_concern.rb +37 -0
  8. data/app/controllers/concerns/spree/api/v2/platform/promotion_calculator_params.rb +17 -0
  9. data/app/controllers/concerns/spree/api/v2/platform/promotion_rule_params.rb +16 -0
  10. data/app/controllers/concerns/spree/api/v2/product_list_includes.rb +21 -0
  11. data/app/controllers/concerns/spree/api/v2/storefront/metadata_controller_concern.rb +18 -0
  12. data/app/controllers/concerns/spree/api/v2/storefront/order_concern.rb +49 -0
  13. data/app/controllers/spree/admin/oauth_applications_controller.rb +23 -0
  14. data/app/controllers/spree/api/v2/base_controller.rb +233 -0
  15. data/app/controllers/spree/api/v2/data_feeds/google_controller.rb +24 -0
  16. data/app/controllers/spree/api/v2/platform/addresses_controller.rb +23 -0
  17. data/app/controllers/spree/api/v2/platform/adjustments_controller.rb +23 -0
  18. data/app/controllers/spree/api/v2/platform/classifications_controller.rb +26 -0
  19. data/app/controllers/spree/api/v2/platform/countries_controller.rb +23 -0
  20. data/app/controllers/spree/api/v2/platform/data_feeds_controller.rb +19 -0
  21. data/app/controllers/spree/api/v2/platform/digital_links_controller.rb +29 -0
  22. data/app/controllers/spree/api/v2/platform/digitals_controller.rb +23 -0
  23. data/app/controllers/spree/api/v2/platform/gift_cards_controller.rb +23 -0
  24. data/app/controllers/spree/api/v2/platform/line_items_controller.rb +63 -0
  25. data/app/controllers/spree/api/v2/platform/option_types_controller.rb +19 -0
  26. data/app/controllers/spree/api/v2/platform/option_values_controller.rb +23 -0
  27. data/app/controllers/spree/api/v2/platform/orders_controller.rb +167 -0
  28. data/app/controllers/spree/api/v2/platform/payment_methods_controller.rb +31 -0
  29. data/app/controllers/spree/api/v2/platform/payments_controller.rb +21 -0
  30. data/app/controllers/spree/api/v2/platform/products_controller.rb +41 -0
  31. data/app/controllers/spree/api/v2/platform/promotion_actions_controller.rb +34 -0
  32. data/app/controllers/spree/api/v2/platform/promotion_categories_controller.rb +23 -0
  33. data/app/controllers/spree/api/v2/platform/promotion_rules_controller.rb +29 -0
  34. data/app/controllers/spree/api/v2/platform/promotions_controller.rb +35 -0
  35. data/app/controllers/spree/api/v2/platform/resource_controller.rb +154 -0
  36. data/app/controllers/spree/api/v2/platform/roles_controller.rb +19 -0
  37. data/app/controllers/spree/api/v2/platform/shipments_controller.rb +147 -0
  38. data/app/controllers/spree/api/v2/platform/shipping_categories_controller.rb +19 -0
  39. data/app/controllers/spree/api/v2/platform/shipping_methods_controller.rb +28 -0
  40. data/app/controllers/spree/api/v2/platform/states_controller.rb +23 -0
  41. data/app/controllers/spree/api/v2/platform/stock_items_controller.rb +23 -0
  42. data/app/controllers/spree/api/v2/platform/stock_locations_controller.rb +23 -0
  43. data/app/controllers/spree/api/v2/platform/store_credit_categories_controller.rb +19 -0
  44. data/app/controllers/spree/api/v2/platform/store_credit_types_controller.rb +19 -0
  45. data/app/controllers/spree/api/v2/platform/store_credits_controller.rb +23 -0
  46. data/app/controllers/spree/api/v2/platform/tax_categories_controller.rb +23 -0
  47. data/app/controllers/spree/api/v2/platform/tax_rates_controller.rb +27 -0
  48. data/app/controllers/spree/api/v2/platform/taxonomies_controller.rb +23 -0
  49. data/app/controllers/spree/api/v2/platform/taxons_controller.rb +59 -0
  50. data/app/controllers/spree/api/v2/platform/users_controller.rb +37 -0
  51. data/app/controllers/spree/api/v2/platform/variants_controller.rb +23 -0
  52. data/app/controllers/spree/api/v2/platform/wished_items_controller.rb +23 -0
  53. data/app/controllers/spree/api/v2/platform/wishlists_controller.rb +23 -0
  54. data/app/controllers/spree/api/v2/platform/zones_controller.rb +23 -0
  55. data/app/controllers/spree/api/v2/resource_controller.rb +79 -0
  56. data/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb +77 -0
  57. data/app/controllers/spree/api/v2/storefront/account/credit_cards_controller.rb +52 -0
  58. data/app/controllers/spree/api/v2/storefront/account/orders_controller.rb +50 -0
  59. data/app/controllers/spree/api/v2/storefront/account_controller.rb +52 -0
  60. data/app/controllers/spree/api/v2/storefront/cart_controller.rb +246 -0
  61. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +183 -0
  62. data/app/controllers/spree/api/v2/storefront/countries_controller.rb +57 -0
  63. data/app/controllers/spree/api/v2/storefront/digitals_controller.rb +58 -0
  64. data/app/controllers/spree/api/v2/storefront/order_status_controller.rb +34 -0
  65. data/app/controllers/spree/api/v2/storefront/policies_controller.rb +31 -0
  66. data/app/controllers/spree/api/v2/storefront/post_categories_controller.rb +35 -0
  67. data/app/controllers/spree/api/v2/storefront/posts_controller.rb +51 -0
  68. data/app/controllers/spree/api/v2/storefront/products_controller.rb +66 -0
  69. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +27 -0
  70. data/app/controllers/spree/api/v2/storefront/taxons_controller.rb +51 -0
  71. data/app/controllers/spree/api/v2/storefront/variants_controller.rb +41 -0
  72. data/app/controllers/spree/api/v2/storefront/wishlists_controller.rb +214 -0
  73. data/app/helpers/spree/api/v2/collection_options_helpers.rb +46 -0
  74. data/app/helpers/spree/api/v2/display_money_helper.rb +63 -0
  75. data/app/helpers/spree/api/v2/store_media_serializer_images_concern.rb +30 -0
  76. data/app/models/concerns/spree/user_api_authentication.rb +19 -0
  77. data/app/models/concerns/spree/user_api_methods.rb +7 -0
  78. data/app/models/spree/oauth_access_grant.rb +7 -0
  79. data/app/models/spree/oauth_access_token.rb +7 -0
  80. data/app/models/spree/oauth_application.rb +22 -0
  81. data/app/paginators/spree/api/paginate.rb +68 -0
  82. data/app/presenters/spree/api/products/filters_presenter.rb +39 -0
  83. data/app/serializers/concerns/spree/api/v2/image_transformation_concern.rb +15 -0
  84. data/app/serializers/concerns/spree/api/v2/public_metafields_concern.rb +15 -0
  85. data/app/serializers/concerns/spree/api/v2/resource_serializer_concern.rb +42 -0
  86. data/app/serializers/concerns/spree/api/v2/taxon_image_transformation_concern.rb +15 -0
  87. data/app/serializers/spree/api/v2/base_serializer.rb +43 -0
  88. data/app/serializers/spree/api/v2/platform/address_serializer.rb +15 -0
  89. data/app/serializers/spree/api/v2/platform/adjustment_serializer.rb +20 -0
  90. data/app/serializers/spree/api/v2/platform/admin_user_serializer.rb +15 -0
  91. data/app/serializers/spree/api/v2/platform/asset_serializer.rb +13 -0
  92. data/app/serializers/spree/api/v2/platform/base_serializer.rb +10 -0
  93. data/app/serializers/spree/api/v2/platform/calculator_serializer.rb +17 -0
  94. data/app/serializers/spree/api/v2/platform/classification_serializer.rb +14 -0
  95. data/app/serializers/spree/api/v2/platform/country_serializer.rb +13 -0
  96. data/app/serializers/spree/api/v2/platform/credit_card_serializer.rb +14 -0
  97. data/app/serializers/spree/api/v2/platform/customer_return_serializer.rb +17 -0
  98. data/app/serializers/spree/api/v2/platform/data_feed_serializer.rb +13 -0
  99. data/app/serializers/spree/api/v2/platform/digital_link_serializer.rb +16 -0
  100. data/app/serializers/spree/api/v2/platform/digital_serializer.rb +29 -0
  101. data/app/serializers/spree/api/v2/platform/gift_card_serializer.rb +17 -0
  102. data/app/serializers/spree/api/v2/platform/image_serializer.rb +17 -0
  103. data/app/serializers/spree/api/v2/platform/inventory_unit_serializer.rb +19 -0
  104. data/app/serializers/spree/api/v2/platform/line_item_serializer.rb +19 -0
  105. data/app/serializers/spree/api/v2/platform/log_entry_serializer.rb +13 -0
  106. data/app/serializers/spree/api/v2/platform/metafield_serializer.rb +21 -0
  107. data/app/serializers/spree/api/v2/platform/option_type_serializer.rb +13 -0
  108. data/app/serializers/spree/api/v2/platform/option_value_serializer.rb +13 -0
  109. data/app/serializers/spree/api/v2/platform/order_promotion_serializer.rb +14 -0
  110. data/app/serializers/spree/api/v2/platform/order_serializer.rb +31 -0
  111. data/app/serializers/spree/api/v2/platform/payment_capture_event_serializer.rb +13 -0
  112. data/app/serializers/spree/api/v2/platform/payment_method_serializer.rb +18 -0
  113. data/app/serializers/spree/api/v2/platform/payment_serializer.rb +22 -0
  114. data/app/serializers/spree/api/v2/platform/payment_source_serializer.rb +12 -0
  115. data/app/serializers/spree/api/v2/platform/price_serializer.rb +19 -0
  116. data/app/serializers/spree/api/v2/platform/product_property_serializer.rb +11 -0
  117. data/app/serializers/spree/api/v2/platform/product_serializer.rb +90 -0
  118. data/app/serializers/spree/api/v2/platform/promotion_action_line_item_serializer.rb +14 -0
  119. data/app/serializers/spree/api/v2/platform/promotion_action_serializer.rb +19 -0
  120. data/app/serializers/spree/api/v2/platform/promotion_category_serializer.rb +13 -0
  121. data/app/serializers/spree/api/v2/platform/promotion_rule_serializer.rb +21 -0
  122. data/app/serializers/spree/api/v2/platform/promotion_serializer.rb +17 -0
  123. data/app/serializers/spree/api/v2/platform/property_serializer.rb +11 -0
  124. data/app/serializers/spree/api/v2/platform/prototype_serializer.rb +15 -0
  125. data/app/serializers/spree/api/v2/platform/refund_reason_serializer.rb +11 -0
  126. data/app/serializers/spree/api/v2/platform/refund_serializer.rb +17 -0
  127. data/app/serializers/spree/api/v2/platform/reimbursement_credit_serializer.rb +10 -0
  128. data/app/serializers/spree/api/v2/platform/reimbursement_serializer.rb +19 -0
  129. data/app/serializers/spree/api/v2/platform/reimbursement_type_serializer.rb +11 -0
  130. data/app/serializers/spree/api/v2/platform/return_authorization_reason_serializer.rb +11 -0
  131. data/app/serializers/spree/api/v2/platform/return_authorization_serializer.rb +17 -0
  132. data/app/serializers/spree/api/v2/platform/return_item_serializer.rb +16 -0
  133. data/app/serializers/spree/api/v2/platform/role_serializer.rb +11 -0
  134. data/app/serializers/spree/api/v2/platform/shipment_serializer.rb +22 -0
  135. data/app/serializers/spree/api/v2/platform/shipping_category_serializer.rb +11 -0
  136. data/app/serializers/spree/api/v2/platform/shipping_method_serializer.rb +16 -0
  137. data/app/serializers/spree/api/v2/platform/shipping_rate_serializer.rb +15 -0
  138. data/app/serializers/spree/api/v2/platform/state_change_serializer.rb +13 -0
  139. data/app/serializers/spree/api/v2/platform/state_serializer.rb +13 -0
  140. data/app/serializers/spree/api/v2/platform/stock_item_serializer.rb +18 -0
  141. data/app/serializers/spree/api/v2/platform/stock_location_serializer.rb +14 -0
  142. data/app/serializers/spree/api/v2/platform/stock_movement_serializer.rb +11 -0
  143. data/app/serializers/spree/api/v2/platform/stock_transfer_serializer.rb +15 -0
  144. data/app/serializers/spree/api/v2/platform/store_credit_category_serializer.rb +12 -0
  145. data/app/serializers/spree/api/v2/platform/store_credit_event_serializer.rb +14 -0
  146. data/app/serializers/spree/api/v2/platform/store_credit_serializer.rb +18 -0
  147. data/app/serializers/spree/api/v2/platform/store_credit_type_serializer.rb +12 -0
  148. data/app/serializers/spree/api/v2/platform/store_serializer.rb +14 -0
  149. data/app/serializers/spree/api/v2/platform/tax_category_serializer.rb +13 -0
  150. data/app/serializers/spree/api/v2/platform/tax_rate_serializer.rb +14 -0
  151. data/app/serializers/spree/api/v2/platform/taxon_image_serializer.rb +15 -0
  152. data/app/serializers/spree/api/v2/platform/taxon_serializer.rb +47 -0
  153. data/app/serializers/spree/api/v2/platform/taxonomy_serializer.rb +14 -0
  154. data/app/serializers/spree/api/v2/platform/user_serializer.rb +37 -0
  155. data/app/serializers/spree/api/v2/platform/variant_serializer.rb +66 -0
  156. data/app/serializers/spree/api/v2/platform/wished_item_serializer.rb +29 -0
  157. data/app/serializers/spree/api/v2/platform/wishlist_serializer.rb +19 -0
  158. data/app/serializers/spree/api/v2/platform/zone_member_serializer.rb +13 -0
  159. data/app/serializers/spree/api/v2/platform/zone_serializer.rb +13 -0
  160. data/app/serializers/spree/v2/storefront/address_serializer.rb +22 -0
  161. data/app/serializers/spree/v2/storefront/base_serializer.rb +10 -0
  162. data/app/serializers/spree/v2/storefront/cart_serializer.rb +67 -0
  163. data/app/serializers/spree/v2/storefront/country_serializer.rb +24 -0
  164. data/app/serializers/spree/v2/storefront/credit_card_serializer.rb +15 -0
  165. data/app/serializers/spree/v2/storefront/digital_link_serializer.rb +11 -0
  166. data/app/serializers/spree/v2/storefront/estimated_shipping_rate_serializer.rb +35 -0
  167. data/app/serializers/spree/v2/storefront/gift_card_serializer.rb +16 -0
  168. data/app/serializers/spree/v2/storefront/image_serializer.rb +13 -0
  169. data/app/serializers/spree/v2/storefront/line_item_serializer.rb +23 -0
  170. data/app/serializers/spree/v2/storefront/metafield_serializer.rb +19 -0
  171. data/app/serializers/spree/v2/storefront/option_type_serializer.rb +15 -0
  172. data/app/serializers/spree/v2/storefront/option_value_serializer.rb +13 -0
  173. data/app/serializers/spree/v2/storefront/order_promotion_serializer.rb +14 -0
  174. data/app/serializers/spree/v2/storefront/order_serializer.rb +11 -0
  175. data/app/serializers/spree/v2/storefront/payment_method_serializer.rb +17 -0
  176. data/app/serializers/spree/v2/storefront/payment_serializer.rb +20 -0
  177. data/app/serializers/spree/v2/storefront/payment_source_serializer.rb +12 -0
  178. data/app/serializers/spree/v2/storefront/policy_serializer.rb +19 -0
  179. data/app/serializers/spree/v2/storefront/post_category_serializer.rb +23 -0
  180. data/app/serializers/spree/v2/storefront/post_serializer.rb +51 -0
  181. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +19 -0
  182. data/app/serializers/spree/v2/storefront/product_serializer.rb +92 -0
  183. data/app/serializers/spree/v2/storefront/shipment_serializer.rb +26 -0
  184. data/app/serializers/spree/v2/storefront/shipping_category_serializer.rb +10 -0
  185. data/app/serializers/spree/v2/storefront/shipping_method_serializer.rb +12 -0
  186. data/app/serializers/spree/v2/storefront/shipping_rate_serializer.rb +26 -0
  187. data/app/serializers/spree/v2/storefront/state_serializer.rb +11 -0
  188. data/app/serializers/spree/v2/storefront/stock_location_serializer.rb +11 -0
  189. data/app/serializers/spree/v2/storefront/store_credit_category_serializer.rb +11 -0
  190. data/app/serializers/spree/v2/storefront/store_credit_event_serializer.rb +15 -0
  191. data/app/serializers/spree/v2/storefront/store_credit_serializer.rb +19 -0
  192. data/app/serializers/spree/v2/storefront/store_credit_type_serializer.rb +11 -0
  193. data/app/serializers/spree/v2/storefront/store_serializer.rb +18 -0
  194. data/app/serializers/spree/v2/storefront/taxon_image_serializer.rb +13 -0
  195. data/app/serializers/spree/v2/storefront/taxon_serializer.rb +55 -0
  196. data/app/serializers/spree/v2/storefront/taxonomy_serializer.rb +13 -0
  197. data/app/serializers/spree/v2/storefront/user_serializer.rb +33 -0
  198. data/app/serializers/spree/v2/storefront/variant_serializer.rb +58 -0
  199. data/app/serializers/spree/v2/storefront/wished_item_serializer.rb +29 -0
  200. data/app/serializers/spree/v2/storefront/wishlist_serializer.rb +17 -0
  201. data/app/views/spree/admin/oauth_applications/_form.html.erb +6 -0
  202. data/app/views/spree/admin/oauth_applications/_table_header.html.erb +7 -0
  203. data/app/views/spree/admin/oauth_applications/_table_row.html.erb +34 -0
  204. data/app/views/spree/admin/oauth_applications/create.turbo_stream.erb +31 -0
  205. data/app/views/spree/admin/oauth_applications/edit.html.erb +1 -0
  206. data/app/views/spree/admin/oauth_applications/index.html.erb +21 -0
  207. data/app/views/spree/admin/oauth_applications/new.html.erb +1 -0
  208. data/config/initializers/doorkeeper.rb +50 -0
  209. data/config/initializers/json_api_mime_types.rb +8 -0
  210. data/config/initializers/user_class_extensions.rb +7 -0
  211. data/config/routes.rb +219 -0
  212. data/db/migrate/20100107141738_add_api_key_to_spree_users.rb +7 -0
  213. data/db/migrate/20120411123334_resize_api_key_field.rb +7 -0
  214. data/db/migrate/20120530054546_rename_api_key_to_spree_api_key.rb +7 -0
  215. data/db/migrate/20131017162334_add_index_to_user_spree_api_key.rb +7 -0
  216. data/db/migrate/20180320110726_create_doorkeeper_tables.rb +69 -0
  217. data/db/migrate/20210727102516_change_integer_id_columns_type.rb +9 -0
  218. data/db/migrate/20210919183228_enable_polymorphic_resource_owner.rb +21 -0
  219. data/lib/generators/spree_legacy_api_v2/install/install_generator.rb +23 -0
  220. data/lib/spree_legacy_api_v2/engine.rb +77 -0
  221. data/lib/spree_legacy_api_v2/testing_support/factories/oauth_application_factory.rb +7 -0
  222. data/lib/spree_legacy_api_v2/testing_support/factories.rb +1 -0
  223. data/lib/spree_legacy_api_v2/testing_support/serializers.rb +15 -0
  224. data/lib/spree_legacy_api_v2/testing_support/v2/base.rb +13 -0
  225. data/lib/spree_legacy_api_v2/testing_support/v2/current_order.rb +116 -0
  226. data/lib/spree_legacy_api_v2/testing_support/v2/platform_contexts.rb +272 -0
  227. data/lib/spree_legacy_api_v2/testing_support/v2/serializers_params.rb +16 -0
  228. data/lib/spree_legacy_api_v2/version.rb +9 -0
  229. data/lib/spree_legacy_api_v2.rb +7 -0
  230. metadata +359 -0
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class VariantsController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::Variant
10
+ end
11
+
12
+ def spree_permitted_attributes
13
+ super + [:option_value_ids, :price, :currency]
14
+ end
15
+
16
+ def resource_serializer
17
+ Spree.api.platform_variant_serializer
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class WishedItemsController < ResourceController
6
+ private
7
+
8
+ def scope_includes
9
+ [:variant]
10
+ end
11
+
12
+ def model_class
13
+ Spree::WishedItem
14
+ end
15
+
16
+ def resource_serializer
17
+ Spree.api.platform_wished_item_serializer
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class WishlistsController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::Wishlist
10
+ end
11
+
12
+ def scope_includes
13
+ [:wished_items]
14
+ end
15
+
16
+ def resource_serializer
17
+ Spree.api.platform_wishlist_serializer
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class ZonesController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Spree::Zone
10
+ end
11
+
12
+ def scope_includes
13
+ [:zone_members]
14
+ end
15
+
16
+ def resource_serializer
17
+ Spree.api.platform_zone_serializer
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,79 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ class ResourceController < ::Spree::Api::V2::BaseController
5
+ include Spree::Api::V2::CollectionOptionsHelpers
6
+ include Spree::Api::V2::Caching
7
+
8
+ def index
9
+ render_serialized_payload do
10
+ Rails.cache.fetch(collection_cache_key(paginated_collection), collection_cache_opts) do
11
+ serialize_collection(paginated_collection)
12
+ end
13
+ end
14
+ end
15
+
16
+ def show
17
+ render_serialized_payload { serialize_resource(resource) }
18
+ end
19
+
20
+ protected
21
+
22
+ def sorted_collection
23
+ @sorted_collection ||= collection_sorter.new(collection, params, allowed_sort_attributes).call
24
+ end
25
+
26
+ def allowed_sort_attributes
27
+ default_sort_attributes
28
+ end
29
+
30
+ def default_sort_attributes
31
+ [:id, :name, :slug, :number, :position, :updated_at, :created_at, :deleted_at]
32
+ end
33
+
34
+ def scope(skip_cancancan: false)
35
+ base_scope = model_class.for_store(current_store)
36
+ base_scope = base_scope.accessible_by(current_ability, :show) unless skip_cancancan
37
+ base_scope = base_scope.includes(scope_includes) if scope_includes.any? && action_name == 'index'
38
+ model_class.include?(TranslatableResource) ? base_scope.i18n : base_scope
39
+ end
40
+
41
+ def scope_includes
42
+ []
43
+ end
44
+
45
+ def resource
46
+ @resource ||= if defined?(resource_finder)
47
+ resource_finder.new(scope: scope, params: finder_params).execute
48
+ else
49
+ scope.find(params[:id])
50
+ end
51
+ end
52
+
53
+ def collection
54
+ @collection ||= begin
55
+ result = if defined?(collection_finder)
56
+ collection_finder.new(scope: scope, params: finder_params).execute
57
+ else
58
+ scope
59
+ end
60
+ result.preload_associations_lazily
61
+ end
62
+ end
63
+
64
+ def finder_params
65
+ params.merge(
66
+ store: current_store,
67
+ locale: current_locale,
68
+ currency: current_currency,
69
+ user: spree_current_user
70
+ )
71
+ end
72
+
73
+ def collection_sorter
74
+ Spree.api.storefront_collection_sorter
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,77 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ module Account
6
+ class AddressesController < ::Spree::Api::V2::ResourceController
7
+ include Spree::BaseHelper
8
+
9
+ before_action :require_spree_current_user
10
+
11
+ def create
12
+ spree_authorize! :create, model_class
13
+
14
+ result = create_service.call(user: spree_current_user, address_params: address_params)
15
+ render_result(result)
16
+ end
17
+
18
+ def update
19
+ spree_authorize! :update, resource
20
+
21
+ result = update_service.call(address: resource, address_params: address_params)
22
+ render_result(result)
23
+ end
24
+
25
+ def destroy
26
+ spree_authorize! :destroy, resource
27
+
28
+ if resource.destroy
29
+ head 204
30
+ else
31
+ render_error_payload(resource.errors)
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def collection
38
+ collection_finder.new(scope: scope, params: finder_params).execute
39
+ end
40
+
41
+ def scope
42
+ super.where(user: spree_current_user, country: available_countries).not_deleted
43
+ end
44
+
45
+ def model_class
46
+ Spree::Address
47
+ end
48
+
49
+ def collection_finder
50
+ Spree.api.storefront_address_finder
51
+ end
52
+
53
+ def collection_serializer
54
+ Spree.api.storefront_address_serializer
55
+ end
56
+
57
+ def resource_serializer
58
+ Spree.api.storefront_address_serializer
59
+ end
60
+
61
+ def create_service
62
+ Spree.api.storefront_address_create_service
63
+ end
64
+
65
+ def update_service
66
+ Spree.api.storefront_address_update_service
67
+ end
68
+
69
+ def address_params
70
+ params.require(:address).permit(permitted_address_attributes)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,52 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ module Account
6
+ class CreditCardsController < ::Spree::Api::V2::ResourceController
7
+ before_action :require_spree_current_user
8
+
9
+ def destroy
10
+ spree_authorize! :destroy, resource, resource
11
+
12
+ destroy_service.call(card: resource)
13
+ end
14
+
15
+ private
16
+
17
+ def resource
18
+ params[:id].eql?('default') ? scope.default.first! : scope.find(params[:id])
19
+ end
20
+
21
+ def model_class
22
+ Spree::CreditCard
23
+ end
24
+
25
+ def scope
26
+ super.not_expired.not_removed.where(
27
+ user: spree_current_user,
28
+ payment_method: current_store.payment_methods.available_on_front_end
29
+ )
30
+ end
31
+
32
+ def collection_serializer
33
+ Spree.api.storefront_credit_card_serializer
34
+ end
35
+
36
+ def collection_finder
37
+ Spree.api.storefront_credit_card_finder
38
+ end
39
+
40
+ def resource_serializer
41
+ Spree.api.storefront_credit_card_serializer
42
+ end
43
+
44
+ def destroy_service
45
+ Spree.api.storefront_credit_cards_destroy_service
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,50 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ module Account
6
+ class OrdersController < ::Spree::Api::V2::ResourceController
7
+ before_action :require_spree_current_user
8
+
9
+ private
10
+
11
+ def collection
12
+ collection_finder.new(user: spree_current_user, store: current_store).execute
13
+ end
14
+
15
+ def resource
16
+ resource = resource_finder.new(user: spree_current_user, number: params[:id], store: current_store).execute.take
17
+ raise ActiveRecord::RecordNotFound if resource.nil?
18
+
19
+ resource
20
+ end
21
+
22
+ def allowed_sort_attributes
23
+ super << :completed_at
24
+ end
25
+
26
+ def collection_serializer
27
+ Spree.api.storefront_order_serializer
28
+ end
29
+
30
+ def resource_serializer
31
+ Spree.api.storefront_order_serializer
32
+ end
33
+
34
+ def collection_finder
35
+ Spree.api.storefront_completed_order_finder
36
+ end
37
+
38
+ def resource_finder
39
+ Spree.api.storefront_completed_order_finder
40
+ end
41
+
42
+ def model_class
43
+ Spree::Order
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,52 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class AccountController < ::Spree::Api::V2::ResourceController
6
+ before_action :require_spree_current_user, except: :create
7
+
8
+ def create
9
+ result = create_service.call(user_params: user_create_params)
10
+ render_result(result)
11
+ end
12
+
13
+ def update
14
+ spree_authorize! :update, spree_current_user
15
+ result = update_service.call(user: spree_current_user, user_params: user_update_params)
16
+ render_result(result)
17
+ end
18
+
19
+ private
20
+
21
+ def resource
22
+ spree_current_user
23
+ end
24
+
25
+ def resource_serializer
26
+ Spree.api.storefront_user_serializer
27
+ end
28
+
29
+ def model_class
30
+ Spree.user_class
31
+ end
32
+
33
+ def create_service
34
+ Spree.api.storefront_account_create_service
35
+ end
36
+
37
+ def update_service
38
+ Spree.api.storefront_account_update_service
39
+ end
40
+
41
+ def user_create_params
42
+ user_update_params.except(:bill_address_id, :ship_address_id)
43
+ end
44
+
45
+ def user_update_params
46
+ params.require(:user).permit(permitted_user_attributes)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,246 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class CartController < ::Spree::Api::V2::BaseController
6
+ include OrderConcern
7
+ include CouponCodesHelper
8
+ include Spree::Api::V2::Storefront::MetadataControllerConcern
9
+
10
+ before_action :ensure_valid_metadata, only: %i[create add_item]
11
+ before_action :ensure_order, except: %i[create associate]
12
+ before_action :load_variant, only: :add_item
13
+ before_action :require_spree_current_user, only: :associate
14
+
15
+ def create
16
+ spree_authorize! :create, Spree::Order
17
+
18
+ create_cart_params = {
19
+ user: spree_current_user,
20
+ store: current_store,
21
+ currency: current_currency,
22
+ public_metadata: add_item_params[:public_metadata],
23
+ private_metadata: add_item_params[:private_metadata],
24
+ }
25
+
26
+ order = spree_current_order if spree_current_order.present?
27
+ order ||= create_service.call(create_cart_params).value
28
+
29
+ render_serialized_payload(201) { serialize_resource(order) }
30
+ end
31
+
32
+ def add_item
33
+ spree_authorize! :update, spree_current_order, order_token
34
+ spree_authorize! :show, @variant
35
+
36
+ result = add_item_service.call(
37
+ order: spree_current_order,
38
+ variant: @variant,
39
+ quantity: add_item_params[:quantity],
40
+ public_metadata: add_item_params[:public_metadata],
41
+ private_metadata: add_item_params[:private_metadata],
42
+ options: add_item_params[:options]
43
+ )
44
+
45
+ render_order(result)
46
+ end
47
+
48
+ def remove_line_item
49
+ spree_authorize! :update, spree_current_order, order_token
50
+
51
+ remove_line_item_service.call(
52
+ order: spree_current_order,
53
+ line_item: line_item
54
+ )
55
+
56
+ render_serialized_payload { serialized_current_order }
57
+ end
58
+
59
+ def empty
60
+ spree_authorize! :update, spree_current_order, order_token
61
+
62
+ result = empty_cart_service.call(order: spree_current_order)
63
+
64
+ if result.success?
65
+ render_serialized_payload { serialized_current_order }
66
+ else
67
+ render_error_payload(result.error)
68
+ end
69
+ end
70
+
71
+ def destroy
72
+ spree_authorize! :update, spree_current_order, order_token
73
+
74
+ result = destroy_cart_service.call(order: spree_current_order)
75
+
76
+ if result.success?
77
+ head 204
78
+ else
79
+ render_error_payload(result.error)
80
+ end
81
+ end
82
+
83
+ def set_quantity
84
+ return render_error_item_quantity unless params[:quantity].to_i > 0
85
+
86
+ spree_authorize! :update, spree_current_order, order_token
87
+
88
+ result = set_item_quantity_service.call(order: spree_current_order, line_item: line_item, quantity: params[:quantity])
89
+
90
+ render_order(result)
91
+ end
92
+
93
+ def show
94
+ spree_authorize! :show, spree_current_order, order_token
95
+
96
+ render_serialized_payload { serialized_current_order }
97
+ end
98
+
99
+ def apply_coupon_code
100
+ spree_authorize! :update, spree_current_order, order_token
101
+
102
+ spree_current_order.coupon_code = params[:coupon_code]
103
+ result = coupon_handler.new(spree_current_order).apply
104
+
105
+ if result.error.blank?
106
+ spree_current_order.reload
107
+ render_serialized_payload { serialized_current_order }
108
+ else
109
+ render_error_payload(result.error)
110
+ end
111
+ end
112
+
113
+ def remove_coupon_code
114
+ spree_authorize! :update, spree_current_order, order_token
115
+
116
+ coupon_codes = select_coupon_codes
117
+
118
+ return render_error_payload(I18n.t('spree.api.v2.cart.no_coupon_code')) if coupon_codes.empty?
119
+
120
+ result_errors = coupon_codes.count > 1 ? select_errors(coupon_codes) : select_error(coupon_codes)
121
+
122
+ if result_errors.blank?
123
+ spree_current_order.reload
124
+ render_serialized_payload { serialized_current_order }
125
+ else
126
+ render_error_payload(result_errors)
127
+ end
128
+ end
129
+
130
+ def estimate_shipping_rates
131
+ spree_authorize! :show, spree_current_order, order_token
132
+
133
+ result = estimate_shipping_rates_service.call(order: spree_current_order, country_iso: params[:country_iso])
134
+
135
+ if result.error.blank?
136
+ render_serialized_payload { serialize_estimated_shipping_rates(result.value) }
137
+ else
138
+ render_error_payload(result.error)
139
+ end
140
+ end
141
+
142
+ def associate
143
+ guest_order_token = params[:guest_order_token]
144
+ guest_order = ::Spree.api.storefront_current_order_finder.new.execute(
145
+ store: current_store,
146
+ user: nil,
147
+ token: guest_order_token,
148
+ currency: current_currency
149
+ )
150
+
151
+ spree_authorize! :update, guest_order, guest_order_token
152
+
153
+ result = associate_service.call(guest_order: guest_order, user: spree_current_user)
154
+
155
+ if result.success?
156
+ render_serialized_payload { serialize_resource(guest_order) }
157
+ else
158
+ render_error_payload(result.error)
159
+ end
160
+ end
161
+
162
+ def change_currency
163
+ spree_authorize! :update, spree_current_order, order_token
164
+
165
+ result = change_currency_service.call(order: spree_current_order, new_currency: params[:new_currency])
166
+
167
+ render_order(result)
168
+ end
169
+
170
+ private
171
+
172
+ def resource_serializer
173
+ Spree.api.storefront_cart_serializer
174
+ end
175
+
176
+ def create_service
177
+ Spree.api.storefront_cart_create_service
178
+ end
179
+
180
+ def add_item_service
181
+ Spree.api.storefront_cart_add_item_service
182
+ end
183
+
184
+ def empty_cart_service
185
+ Spree.api.storefront_cart_empty_service
186
+ end
187
+
188
+ def destroy_cart_service
189
+ Spree.api.storefront_cart_destroy_service
190
+ end
191
+
192
+ def set_item_quantity_service
193
+ Spree.api.storefront_cart_set_item_quantity_service
194
+ end
195
+
196
+ def remove_line_item_service
197
+ Spree.api.storefront_cart_remove_line_item_service
198
+ end
199
+
200
+ def coupon_handler
201
+ Spree.api.storefront_coupon_handler
202
+ end
203
+
204
+ def estimate_shipping_rates_service
205
+ Spree.api.storefront_cart_estimate_shipping_rates_service
206
+ end
207
+
208
+ def associate_service
209
+ Spree.api.storefront_cart_associate_service
210
+ end
211
+
212
+ def change_currency_service
213
+ Spree.api.storefront_cart_change_currency_service
214
+ end
215
+
216
+ def line_item
217
+ @line_item ||= spree_current_order.line_items.find(params[:line_item_id])
218
+ end
219
+
220
+ def load_variant
221
+ @variant = current_store.variants.find(add_item_params[:variant_id])
222
+ end
223
+
224
+ def render_error_item_quantity
225
+ render json: { error: I18n.t(:wrong_quantity, scope: 'spree.api.v2.cart') }, status: 422
226
+ end
227
+
228
+ def estimate_shipping_rates_serializer
229
+ Spree.api.storefront_estimated_shipment_serializer
230
+ end
231
+
232
+ def serialize_estimated_shipping_rates(shipping_rates)
233
+ estimate_shipping_rates_serializer.new(
234
+ shipping_rates,
235
+ params: serializer_params
236
+ ).serializable_hash
237
+ end
238
+
239
+ def add_item_params
240
+ params.permit(:quantity, :variant_id, public_metadata: {}, private_metadata: {}, options: {})
241
+ end
242
+ end
243
+ end
244
+ end
245
+ end
246
+ end