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,106 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class CheckoutsController < Harpiya::Api::BaseController
5
+ before_action :load_order_with_lock, only: [:next, :advance, :update]
6
+
7
+ def next
8
+ authorize! :update, @order, order_token
9
+ @order.next!
10
+ respond_with(@order, default_template: 'harpiya/api/v1/orders/show', status: 200)
11
+ rescue StateMachines::InvalidTransition
12
+ respond_with(@order, default_template: 'harpiya/api/v1/orders/could_not_transition', status: 422)
13
+ end
14
+
15
+ def advance
16
+ authorize! :update, @order, order_token
17
+ while @order.next; end
18
+ respond_with(@order, default_template: 'harpiya/api/v1/orders/show', status: 200)
19
+ end
20
+
21
+ def update
22
+ authorize! :update, @order, order_token
23
+
24
+ if @order.update_from_params(params, permitted_checkout_attributes, request.headers.env)
25
+ if current_api_user.has_harpiya_role?('admin') && user_id.present?
26
+ @order.associate_user!(Harpiya.user_class.find(user_id))
27
+ end
28
+
29
+ log_state_changes if params[:state]
30
+
31
+ return if after_update_attributes
32
+
33
+ if @order.completed? || @order.next
34
+ state_callback(:after)
35
+ respond_with(@order, default_template: 'harpiya/api/v1/orders/show')
36
+ else
37
+ respond_with(@order, default_template: 'harpiya/api/v1/orders/could_not_transition', status: 422)
38
+ end
39
+ else
40
+ invalid_resource!(@order)
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def user_id
47
+ params[:order][:user_id] if params[:order]
48
+ end
49
+
50
+ # Should be overriden if you have areas of your checkout that don't match
51
+ # up to a step within checkout_steps, such as a registration step
52
+ def skip_state_validation?
53
+ false
54
+ end
55
+
56
+ def load_order(lock = false)
57
+ @order = Harpiya::Order.lock(lock).find_by!(number: params[:id])
58
+ raise_insufficient_quantity and return if @order.insufficient_stock_lines.present?
59
+ @order.state = params[:state] if params[:state]
60
+ state_callback(:before)
61
+ end
62
+
63
+ def load_order_with_lock
64
+ load_order(true)
65
+ end
66
+
67
+ def raise_insufficient_quantity
68
+ respond_with(@order, default_template: 'harpiya/api/v1/orders/insufficient_quantity', status: 422)
69
+ end
70
+
71
+ def state_callback(before_or_after = :before)
72
+ method_name = :"#{before_or_after}_#{@order.state}"
73
+ send(method_name) if respond_to?(method_name, true)
74
+ end
75
+
76
+ def after_update_attributes
77
+ if params[:order] && params[:order][:coupon_code].present?
78
+ handler = PromotionHandler::Coupon.new(@order)
79
+ handler.apply
80
+
81
+ if handler.error.present?
82
+ @coupon_message = handler.error
83
+ respond_with(@order, default_template: 'harpiya/api/v1/orders/could_not_apply_coupon', status: 422)
84
+ return true
85
+ end
86
+ end
87
+ false
88
+ end
89
+
90
+ def log_state_changes
91
+ if @order.previous_changes[:state]
92
+ @order.log_state_changes(
93
+ state_name: 'order',
94
+ old_state: @order.previous_changes[:state].first,
95
+ new_state: @order.previous_changes[:state].last
96
+ )
97
+ end
98
+ end
99
+
100
+ def order_id
101
+ super || params[:id]
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,20 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class ClassificationsController < Harpiya::Api::BaseController
5
+ def update
6
+ authorize! :update, Product
7
+ authorize! :update, Taxon
8
+ classification = Harpiya::Classification.find_by(
9
+ product_id: params[:product_id],
10
+ taxon_id: params[:taxon_id]
11
+ )
12
+ # Because position we get back is 0-indexed.
13
+ # acts_as_list is 1-indexed.
14
+ classification.insert_at(params[:position].to_i + 1)
15
+ head :ok
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class CountriesController < Harpiya::Api::BaseController
5
+ skip_before_action :authenticate_user
6
+
7
+ def index
8
+ @countries = Country.accessible_by(current_ability).ransack(params[:q]).result.
9
+ order('name ASC').
10
+ page(params[:page]).per(params[:per_page])
11
+ country = Country.order('updated_at ASC').last
12
+ respond_with(@countries) if stale?(country)
13
+ end
14
+
15
+ def show
16
+ @country = Country.accessible_by(current_ability, :show).find(params[:id])
17
+ respond_with(@country)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class CreditCardsController < Harpiya::Api::BaseController
5
+ before_action :user
6
+
7
+ def index
8
+ @credit_cards = user.
9
+ credit_cards.
10
+ accessible_by(current_ability).
11
+ with_payment_profile.
12
+ ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
13
+ respond_with(@credit_cards)
14
+ end
15
+
16
+ private
17
+
18
+ def user
19
+ if params[:user_id].present?
20
+ @user ||= Harpiya.user_class.accessible_by(current_ability, :show).find(params[:user_id])
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class CustomerReturnsController < Harpiya::Api::BaseController
5
+ def index
6
+ collection(Harpiya::CustomerReturn)
7
+ respond_with(@collection)
8
+ end
9
+
10
+ private
11
+
12
+ def collection(resource)
13
+ return @collection if @collection.present?
14
+
15
+ params[:q] ||= {}
16
+
17
+ @collection = resource.all
18
+ # @search needs to be defined as this is passed to search_form_for
19
+ @search = @collection.ransack(params[:q])
20
+ @collection = @search.result.order(created_at: :desc).page(params[:page]).per(params[:per_page])
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,58 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class ImagesController < Harpiya::Api::BaseController
5
+ def index
6
+ @images = scope.images.accessible_by(current_ability)
7
+ respond_with(@images)
8
+ end
9
+
10
+ def show
11
+ @image = Image.accessible_by(current_ability, :show).find(params[:id])
12
+ respond_with(@image)
13
+ end
14
+
15
+ def new; end
16
+
17
+ def create
18
+ authorize! :create, Image
19
+ @image = scope.images.new(image_params)
20
+ if @image.save
21
+ respond_with(@image, status: 201, default_template: :show)
22
+ else
23
+ invalid_resource!(@image)
24
+ end
25
+ end
26
+
27
+ def update
28
+ @image = scope.images.accessible_by(current_ability, :update).find(params[:id])
29
+ if @image.update(image_params)
30
+ respond_with(@image, default_template: :show)
31
+ else
32
+ invalid_resource!(@image)
33
+ end
34
+ end
35
+
36
+ def destroy
37
+ @image = scope.images.accessible_by(current_ability, :destroy).find(params[:id])
38
+ @image.destroy
39
+ respond_with(@image, status: 204)
40
+ end
41
+
42
+ private
43
+
44
+ def image_params
45
+ params.require(:image).permit(permitted_image_attributes)
46
+ end
47
+
48
+ def scope
49
+ if params[:product_id]
50
+ Harpiya::Product.friendly.find(params[:product_id])
51
+ elsif params[:variant_id]
52
+ Harpiya::Variant.find(params[:variant_id])
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,54 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class InventoryUnitsController < Harpiya::Api::BaseController
5
+ before_action :prepare_event, only: :update
6
+
7
+ def show
8
+ @inventory_unit = inventory_unit
9
+ respond_with(@inventory_unit)
10
+ end
11
+
12
+ def update
13
+ authorize! :update, inventory_unit.order
14
+
15
+ inventory_unit.transaction do
16
+ if inventory_unit.update(inventory_unit_params)
17
+ fire
18
+ render :show, status: 200
19
+ else
20
+ invalid_resource!(inventory_unit)
21
+ end
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def inventory_unit
28
+ @inventory_unit ||= InventoryUnit.accessible_by(current_ability, :show).find(params[:id])
29
+ end
30
+
31
+ def prepare_event
32
+ return unless @event = params[:fire]
33
+
34
+ can_event = "can_#{@event}?"
35
+
36
+ unless inventory_unit.respond_to?(can_event) &&
37
+ inventory_unit.send(can_event)
38
+ render plain: { exception: "cannot transition to #{@event}" }.to_json,
39
+ status: 200
40
+ false
41
+ end
42
+ end
43
+
44
+ def fire
45
+ inventory_unit.send("#{@event}!") if @event
46
+ end
47
+
48
+ def inventory_unit_params
49
+ params.require(:inventory_unit).permit(permitted_inventory_unit_attributes)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,70 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class LineItemsController < Harpiya::Api::BaseController
5
+ class_attribute :line_item_options
6
+
7
+ self.line_item_options = []
8
+
9
+ def new; end
10
+
11
+ def create
12
+ variant = Harpiya::Variant.find(params[:line_item][:variant_id])
13
+
14
+ @line_item = Harpiya::Dependencies.cart_add_item_service.constantize.call(order: order,
15
+ variant: variant,
16
+ quantity: params[:line_item][:quantity],
17
+ options: line_item_params[:options]).value
18
+ if @line_item.errors.empty?
19
+ respond_with(@line_item, status: 201, default_template: :show)
20
+ else
21
+ invalid_resource!(@line_item)
22
+ end
23
+ end
24
+
25
+ def update
26
+ @line_item = find_line_item
27
+
28
+ if Harpiya::Dependencies.cart_update_service.constantize.call(order: @order, params: line_items_attributes).success?
29
+ @line_item.reload
30
+ respond_with(@line_item, default_template: :show)
31
+ else
32
+ invalid_resource!(@line_item)
33
+ end
34
+ end
35
+
36
+ def destroy
37
+ @line_item = find_line_item
38
+ Harpiya::Dependencies.cart_remove_line_item_service.constantize.call(order: @order, line_item: @line_item)
39
+
40
+ respond_with(@line_item, status: 204)
41
+ end
42
+
43
+ private
44
+
45
+ def order
46
+ @order ||= Harpiya::Order.includes(:line_items).find_by!(number: order_id)
47
+ authorize! :update, @order, order_token
48
+ end
49
+
50
+ def find_line_item
51
+ id = params[:id].to_i
52
+ order.line_items.detect { |line_item| line_item.id == id } or
53
+ raise ActiveRecord::RecordNotFound
54
+ end
55
+
56
+ def line_items_attributes
57
+ { line_items_attributes: {
58
+ id: params[:id],
59
+ quantity: params[:line_item][:quantity],
60
+ options: line_item_params[:options] || {}
61
+ } }
62
+ end
63
+
64
+ def line_item_params
65
+ params.require(:line_item).permit(:quantity, :variant_id, options: line_item_options)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,60 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class OptionTypesController < Harpiya::Api::BaseController
5
+ def index
6
+ @option_types = if params[:ids]
7
+ Harpiya::OptionType.
8
+ includes(:option_values).
9
+ accessible_by(current_ability).
10
+ where(id: params[:ids].split(','))
11
+ else
12
+ Harpiya::OptionType.
13
+ includes(:option_values).
14
+ accessible_by(current_ability).
15
+ load.ransack(params[:q]).result
16
+ end
17
+ respond_with(@option_types)
18
+ end
19
+
20
+ def show
21
+ @option_type = Harpiya::OptionType.accessible_by(current_ability, :show).find(params[:id])
22
+ respond_with(@option_type)
23
+ end
24
+
25
+ def new; end
26
+
27
+ def create
28
+ authorize! :create, Harpiya::OptionType
29
+ @option_type = Harpiya::OptionType.new(option_type_params)
30
+ if @option_type.save
31
+ render :show, status: 201
32
+ else
33
+ invalid_resource!(@option_type)
34
+ end
35
+ end
36
+
37
+ def update
38
+ @option_type = Harpiya::OptionType.accessible_by(current_ability, :update).find(params[:id])
39
+ if @option_type.update(option_type_params)
40
+ render :show
41
+ else
42
+ invalid_resource!(@option_type)
43
+ end
44
+ end
45
+
46
+ def destroy
47
+ @option_type = Harpiya::OptionType.accessible_by(current_ability, :destroy).find(params[:id])
48
+ @option_type.destroy
49
+ render plain: nil, status: 204
50
+ end
51
+
52
+ private
53
+
54
+ def option_type_params
55
+ params.require(:option_type).permit(permitted_option_type_attributes)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end