harpiya_api 4.3.0.alpha

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 (249) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +5 -0
  4. data/LICENSE +26 -0
  5. data/Rakefile +29 -0
  6. data/app/assets/javascripts/harpiya/api/main.js +36 -0
  7. data/app/assets/javascripts/harpiya/api/storefront/cart.js +49 -0
  8. data/app/controllers/concerns/harpiya/api/v2/storefront/order_concern.rb +52 -0
  9. data/app/controllers/harpiya/api/base_controller.rb +171 -0
  10. data/app/controllers/harpiya/api/errors_controller.rb +9 -0
  11. data/app/controllers/harpiya/api/v1/addresses_controller.rb +46 -0
  12. data/app/controllers/harpiya/api/v1/checkouts_controller.rb +106 -0
  13. data/app/controllers/harpiya/api/v1/classifications_controller.rb +20 -0
  14. data/app/controllers/harpiya/api/v1/countries_controller.rb +22 -0
  15. data/app/controllers/harpiya/api/v1/credit_cards_controller.rb +26 -0
  16. data/app/controllers/harpiya/api/v1/customer_returns_controller.rb +25 -0
  17. data/app/controllers/harpiya/api/v1/images_controller.rb +58 -0
  18. data/app/controllers/harpiya/api/v1/inventory_units_controller.rb +54 -0
  19. data/app/controllers/harpiya/api/v1/line_items_controller.rb +70 -0
  20. data/app/controllers/harpiya/api/v1/option_types_controller.rb +60 -0
  21. data/app/controllers/harpiya/api/v1/option_values_controller.rb +62 -0
  22. data/app/controllers/harpiya/api/v1/orders_controller.rb +156 -0
  23. data/app/controllers/harpiya/api/v1/payments_controller.rb +82 -0
  24. data/app/controllers/harpiya/api/v1/product_properties_controller.rb +73 -0
  25. data/app/controllers/harpiya/api/v1/products_controller.rb +131 -0
  26. data/app/controllers/harpiya/api/v1/promotions_controller.rb +30 -0
  27. data/app/controllers/harpiya/api/v1/properties_controller.rb +70 -0
  28. data/app/controllers/harpiya/api/v1/reimbursements_controller.rb +25 -0
  29. data/app/controllers/harpiya/api/v1/return_authorizations_controller.rb +70 -0
  30. data/app/controllers/harpiya/api/v1/shipments_controller.rb +196 -0
  31. data/app/controllers/harpiya/api/v1/states_controller.rb +36 -0
  32. data/app/controllers/harpiya/api/v1/stock_items_controller.rb +82 -0
  33. data/app/controllers/harpiya/api/v1/stock_locations_controller.rb +53 -0
  34. data/app/controllers/harpiya/api/v1/stock_movements_controller.rb +45 -0
  35. data/app/controllers/harpiya/api/v1/stores_controller.rb +56 -0
  36. data/app/controllers/harpiya/api/v1/taxonomies_controller.rb +67 -0
  37. data/app/controllers/harpiya/api/v1/taxons_controller.rb +100 -0
  38. data/app/controllers/harpiya/api/v1/users_controller.rb +97 -0
  39. data/app/controllers/harpiya/api/v1/variants_controller.rb +81 -0
  40. data/app/controllers/harpiya/api/v1/zones_controller.rb +55 -0
  41. data/app/controllers/harpiya/api/v2/base_controller.rb +167 -0
  42. data/app/controllers/harpiya/api/v2/platform/addresses_controller.rb +19 -0
  43. data/app/controllers/harpiya/api/v2/platform/countries_controller.rb +19 -0
  44. data/app/controllers/harpiya/api/v2/platform/menu_items_controller.rb +35 -0
  45. data/app/controllers/harpiya/api/v2/platform/menus_controller.rb +19 -0
  46. data/app/controllers/harpiya/api/v2/platform/option_types_controller.rb +15 -0
  47. data/app/controllers/harpiya/api/v2/platform/option_values_controller.rb +19 -0
  48. data/app/controllers/harpiya/api/v2/platform/products_controller.rb +27 -0
  49. data/app/controllers/harpiya/api/v2/platform/resource_controller.rb +102 -0
  50. data/app/controllers/harpiya/api/v2/platform/taxons_controller.rb +27 -0
  51. data/app/controllers/harpiya/api/v2/platform/users_controller.rb +23 -0
  52. data/app/controllers/harpiya/api/v2/resource_controller.rb +59 -0
  53. data/app/controllers/harpiya/api/v2/storefront/account/addresses_controller.rb +75 -0
  54. data/app/controllers/harpiya/api/v2/storefront/account/credit_cards_controller.rb +39 -0
  55. data/app/controllers/harpiya/api/v2/storefront/account/orders_controller.rb +46 -0
  56. data/app/controllers/harpiya/api/v2/storefront/account_controller.rb +52 -0
  57. data/app/controllers/harpiya/api/v2/storefront/cart_controller.rb +195 -0
  58. data/app/controllers/harpiya/api/v2/storefront/checkout_controller.rb +136 -0
  59. data/app/controllers/harpiya/api/v2/storefront/countries_controller.rb +50 -0
  60. data/app/controllers/harpiya/api/v2/storefront/menus_controller.rb +42 -0
  61. data/app/controllers/harpiya/api/v2/storefront/order_status_controller.rb +34 -0
  62. data/app/controllers/harpiya/api/v2/storefront/products_controller.rb +55 -0
  63. data/app/controllers/harpiya/api/v2/storefront/stores_controller.rb +23 -0
  64. data/app/controllers/harpiya/api/v2/storefront/taxons_controller.rb +47 -0
  65. data/app/helpers/harpiya/api/api_helpers.rb +190 -0
  66. data/app/helpers/harpiya/api/v2/collection_options_helpers.rb +46 -0
  67. data/app/helpers/harpiya/api/v2/display_money_helper.rb +43 -0
  68. data/app/models/concerns/harpiya/user_api_authentication.rb +19 -0
  69. data/app/models/concerns/harpiya/user_api_methods.rb +7 -0
  70. data/app/models/harpiya/api_configuration.rb +8 -0
  71. data/app/models/harpiya/api_dependencies.rb +98 -0
  72. data/app/serializers/concerns/harpiya/api/v2/resource_serializer_concern.rb +16 -0
  73. data/app/serializers/harpiya/api/v2/base_serializer.rb +32 -0
  74. data/app/serializers/harpiya/api/v2/platform/address_serializer.rb +15 -0
  75. data/app/serializers/harpiya/api/v2/platform/base_serializer.rb +10 -0
  76. data/app/serializers/harpiya/api/v2/platform/country_serializer.rb +13 -0
  77. data/app/serializers/harpiya/api/v2/platform/image_serializer.rb +11 -0
  78. data/app/serializers/harpiya/api/v2/platform/menu_item_serializer.rb +22 -0
  79. data/app/serializers/harpiya/api/v2/platform/menu_serializer.rb +14 -0
  80. data/app/serializers/harpiya/api/v2/platform/option_type_serializer.rb +13 -0
  81. data/app/serializers/harpiya/api/v2/platform/option_value_serializer.rb +13 -0
  82. data/app/serializers/harpiya/api/v2/platform/product_property_serializer.rb +11 -0
  83. data/app/serializers/harpiya/api/v2/platform/product_serializer.rb +28 -0
  84. data/app/serializers/harpiya/api/v2/platform/state_serializer.rb +13 -0
  85. data/app/serializers/harpiya/api/v2/platform/store_serializer.rb +14 -0
  86. data/app/serializers/harpiya/api/v2/platform/taxon_image_serializer.rb +11 -0
  87. data/app/serializers/harpiya/api/v2/platform/taxon_serializer.rb +37 -0
  88. data/app/serializers/harpiya/api/v2/platform/taxonomy_serializer.rb +11 -0
  89. data/app/serializers/harpiya/api/v2/platform/user_serializer.rb +21 -0
  90. data/app/serializers/harpiya/api/v2/platform/variant_serializer.rb +15 -0
  91. data/app/serializers/harpiya/v2/storefront/address_serializer.rb +20 -0
  92. data/app/serializers/harpiya/v2/storefront/base_serializer.rb +10 -0
  93. data/app/serializers/harpiya/v2/storefront/cart_serializer.rb +36 -0
  94. data/app/serializers/harpiya/v2/storefront/country_serializer.rb +24 -0
  95. data/app/serializers/harpiya/v2/storefront/credit_card_serializer.rb +13 -0
  96. data/app/serializers/harpiya/v2/storefront/estimated_shipping_rate_serializer.rb +29 -0
  97. data/app/serializers/harpiya/v2/storefront/image_serializer.rb +11 -0
  98. data/app/serializers/harpiya/v2/storefront/line_item_serializer.rb +19 -0
  99. data/app/serializers/harpiya/v2/storefront/menu_item_serializer.rb +38 -0
  100. data/app/serializers/harpiya/v2/storefront/menu_serializer.rb +14 -0
  101. data/app/serializers/harpiya/v2/storefront/option_type_serializer.rb +13 -0
  102. data/app/serializers/harpiya/v2/storefront/option_value_serializer.rb +13 -0
  103. data/app/serializers/harpiya/v2/storefront/payment_method_serializer.rb +11 -0
  104. data/app/serializers/harpiya/v2/storefront/payment_serializer.rb +15 -0
  105. data/app/serializers/harpiya/v2/storefront/product_property_serializer.rb +19 -0
  106. data/app/serializers/harpiya/v2/storefront/product_serializer.rb +67 -0
  107. data/app/serializers/harpiya/v2/storefront/promotion_serializer.rb +12 -0
  108. data/app/serializers/harpiya/v2/storefront/shipment_serializer.rb +20 -0
  109. data/app/serializers/harpiya/v2/storefront/shipping_rate_serializer.rb +16 -0
  110. data/app/serializers/harpiya/v2/storefront/state_serializer.rb +11 -0
  111. data/app/serializers/harpiya/v2/storefront/stock_location_serializer.rb +11 -0
  112. data/app/serializers/harpiya/v2/storefront/store_credit_category_serializer.rb +11 -0
  113. data/app/serializers/harpiya/v2/storefront/store_credit_event_serializer.rb +15 -0
  114. data/app/serializers/harpiya/v2/storefront/store_credit_serializer.rb +17 -0
  115. data/app/serializers/harpiya/v2/storefront/store_credit_type_serializer.rb +11 -0
  116. data/app/serializers/harpiya/v2/storefront/store_serializer.rb +23 -0
  117. data/app/serializers/harpiya/v2/storefront/taxon_image_serializer.rb +11 -0
  118. data/app/serializers/harpiya/v2/storefront/taxon_serializer.rb +36 -0
  119. data/app/serializers/harpiya/v2/storefront/taxonomy_serializer.rb +11 -0
  120. data/app/serializers/harpiya/v2/storefront/user_serializer.rb +31 -0
  121. data/app/serializers/harpiya/v2/storefront/variant_serializer.rb +49 -0
  122. data/app/services/harpiya/api/error_handler.rb +40 -0
  123. data/app/views/harpiya/api/errors/gateway_error.rabl +2 -0
  124. data/app/views/harpiya/api/errors/invalid_api_key.rabl +2 -0
  125. data/app/views/harpiya/api/errors/invalid_resource.rabl +3 -0
  126. data/app/views/harpiya/api/errors/must_specify_api_key.rabl +2 -0
  127. data/app/views/harpiya/api/errors/not_found.rabl +2 -0
  128. data/app/views/harpiya/api/errors/unauthorized.rabl +2 -0
  129. data/app/views/harpiya/api/v1/addresses/show.rabl +10 -0
  130. data/app/views/harpiya/api/v1/adjustments/show.rabl +4 -0
  131. data/app/views/harpiya/api/v1/countries/index.rabl +7 -0
  132. data/app/views/harpiya/api/v1/countries/show.rabl +5 -0
  133. data/app/views/harpiya/api/v1/credit_cards/index.rabl +7 -0
  134. data/app/views/harpiya/api/v1/credit_cards/show.rabl +3 -0
  135. data/app/views/harpiya/api/v1/customer_returns/index.rabl +7 -0
  136. data/app/views/harpiya/api/v1/images/index.rabl +4 -0
  137. data/app/views/harpiya/api/v1/images/new.rabl +3 -0
  138. data/app/views/harpiya/api/v1/images/show.rabl +6 -0
  139. data/app/views/harpiya/api/v1/inventory_units/show.rabl +2 -0
  140. data/app/views/harpiya/api/v1/line_items/new.rabl +3 -0
  141. data/app/views/harpiya/api/v1/line_items/show.rabl +14 -0
  142. data/app/views/harpiya/api/v1/option_types/index.rabl +3 -0
  143. data/app/views/harpiya/api/v1/option_types/new.rabl +3 -0
  144. data/app/views/harpiya/api/v1/option_types/show.rabl +5 -0
  145. data/app/views/harpiya/api/v1/option_values/index.rabl +3 -0
  146. data/app/views/harpiya/api/v1/option_values/new.rabl +3 -0
  147. data/app/views/harpiya/api/v1/option_values/show.rabl +2 -0
  148. data/app/views/harpiya/api/v1/orders/address.rabl +0 -0
  149. data/app/views/harpiya/api/v1/orders/canceled.rabl +0 -0
  150. data/app/views/harpiya/api/v1/orders/cart.rabl +0 -0
  151. data/app/views/harpiya/api/v1/orders/complete.rabl +0 -0
  152. data/app/views/harpiya/api/v1/orders/could_not_apply_coupon.rabl +2 -0
  153. data/app/views/harpiya/api/v1/orders/could_not_transition.rabl +3 -0
  154. data/app/views/harpiya/api/v1/orders/index.rabl +7 -0
  155. data/app/views/harpiya/api/v1/orders/insufficient_quantity.rabl +2 -0
  156. data/app/views/harpiya/api/v1/orders/invalid_shipping_method.rabl +2 -0
  157. data/app/views/harpiya/api/v1/orders/mine.rabl +9 -0
  158. data/app/views/harpiya/api/v1/orders/order.rabl +10 -0
  159. data/app/views/harpiya/api/v1/orders/payment.rabl +3 -0
  160. data/app/views/harpiya/api/v1/orders/show.rabl +51 -0
  161. data/app/views/harpiya/api/v1/payments/credit_over_limit.rabl +2 -0
  162. data/app/views/harpiya/api/v1/payments/index.rabl +7 -0
  163. data/app/views/harpiya/api/v1/payments/new.rabl +5 -0
  164. data/app/views/harpiya/api/v1/payments/show.rabl +2 -0
  165. data/app/views/harpiya/api/v1/payments/update_forbidden.rabl +2 -0
  166. data/app/views/harpiya/api/v1/product_properties/index.rabl +7 -0
  167. data/app/views/harpiya/api/v1/product_properties/new.rabl +2 -0
  168. data/app/views/harpiya/api/v1/product_properties/show.rabl +2 -0
  169. data/app/views/harpiya/api/v1/products/index.rabl +9 -0
  170. data/app/views/harpiya/api/v1/products/new.rabl +3 -0
  171. data/app/views/harpiya/api/v1/products/product.rabl +1 -0
  172. data/app/views/harpiya/api/v1/products/show.rabl +36 -0
  173. data/app/views/harpiya/api/v1/promotions/handler.rabl +5 -0
  174. data/app/views/harpiya/api/v1/promotions/show.rabl +2 -0
  175. data/app/views/harpiya/api/v1/properties/index.rabl +7 -0
  176. data/app/views/harpiya/api/v1/properties/new.rabl +2 -0
  177. data/app/views/harpiya/api/v1/properties/show.rabl +2 -0
  178. data/app/views/harpiya/api/v1/reimbursements/index.rabl +7 -0
  179. data/app/views/harpiya/api/v1/return_authorizations/index.rabl +7 -0
  180. data/app/views/harpiya/api/v1/return_authorizations/new.rabl +3 -0
  181. data/app/views/harpiya/api/v1/return_authorizations/show.rabl +2 -0
  182. data/app/views/harpiya/api/v1/shared/stock_location_required.rabl +2 -0
  183. data/app/views/harpiya/api/v1/shipments/big.rabl +48 -0
  184. data/app/views/harpiya/api/v1/shipments/cannot_ready_shipment.rabl +2 -0
  185. data/app/views/harpiya/api/v1/shipments/mine.rabl +9 -0
  186. data/app/views/harpiya/api/v1/shipments/show.rabl +32 -0
  187. data/app/views/harpiya/api/v1/shipments/small.rabl +37 -0
  188. data/app/views/harpiya/api/v1/shipping_rates/show.rabl +2 -0
  189. data/app/views/harpiya/api/v1/states/index.rabl +12 -0
  190. data/app/views/harpiya/api/v1/states/show.rabl +2 -0
  191. data/app/views/harpiya/api/v1/stock_items/index.rabl +7 -0
  192. data/app/views/harpiya/api/v1/stock_items/show.rabl +5 -0
  193. data/app/views/harpiya/api/v1/stock_locations/index.rabl +7 -0
  194. data/app/views/harpiya/api/v1/stock_locations/show.rabl +8 -0
  195. data/app/views/harpiya/api/v1/stock_movements/index.rabl +7 -0
  196. data/app/views/harpiya/api/v1/stock_movements/show.rabl +5 -0
  197. data/app/views/harpiya/api/v1/stores/index.rabl +4 -0
  198. data/app/views/harpiya/api/v1/stores/show.rabl +2 -0
  199. data/app/views/harpiya/api/v1/tags/index.rabl +9 -0
  200. data/app/views/harpiya/api/v1/taxonomies/index.rabl +7 -0
  201. data/app/views/harpiya/api/v1/taxonomies/jstree.rabl +7 -0
  202. data/app/views/harpiya/api/v1/taxonomies/nested.rabl +11 -0
  203. data/app/views/harpiya/api/v1/taxonomies/new.rabl +3 -0
  204. data/app/views/harpiya/api/v1/taxonomies/show.rabl +15 -0
  205. data/app/views/harpiya/api/v1/taxons/index.rabl +10 -0
  206. data/app/views/harpiya/api/v1/taxons/jstree.rabl +7 -0
  207. data/app/views/harpiya/api/v1/taxons/new.rabl +3 -0
  208. data/app/views/harpiya/api/v1/taxons/show.rabl +6 -0
  209. data/app/views/harpiya/api/v1/taxons/taxons.rabl +5 -0
  210. data/app/views/harpiya/api/v1/users/index.rabl +7 -0
  211. data/app/views/harpiya/api/v1/users/new.rabl +3 -0
  212. data/app/views/harpiya/api/v1/users/show.rabl +11 -0
  213. data/app/views/harpiya/api/v1/variants/big.rabl +14 -0
  214. data/app/views/harpiya/api/v1/variants/index.rabl +9 -0
  215. data/app/views/harpiya/api/v1/variants/new.rabl +2 -0
  216. data/app/views/harpiya/api/v1/variants/show.rabl +3 -0
  217. data/app/views/harpiya/api/v1/variants/small.rabl +18 -0
  218. data/app/views/harpiya/api/v1/zones/index.rabl +7 -0
  219. data/app/views/harpiya/api/v1/zones/show.rabl +6 -0
  220. data/config/initializers/doorkeeper.rb +48 -0
  221. data/config/initializers/json_api_mime_types.rb +8 -0
  222. data/config/initializers/rabl.rb +9 -0
  223. data/config/initializers/user_class_extensions.rb +7 -0
  224. data/config/locales/en.yml +36 -0
  225. data/config/routes.rb +295 -0
  226. data/db/migrate/20100107141738_add_api_key_to_harpiya_users.rb +7 -0
  227. data/db/migrate/20120411123334_resize_api_key_field.rb +7 -0
  228. data/db/migrate/20120530054546_rename_api_key_to_harpiya_api_key.rb +7 -0
  229. data/db/migrate/20131017162334_add_index_to_user_harpiya_api_key.rb +7 -0
  230. data/db/migrate/20180320110726_create_doorkeeper_tables.rb +69 -0
  231. data/docs/oauth/index.yml +140 -0
  232. data/docs/v2/platform/index.yaml +599 -0
  233. data/docs/v2/storefront/index.yaml +5585 -0
  234. data/harpiya_api.gemspec +36 -0
  235. data/lib/harpiya/api.rb +11 -0
  236. data/lib/harpiya/api/controller_setup.rb +19 -0
  237. data/lib/harpiya/api/engine.rb +30 -0
  238. data/lib/harpiya/api/responders.rb +11 -0
  239. data/lib/harpiya/api/responders/rabl_template.rb +28 -0
  240. data/lib/harpiya/api/testing_support/caching.rb +10 -0
  241. data/lib/harpiya/api/testing_support/helpers.rb +44 -0
  242. data/lib/harpiya/api/testing_support/setup.rb +16 -0
  243. data/lib/harpiya/api/testing_support/v2/base.rb +13 -0
  244. data/lib/harpiya/api/testing_support/v2/current_order.rb +79 -0
  245. data/lib/harpiya/api/testing_support/v2/platform_contexts.rb +213 -0
  246. data/lib/harpiya_api.rb +4 -0
  247. data/script/rails +9 -0
  248. data/spec/fixtures/thinking-cat.jpg +0 -0
  249. metadata +418 -0
