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,46 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module CollectionOptionsHelpers
5
+ def collection_links(collection)
6
+ {
7
+ self: request.original_url,
8
+ next: pagination_url(collection.next_page || collection.total_pages),
9
+ prev: pagination_url(collection.prev_page || 1),
10
+ last: pagination_url(collection.total_pages),
11
+ first: pagination_url(1)
12
+ }
13
+ end
14
+
15
+ def collection_meta(collection)
16
+ {
17
+ count: collection.size,
18
+ total_count: collection.total_count,
19
+ total_pages: collection.total_pages
20
+ }
21
+ end
22
+
23
+ # leaving this method in public scope so it's still possible to modify
24
+ # those params to support non-standard non-JSON API parameters
25
+ def collection_permitted_params
26
+ params.permit(:format, :page, :per_page, :sort, :include, :fields, filter: {})
27
+ end
28
+
29
+ private
30
+
31
+ def pagination_url(page)
32
+ url_for(collection_permitted_params.merge(page: page))
33
+ end
34
+
35
+ def collection_options(collection)
36
+ {
37
+ links: collection_links(collection),
38
+ meta: collection_meta(collection),
39
+ include: resource_includes,
40
+ fields: sparse_fields
41
+ }
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,43 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module DisplayMoneyHelper
5
+ extend ActiveSupport::Concern
6
+
7
+ class_methods do
8
+ def find_price(product_or_variant, currency)
9
+ product_or_variant.price_in(currency)
10
+ end
11
+
12
+ def price(product_or_variant, currency)
13
+ price = find_price(product_or_variant, currency)
14
+ return nil if price.new_record?
15
+
16
+ format('%.2f', price.amount)
17
+ end
18
+
19
+ def display_price(product_or_variant, currency)
20
+ price = find_price(product_or_variant, currency)
21
+ return nil if price.new_record?
22
+
23
+ Harpiya::Money.new(price.amount, currency: currency).to_s
24
+ end
25
+
26
+ def compare_at_price(product_or_variant, currency)
27
+ price = find_price(product_or_variant, currency)
28
+ return nil if price.new_record? || price.compare_at_amount.blank?
29
+
30
+ format('%.2f', price.compare_at_amount)
31
+ end
32
+
33
+ def display_compare_at_price(product_or_variant, currency)
34
+ price = find_price(product_or_variant, currency)
35
+ return nil if price.new_record? || price.compare_at_amount.blank?
36
+
37
+ Harpiya::Money.new(price.compare_at_amount, currency: currency).to_s
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,19 @@
1
+ module Harpiya
2
+ module UserApiAuthentication
3
+ def generate_harpiya_api_key!
4
+ self.harpiya_api_key = generate_harpiya_api_key
5
+ save!
6
+ end
7
+
8
+ def clear_harpiya_api_key!
9
+ self.harpiya_api_key = nil
10
+ save!
11
+ end
12
+
13
+ private
14
+
15
+ def generate_harpiya_api_key
16
+ SecureRandom.hex(24)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ module Harpiya
2
+ module UserApiMethods
3
+ extend ActiveSupport::Concern
4
+
5
+ include Harpiya::UserApiAuthentication
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module Harpiya
2
+ class ApiConfiguration < Preferences::Configuration
3
+ preference :requires_authentication, :boolean, default: true
4
+ preference :api_v2_cache_ttl, :integer, default: 3600 # 1 hour in seconds
5
+ preference :api_v2_content_type, :string, default: 'application/vnd.api+json'
6
+ preference :api_v2_per_page_limit, :integer, default: 100
7
+ end
8
+ end
@@ -0,0 +1,98 @@
1
+ module Harpiya
2
+ class ApiDependencies
3
+ include Harpiya::DependenciesHelper
4
+
5
+ INJECTION_POINTS = [
6
+ :storefront_cart_create_service, :storefront_cart_add_item_service, :storefront_cart_remove_line_item_service,
7
+ :storefront_cart_remove_item_service, :storefront_cart_set_item_quantity_service, :storefront_cart_recalculate_service,
8
+ :storefront_cart_update, :storefront_coupon_handler, :storefront_checkout_next_service, :storefront_checkout_advance_service,
9
+ :storefront_checkout_update_service, :storefront_checkout_complete_service, :storefront_checkout_add_store_credit_service,
10
+ :storefront_checkout_remove_store_credit_service, :storefront_checkout_get_shipping_rates_service,
11
+ :storefront_cart_compare_line_items_service, :storefront_cart_serializer, :storefront_credit_card_serializer,
12
+ :storefront_credit_card_finder, :storefront_shipment_serializer, :storefront_payment_method_serializer, :storefront_country_finder,
13
+ :storefront_country_serializer, :storefront_menu_serializer, :storefront_menu_finder, :storefront_current_order_finder,
14
+ :storefront_completed_order_finder, :storefront_order_sorter, :storefront_collection_paginator, :storefront_user_serializer,
15
+ :storefront_products_sorter, :storefront_products_finder, :storefront_product_serializer, :storefront_taxon_serializer,
16
+ :storefront_taxon_finder, :storefront_find_by_variant_finder, :storefront_cart_update_service,
17
+ :storefront_cart_estimate_shipping_rates_service, :storefront_estimated_shipment_serializer,
18
+ :storefront_store_serializer, :storefront_address_serializer, :storefront_order_serializer,
19
+ :storefront_account_create_address_service, :storefront_account_update_address_service, :storefront_address_finder,
20
+ :storefront_account_create_service, :storefront_account_update_service, :storefront_collection_sorter, :error_handler
21
+ ].freeze
22
+
23
+ attr_accessor *INJECTION_POINTS
24
+
25
+ def initialize
26
+ set_storefront_defaults
27
+ end
28
+
29
+ private
30
+
31
+ def set_storefront_defaults
32
+ # cart services
33
+ @storefront_cart_create_service = Harpiya::Dependencies.cart_create_service
34
+ @storefront_cart_add_item_service = Harpiya::Dependencies.cart_add_item_service
35
+ @storefront_cart_compare_line_items_service = Harpiya::Dependencies.cart_compare_line_items_service
36
+ @storefront_cart_update_service = Harpiya::Dependencies.cart_update_service
37
+ @storefront_cart_remove_line_item_service = Harpiya::Dependencies.cart_remove_line_item_service
38
+ @storefront_cart_remove_item_service = Harpiya::Dependencies.cart_remove_item_service
39
+ @storefront_cart_set_item_quantity_service = Harpiya::Dependencies.cart_set_item_quantity_service
40
+ @storefront_cart_recalculate_service = Harpiya::Dependencies.cart_recalculate_service
41
+ @storefront_cart_estimate_shipping_rates_service = Harpiya::Dependencies.cart_estimate_shipping_rates_service
42
+
43
+ # coupon code handler
44
+ @storefront_coupon_handler = Harpiya::Dependencies.coupon_handler
45
+
46
+ # checkout services
47
+ @storefront_checkout_next_service = Harpiya::Dependencies.checkout_next_service
48
+ @storefront_checkout_advance_service = Harpiya::Dependencies.checkout_advance_service
49
+ @storefront_checkout_update_service = Harpiya::Dependencies.checkout_update_service
50
+ @storefront_checkout_complete_service = Harpiya::Dependencies.checkout_complete_service
51
+ @storefront_checkout_add_store_credit_service = Harpiya::Dependencies.checkout_add_store_credit_service
52
+ @storefront_checkout_remove_store_credit_service = Harpiya::Dependencies.checkout_remove_store_credit_service
53
+ @storefront_checkout_get_shipping_rates_service = Harpiya::Dependencies.checkout_get_shipping_rates_service
54
+
55
+ # account services
56
+ @storefront_account_create_service = Harpiya::Dependencies.account_create_service
57
+ @storefront_account_update_service = Harpiya::Dependencies.account_update_service
58
+ @storefront_account_create_address_service = Harpiya::Dependencies.account_create_address_service
59
+ @storefront_account_update_address_service = Harpiya::Dependencies.account_update_address_service
60
+
61
+ # serializers
62
+ @storefront_address_serializer = 'Harpiya::V2::Storefront::AddressSerializer'
63
+ @storefront_cart_serializer = 'Harpiya::V2::Storefront::CartSerializer'
64
+ @storefront_credit_card_serializer = 'Harpiya::V2::Storefront::CreditCardSerializer'
65
+ @storefront_country_serializer = 'Harpiya::V2::Storefront::CountrySerializer'
66
+ @storefront_menu_serializer = 'Harpiya::V2::Storefront::MenuSerializer'
67
+ @storefront_user_serializer = 'Harpiya::V2::Storefront::UserSerializer'
68
+ @storefront_shipment_serializer = 'Harpiya::V2::Storefront::ShipmentSerializer'
69
+ @storefront_taxon_serializer = 'Harpiya::V2::Storefront::TaxonSerializer'
70
+ @storefront_payment_method_serializer = 'Harpiya::V2::Storefront::PaymentMethodSerializer'
71
+ @storefront_product_serializer = 'Harpiya::V2::Storefront::ProductSerializer'
72
+ @storefront_estimated_shipment_serializer = 'Harpiya::V2::Storefront::EstimatedShippingRateSerializer'
73
+ @storefront_store_serializer = 'Harpiya::V2::Storefront::StoreSerializer'
74
+ @storefront_order_serializer = 'Harpiya::V2::Storefront::CartSerializer'
75
+
76
+ # sorters
77
+ @storefront_collection_sorter = Harpiya::Dependencies.collection_sorter
78
+ @storefront_order_sorter = Harpiya::Dependencies.collection_sorter
79
+ @storefront_products_sorter = Harpiya::Dependencies.products_sorter
80
+
81
+ # paginators
82
+ @storefront_collection_paginator = Harpiya::Dependencies.collection_paginator
83
+
84
+ # finders
85
+ @storefront_address_finder = Harpiya::Dependencies.address_finder
86
+ @storefront_country_finder = Harpiya::Dependencies.country_finder
87
+ @storefront_menu_finder = Harpiya::Dependencies.menu_finder
88
+ @storefront_current_order_finder = Harpiya::Dependencies.current_order_finder
89
+ @storefront_completed_order_finder = Harpiya::Dependencies.completed_order_finder
90
+ @storefront_credit_card_finder = Harpiya::Dependencies.credit_card_finder
91
+ @storefront_find_by_variant_finder = Harpiya::Dependencies.line_item_by_variant_finder
92
+ @storefront_products_finder = Harpiya::Dependencies.products_finder
93
+ @storefront_taxon_finder = Harpiya::Dependencies.taxon_finder
94
+
95
+ @error_handler = 'Harpiya::Api::ErrorHandler'
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,16 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module ResourceSerializerConcern
5
+ extend ActiveSupport::Concern
6
+
7
+ def self.included(base)
8
+ model_klazz = "Harpiya::#{base.to_s.demodulize.gsub(/Serializer/, '')}".constantize
9
+
10
+ base.set_type model_klazz.json_api_type
11
+ base.attributes(*model_klazz.json_api_columns)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,32 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ class BaseSerializer
5
+ include JSONAPI::Serializer
6
+
7
+ # to learn more about caching, please refer to:
8
+ # https://github.com/jsonapi-serializer/jsonapi-serializer#caching
9
+ # https://guides.rubyonrails.org/caching_with_rails.html#low-level-caching
10
+ cache_options(store: Rails.cache, namespace: 'jsonapi-serializer', expires_in: Harpiya::Api::Config[:api_v2_cache_ttl])
11
+
12
+ def self.record_cache_options(options, fieldset, include_list, params)
13
+ opts = options.dup
14
+
15
+ params_cache_key = params.map do |param|
16
+ next if param.nil? || param.last.nil?
17
+
18
+ if param.last.respond_to?(:cache_key_with_version)
19
+ param.last.cache_key_with_version
20
+ else
21
+ param.last.to_s.downcase
22
+ end
23
+ end.compact.reject(&:blank?).join('-')
24
+
25
+ opts[:namespace] += "-#{params_cache_key}"
26
+
27
+ super(opts, fieldset, include_list, params)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,15 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class AddressSerializer < BaseSerializer
6
+ include ::Harpiya::Api::V2::ResourceSerializerConcern
7
+
8
+ belongs_to :country
9
+ belongs_to :state
10
+ belongs_to :user
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class BaseSerializer < ::Harpiya::Api::V2::BaseSerializer
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class CountrySerializer < BaseSerializer
6
+ include ::Harpiya::Api::V2::ResourceSerializerConcern
7
+
8
+ has_many :states
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class ImageSerializer < BaseSerializer
6
+ include ::Harpiya::Api::V2::ResourceSerializerConcern
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class MenuItemSerializer < BaseSerializer
6
+ include ::Harpiya::Api::V2::ResourceSerializerConcern
7
+
8
+ has_one :image,
9
+ object_method_name: :icon,
10
+ id_method_name: :icon_id,
11
+ record_type: :image,
12
+ serializer: :image
13
+
14
+ belongs_to :menu
15
+ belongs_to :parent, record_type: :menu_item, serializer: :menu_item
16
+
17
+ has_many :children, record_type: :menu_item, serializer: :menu_item
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class MenuSerializer < BaseSerializer
6
+ include ::Harpiya::Api::V2::ResourceSerializerConcern
7
+
8
+ belongs_to :store
9
+ has_many :menu_items
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class OptionTypeSerializer < BaseSerializer
6
+ include ::Harpiya::Api::V2::ResourceSerializerConcern
7
+
8
+ has_many :option_values
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class OptionValueSerializer < BaseSerializer
6
+ include ::Harpiya::Api::V2::ResourceSerializerConcern
7
+
8
+ belongs_to :option_type
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class ProductPropertySerializer < BaseSerializer
6
+ include ::Harpiya::Api::V2::ResourceSerializerConcern
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ module Harpiya
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class ProductSerializer < BaseSerializer
6
+ include ::Harpiya::Api::V2::ResourceSerializerConcern
7
+
8
+ has_many :variants
9
+ has_many :option_types
10
+ has_many :product_properties
11
+ has_many :taxons
12
+
13
+ has_many :images,
14
+ object_method_name: :variant_images,
15
+ id_method_name: :variant_image_ids,
16
+ record_type: :image,
17
+ serializer: :image
18
+
19
+ has_one :default_variant,
20
+ object_method_name: :default_variant,
21
+ id_method_name: :default_variant_id,
22
+ record_type: :variant,
23
+ serializer: :variant
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end