@@ -0,0 +1,27 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class TaxonsController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Harpiya::Taxon
10
+ end
11
+
12
+ def scope_includes
13
+ node_includes = %i[icon products parent taxonomy]
14
+
15
+ {
16
+ parent: node_includes,
17
+ children: node_includes,
18
+ taxonomy: [root: node_includes],
19
+ products: [],
20
+ icon: [attachment_attachment: :blob]
21
+ }
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class UsersController < ResourceController
6
+ private
7
+
8
+ def model_class
9
+ Harpiya.user_class
10
+ end
11
+
12
+ def resource_serializer
13
+ Harpiya::Api::V2::Platform::UserSerializer
14
+ end
15
+
16
+ def scope_includes
17
+ [:ship_address, :bill_address]
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,59 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ class ResourceController < ::Harpiya::Api::V2::BaseController
5
+ include Harpiya::Api::V2::CollectionOptionsHelpers
6
+
7
+ def index
8
+ render_serialized_payload { serialize_collection(paginated_collection) }
9
+ end
10
+
11
+ def show
12
+ render_serialized_payload { serialize_resource(resource) }
13
+ end
14
+
15
+ protected
16
+
17
+ def sorted_collection
18
+ @sorted_collection ||= collection_sorter.new(collection, params, allowed_sort_attributes).call
19
+ end
20
+
21
+ def allowed_sort_attributes
22
+ default_sort_atributes
23
+ end
24
+
25
+ def default_sort_atributes
26
+ [:id, :name, :number, :updated_at, :created_at]
27
+ end
28
+
29
+ def scope
30
+ model_class.accessible_by(current_ability, :show).includes(scope_includes)
31
+ end
32
+
33
+ def scope_includes
34
+ []
35
+ end
36
+
37
+ def resource
38
+ @resource ||= if defined?(resource_finder)
39
+ resource_finder.new(scope: scope, params: params).execute
40
+ else
41
+ scope.find(params[:id])
42
+ end
43
+ end
44
+
45
+ def collection
46
+ @collection ||= if defined?(collection_finder)
47
+ collection_finder.new(scope: scope, params: params).execute
48
+ else
49
+ scope
50
+ end
51
+ end
52
+
53
+ def collection_sorter
54
+ Harpiya::Api::Dependencies.storefront_collection_sorter.constantize
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,75 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ module Account
6
+ class AddressesController < ::Harpiya::Api::V2::ResourceController
7
+ before_action :require_harpiya_current_user
8
+
9
+ def create
10
+ harpiya_authorize! :create, model_class
11
+
12
+ result = create_service.call(user: harpiya_current_user, address_params: address_params)
13
+ render_result(result)
14
+ end
15
+
16
+ def update
17
+ harpiya_authorize! :update, resource
18
+
19
+ result = update_service.call(address: resource, address_params: address_params)
20
+ render_result(result)
21
+ end
22
+
23
+ def destroy
24
+ harpiya_authorize! :destroy, resource
25
+
26
+ if resource.destroy
27
+ head 204
28
+ else
29
+ render_error_payload(resource.errors)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def collection
36
+ collection_finder.new(scope: scope, params: params).execute
37
+ end
38
+
39
+ def scope
40
+ super.where(user: harpiya_current_user).not_deleted
41
+ end
42
+
43
+ def model_class
44
+ Harpiya::Address
45
+ end
46
+
47
+ def collection_finder
48
+ Harpiya::Api::Dependencies.storefront_address_finder.constantize
49
+ end
50
+
51
+ def collection_serializer
52
+ Harpiya::Api::Dependencies.storefront_address_serializer.constantize
53
+ end
54
+
55
+ def resource_serializer
56
+ Harpiya::Api::Dependencies.storefront_address_serializer.constantize
57
+ end
58
+
59
+ def create_service
60
+ Harpiya::Api::Dependencies.storefront_account_create_address_service.constantize
61
+ end
62
+
63
+ def update_service
64
+ Harpiya::Api::Dependencies.storefront_account_update_address_service.constantize
65
+ end
66
+
67
+ def address_params
68
+ params.require(:address).permit(permitted_address_attributes)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,39 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ module Account
6
+ class CreditCardsController < ::Harpiya::Api::V2::ResourceController
7
+ before_action :require_harpiya_current_user
8
+
9
+ private
10
+
11
+ def model_class
12
+ Harpiya::CreditCard
13
+ end
14
+
15
+ def scope
16
+ super.where(user: harpiya_current_user)
17
+ end
18
+
19
+ def collection_serializer
20
+ Harpiya::Api::Dependencies.storefront_credit_card_serializer.constantize
21
+ end
22
+
23
+ def collection_finder
24
+ Harpiya::Api::Dependencies.storefront_credit_card_finder.constantize
25
+ end
26
+
27
+ def resource_serializer
28
+ Harpiya::Api::Dependencies.storefront_credit_card_serializer.constantize
29
+ end
30
+
31
+ def resource_finder
32
+ Harpiya::Api::Dependencies.storefront_credit_card_finder.constantize
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,46 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ module Account
6
+ class OrdersController < ::Harpiya::Api::V2::ResourceController
7
+ before_action :require_harpiya_current_user
8
+
9
+ private
10
+
11
+ def collection
12
+ collection_finder.new(user: harpiya_current_user).execute
13
+ end
14
+
15
+ def resource
16
+ resource = resource_finder.new(user: harpiya_current_user, number: params[:id]).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
+ Harpiya::Api::Dependencies.storefront_order_serializer.constantize
28
+ end
29
+
30
+ def resource_serializer
31
+ Harpiya::Api::Dependencies.storefront_order_serializer.constantize
32
+ end
33
+
34
+ def collection_finder
35
+ Harpiya::Api::Dependencies.storefront_completed_order_finder.constantize
36
+ end
37
+
38
+ def resource_finder
39
+ Harpiya::Api::Dependencies.storefront_completed_order_finder.constantize
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,52 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class AccountController < ::Harpiya::Api::V2::ResourceController
6
+ before_action :require_harpiya_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
+ harpiya_authorize! :update, harpiya_current_user
15
+ result = update_service.call(user: harpiya_current_user, user_params: user_update_params)
16
+ render_result(result)
17
+ end
18
+
19
+ private
20
+
21
+ def resource
22
+ harpiya_current_user
23
+ end
24
+
25
+ def resource_serializer
26
+ Harpiya::Api::Dependencies.storefront_user_serializer.constantize
27
+ end
28
+
29
+ def model_class
30
+ Harpiya.user_class
31
+ end
32
+
33
+ def create_service
34
+ Harpiya::Api::Dependencies.storefront_account_create_service.constantize
35
+ end
36
+
37
+ def update_service
38
+ Harpiya::Api::Dependencies.storefront_account_update_service.constantize
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,195 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class CartController < ::Harpiya::Api::V2::BaseController
6
+ include Harpiya::Api::V2::Storefront::OrderConcern
7
+ before_action :ensure_order, except: :create
8
+ before_action :load_variant, only: :add_item
9
+
10
+ def create
11
+ harpiya_authorize! :create, Harpiya::Order
12
+
13
+ order_params = {
14
+ user: harpiya_current_user,
15
+ store: current_store,
16
+ currency: current_currency
17
+ }
18
+
19
+ order = harpiya_current_order if harpiya_current_order.present?
20
+ order ||= create_service.call(order_params).value
21
+
22
+ render_serialized_payload(201) { serialize_resource(order) }
23
+ end
24
+
25
+ def add_item
26
+ harpiya_authorize! :update, harpiya_current_order, order_token
27
+ harpiya_authorize! :show, @variant
28
+
29
+ result = add_item_service.call(
30
+ order: harpiya_current_order,
31
+ variant: @variant,
32
+ quantity: params[:quantity],
33
+ options: params[:options]
34
+ )
35
+
36
+ render_order(result)
37
+ end
38
+
39
+ def remove_line_item
40
+ harpiya_authorize! :update, harpiya_current_order, order_token
41
+
42
+ remove_line_item_service.call(
43
+ order: harpiya_current_order,
44
+ line_item: line_item
45
+ )
46
+
47
+ render_serialized_payload { serialized_current_order }
48
+ end
49
+
50
+ def empty
51
+ harpiya_authorize! :update, harpiya_current_order, order_token
52
+
53
+ # TODO: we should extract this logic into service and let
54
+ # developers overwrite it
55
+ harpiya_current_order.empty!
56
+
57
+ render_serialized_payload { serialized_current_order }
58
+ end
59
+
60
+ def set_quantity
61
+ return render_error_item_quantity unless params[:quantity].to_i > 0
62
+
63
+ harpiya_authorize! :update, harpiya_current_order, order_token
64
+
65
+ result = set_item_quantity_service.call(order: harpiya_current_order, line_item: line_item, quantity: params[:quantity])
66
+
67
+ render_order(result)
68
+ end
69
+
70
+ def show
71
+ harpiya_authorize! :show, harpiya_current_order, order_token
72
+
73
+ render_serialized_payload { serialized_current_order }
74
+ end
75
+
76
+ def apply_coupon_code
77
+ harpiya_authorize! :update, harpiya_current_order, order_token
78
+
79
+ harpiya_current_order.coupon_code = params[:coupon_code]
80
+ result = coupon_handler.new(harpiya_current_order).apply
81
+
82
+ if result.error.blank?
83
+ render_serialized_payload { serialized_current_order }
84
+ else
85
+ render_error_payload(result.error)
86
+ end
87
+ end
88
+
89
+ def remove_coupon_code
90
+ harpiya_authorize! :update, harpiya_current_order, order_token
91
+
92
+ coupon_codes = select_coupon_codes
93
+
94
+ return render_error_payload(Harpiya.t('v2.cart.no_coupon_code', scope: 'api')) if coupon_codes.empty?
95
+
96
+ result_errors = coupon_codes.count > 1 ? select_errors(coupon_codes) : select_error(coupon_codes)
97
+
98
+ if result_errors.blank?
99
+ render_serialized_payload { serialized_current_order }
100
+ else
101
+ render_error_payload(result_errors)
102
+ end
103
+ end
104
+
105
+ def estimate_shipping_rates
106
+ harpiya_authorize! :show, harpiya_current_order, order_token
107
+
108
+ result = estimate_shipping_rates_service.call(order: harpiya_current_order, country_iso: params[:country_iso])
109
+
110
+ if result.error.blank?
111
+ render_serialized_payload { serialize_estimated_shipping_rates(result.value) }
112
+ else
113
+ render_error_payload(result.error)
114
+ end
115
+ end
116
+
117
+ private
118
+
119
+ def resource_serializer
120
+ Harpiya::Api::Dependencies.storefront_cart_serializer.constantize
121
+ end
122
+
123
+ def create_service
124
+ Harpiya::Api::Dependencies.storefront_cart_create_service.constantize
125
+ end
126
+
127
+ def add_item_service
128
+ Harpiya::Api::Dependencies.storefront_cart_add_item_service.constantize
129
+ end
130
+
131
+ def set_item_quantity_service
132
+ Harpiya::Api::Dependencies.storefront_cart_set_item_quantity_service.constantize
133
+ end
134
+
135
+ def remove_line_item_service
136
+ Harpiya::Api::Dependencies.storefront_cart_remove_line_item_service.constantize
137
+ end
138
+
139
+ def coupon_handler
140
+ Harpiya::Api::Dependencies.storefront_coupon_handler.constantize
141
+ end
142
+
143
+ def estimate_shipping_rates_service
144
+ Harpiya::Api::Dependencies.storefront_cart_estimate_shipping_rates_service.constantize
145
+ end
146
+
147
+ def line_item
148
+ @line_item ||= harpiya_current_order.line_items.find(params[:line_item_id])
149
+ end
150
+
151
+ def load_variant
152
+ @variant = Harpiya::Variant.find(params[:variant_id])
153
+ end
154
+
155
+ def render_error_item_quantity
156
+ render json: { error: I18n.t(:wrong_quantity, scope: 'harpiya.api.v2.cart') }, status: 422
157
+ end
158
+
159
+ def estimate_shipping_rates_serializer
160
+ Harpiya::Api::Dependencies.storefront_estimated_shipment_serializer.constantize
161
+ end
162
+
163
+ def serialize_estimated_shipping_rates(shipping_rates)
164
+ estimate_shipping_rates_serializer.new(
165
+ shipping_rates,
166
+ params: serializer_params
167
+ ).serializable_hash
168
+ end
169
+
170
+ def select_coupon_codes
171
+ params[:coupon_code].present? ? [params[:coupon_code]] : check_coupon_codes
172
+ end
173
+
174
+ def check_coupon_codes
175
+ harpiya_current_order.promotions.coupons.map(&:code)
176
+ end
177
+
178
+ def select_error(coupon_codes)
179
+ result = coupon_handler.new(harpiya_current_order).remove(coupon_codes.first)
180
+ result.error
181
+ end
182
+
183
+ def select_errors(coupon_codes)
184
+ results = []
185
+ coupon_codes.each do |coupon_code|
186
+ results << coupon_handler.new(harpiya_current_order).remove(coupon_code)
187
+ end
188
+
189
+ results.select(&:error)
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
195
+ end