spree_api 4.4.0 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (176) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/spree/api/v2/product_list_includes.rb +10 -8
  3. data/app/controllers/spree/api/v2/platform/orders_controller.rb +1 -1
  4. data/app/controllers/spree/api/v2/platform/products_controller.rb +5 -1
  5. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +1 -1
  6. data/app/controllers/spree/api/v2/storefront/digitals_controller.rb +5 -1
  7. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +4 -0
  8. data/app/helpers/spree/api/v2/store_media_serializer_images_concern.rb +35 -0
  9. data/app/models/concerns/spree/webhooks/has_webhooks.rb +31 -7
  10. data/app/models/spree/api/webhooks/product_decorator.rb +21 -2
  11. data/app/models/spree/webhooks/subscriber.rb +4 -0
  12. data/app/serializers/spree/api/v2/platform/cms_section_image_one_serializer.rb +9 -0
  13. data/app/serializers/spree/api/v2/platform/cms_section_image_three_serializer.rb +9 -0
  14. data/app/serializers/spree/api/v2/platform/cms_section_image_two_serializer.rb +9 -0
  15. data/app/serializers/spree/api/v2/platform/hero_image_serializer.rb +10 -0
  16. data/app/serializers/spree/api/v2/platform/image_gallery_serializer.rb +10 -0
  17. data/app/serializers/spree/api/v2/platform/side_by_side_image_serializer.rb +10 -0
  18. data/app/serializers/spree/api/v2/platform/store_serializer.rb +1 -0
  19. data/app/serializers/spree/api/v2/platform/user_serializer.rb +1 -1
  20. data/app/serializers/spree/v2/storefront/cms_section_serializer.rb +3 -3
  21. data/app/serializers/spree/v2/storefront/order_serializer.rb +9 -0
  22. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +1 -1
  23. data/app/serializers/spree/v2/storefront/product_serializer.rb +1 -1
  24. data/app/serializers/spree/v2/storefront/shipment_serializer.rb +3 -0
  25. data/app/serializers/spree/v2/storefront/store_serializer.rb +5 -10
  26. data/app/serializers/spree/v2/storefront/user_serializer.rb +1 -1
  27. data/app/serializers/spree/v2/storefront/variant_serializer.rb +1 -1
  28. data/app/services/spree/webhooks/subscribers/queue_requests.rb +8 -2
  29. data/config/routes.rb +1 -120
  30. data/docs/v2/platform/index.yaml +1597 -998
  31. data/docs/v2/storefront/index.yaml +357 -33
  32. data/lib/spree/api/configuration.rb +11 -0
  33. data/lib/spree/api/dependencies.rb +165 -0
  34. data/lib/spree/api/engine.rb +5 -16
  35. data/lib/spree/api/testing_support/v2/platform_contexts.rb +0 -1
  36. data/lib/spree/api.rb +0 -4
  37. data/lib/spree_api.rb +0 -1
  38. data/spree_api.gemspec +0 -2
  39. metadata +16 -177
  40. data/app/controllers/spree/api/base_controller.rb +0 -171
  41. data/app/controllers/spree/api/v1/addresses_controller.rb +0 -46
  42. data/app/controllers/spree/api/v1/checkouts_controller.rb +0 -106
  43. data/app/controllers/spree/api/v1/classifications_controller.rb +0 -21
  44. data/app/controllers/spree/api/v1/countries_controller.rb +0 -22
  45. data/app/controllers/spree/api/v1/credit_cards_controller.rb +0 -26
  46. data/app/controllers/spree/api/v1/customer_returns_controller.rb +0 -25
  47. data/app/controllers/spree/api/v1/images_controller.rb +0 -58
  48. data/app/controllers/spree/api/v1/inventory_units_controller.rb +0 -54
  49. data/app/controllers/spree/api/v1/line_items_controller.rb +0 -70
  50. data/app/controllers/spree/api/v1/option_types_controller.rb +0 -60
  51. data/app/controllers/spree/api/v1/option_values_controller.rb +0 -62
  52. data/app/controllers/spree/api/v1/orders_controller.rb +0 -160
  53. data/app/controllers/spree/api/v1/payments_controller.rb +0 -82
  54. data/app/controllers/spree/api/v1/product_properties_controller.rb +0 -73
  55. data/app/controllers/spree/api/v1/products_controller.rb +0 -131
  56. data/app/controllers/spree/api/v1/promotions_controller.rb +0 -30
  57. data/app/controllers/spree/api/v1/properties_controller.rb +0 -70
  58. data/app/controllers/spree/api/v1/reimbursements_controller.rb +0 -25
  59. data/app/controllers/spree/api/v1/return_authorizations_controller.rb +0 -70
  60. data/app/controllers/spree/api/v1/shipments_controller.rb +0 -196
  61. data/app/controllers/spree/api/v1/states_controller.rb +0 -36
  62. data/app/controllers/spree/api/v1/stock_items_controller.rb +0 -82
  63. data/app/controllers/spree/api/v1/stock_locations_controller.rb +0 -53
  64. data/app/controllers/spree/api/v1/stock_movements_controller.rb +0 -45
  65. data/app/controllers/spree/api/v1/stores_controller.rb +0 -56
  66. data/app/controllers/spree/api/v1/taxonomies_controller.rb +0 -67
  67. data/app/controllers/spree/api/v1/taxons_controller.rb +0 -100
  68. data/app/controllers/spree/api/v1/users_controller.rb +0 -97
  69. data/app/controllers/spree/api/v1/variants_controller.rb +0 -81
  70. data/app/controllers/spree/api/v1/zones_controller.rb +0 -55
  71. data/app/helpers/spree/api/api_helpers.rb +0 -190
  72. data/app/models/spree/api_configuration.rb +0 -10
  73. data/app/views/spree/api/errors/gateway_error.rabl +0 -2
  74. data/app/views/spree/api/errors/invalid_api_key.rabl +0 -2
  75. data/app/views/spree/api/errors/invalid_resource.rabl +0 -3
  76. data/app/views/spree/api/errors/must_specify_api_key.rabl +0 -2
  77. data/app/views/spree/api/errors/not_found.rabl +0 -2
  78. data/app/views/spree/api/errors/unauthorized.rabl +0 -2
  79. data/app/views/spree/api/v1/addresses/show.rabl +0 -10
  80. data/app/views/spree/api/v1/adjustments/show.rabl +0 -4
  81. data/app/views/spree/api/v1/countries/index.rabl +0 -7
  82. data/app/views/spree/api/v1/countries/show.rabl +0 -5
  83. data/app/views/spree/api/v1/credit_cards/index.rabl +0 -7
  84. data/app/views/spree/api/v1/credit_cards/show.rabl +0 -3
  85. data/app/views/spree/api/v1/customer_returns/index.rabl +0 -7
  86. data/app/views/spree/api/v1/images/index.rabl +0 -4
  87. data/app/views/spree/api/v1/images/new.rabl +0 -3
  88. data/app/views/spree/api/v1/images/show.rabl +0 -6
  89. data/app/views/spree/api/v1/inventory_units/show.rabl +0 -2
  90. data/app/views/spree/api/v1/line_items/new.rabl +0 -3
  91. data/app/views/spree/api/v1/line_items/show.rabl +0 -14
  92. data/app/views/spree/api/v1/option_types/index.rabl +0 -3
  93. data/app/views/spree/api/v1/option_types/new.rabl +0 -3
  94. data/app/views/spree/api/v1/option_types/show.rabl +0 -5
  95. data/app/views/spree/api/v1/option_values/index.rabl +0 -3
  96. data/app/views/spree/api/v1/option_values/new.rabl +0 -3
  97. data/app/views/spree/api/v1/option_values/show.rabl +0 -2
  98. data/app/views/spree/api/v1/orders/address.rabl +0 -0
  99. data/app/views/spree/api/v1/orders/canceled.rabl +0 -0
  100. data/app/views/spree/api/v1/orders/cart.rabl +0 -0
  101. data/app/views/spree/api/v1/orders/complete.rabl +0 -0
  102. data/app/views/spree/api/v1/orders/could_not_apply_coupon.rabl +0 -2
  103. data/app/views/spree/api/v1/orders/could_not_transition.rabl +0 -3
  104. data/app/views/spree/api/v1/orders/index.rabl +0 -7
  105. data/app/views/spree/api/v1/orders/insufficient_quantity.rabl +0 -2
  106. data/app/views/spree/api/v1/orders/invalid_shipping_method.rabl +0 -2
  107. data/app/views/spree/api/v1/orders/mine.rabl +0 -9
  108. data/app/views/spree/api/v1/orders/order.rabl +0 -10
  109. data/app/views/spree/api/v1/orders/payment.rabl +0 -3
  110. data/app/views/spree/api/v1/orders/show.rabl +0 -51
  111. data/app/views/spree/api/v1/payments/credit_over_limit.rabl +0 -2
  112. data/app/views/spree/api/v1/payments/index.rabl +0 -7
  113. data/app/views/spree/api/v1/payments/new.rabl +0 -5
  114. data/app/views/spree/api/v1/payments/show.rabl +0 -2
  115. data/app/views/spree/api/v1/payments/update_forbidden.rabl +0 -2
  116. data/app/views/spree/api/v1/product_properties/index.rabl +0 -7
  117. data/app/views/spree/api/v1/product_properties/new.rabl +0 -2
  118. data/app/views/spree/api/v1/product_properties/show.rabl +0 -2
  119. data/app/views/spree/api/v1/products/index.rabl +0 -9
  120. data/app/views/spree/api/v1/products/new.rabl +0 -3
  121. data/app/views/spree/api/v1/products/product.rabl +0 -1
  122. data/app/views/spree/api/v1/products/show.rabl +0 -36
  123. data/app/views/spree/api/v1/promotions/handler.rabl +0 -5
  124. data/app/views/spree/api/v1/promotions/show.rabl +0 -2
  125. data/app/views/spree/api/v1/properties/index.rabl +0 -7
  126. data/app/views/spree/api/v1/properties/new.rabl +0 -2
  127. data/app/views/spree/api/v1/properties/show.rabl +0 -2
  128. data/app/views/spree/api/v1/reimbursements/index.rabl +0 -7
  129. data/app/views/spree/api/v1/return_authorizations/index.rabl +0 -7
  130. data/app/views/spree/api/v1/return_authorizations/new.rabl +0 -3
  131. data/app/views/spree/api/v1/return_authorizations/show.rabl +0 -2
  132. data/app/views/spree/api/v1/shared/stock_location_required.rabl +0 -2
  133. data/app/views/spree/api/v1/shipments/big.rabl +0 -48
  134. data/app/views/spree/api/v1/shipments/cannot_ready_shipment.rabl +0 -2
  135. data/app/views/spree/api/v1/shipments/mine.rabl +0 -9
  136. data/app/views/spree/api/v1/shipments/show.rabl +0 -32
  137. data/app/views/spree/api/v1/shipments/small.rabl +0 -37
  138. data/app/views/spree/api/v1/shipping_rates/show.rabl +0 -2
  139. data/app/views/spree/api/v1/states/index.rabl +0 -12
  140. data/app/views/spree/api/v1/states/show.rabl +0 -2
  141. data/app/views/spree/api/v1/stock_items/index.rabl +0 -7
  142. data/app/views/spree/api/v1/stock_items/show.rabl +0 -5
  143. data/app/views/spree/api/v1/stock_locations/index.rabl +0 -7
  144. data/app/views/spree/api/v1/stock_locations/show.rabl +0 -8
  145. data/app/views/spree/api/v1/stock_movements/index.rabl +0 -7
  146. data/app/views/spree/api/v1/stock_movements/show.rabl +0 -5
  147. data/app/views/spree/api/v1/stores/index.rabl +0 -4
  148. data/app/views/spree/api/v1/stores/show.rabl +0 -2
  149. data/app/views/spree/api/v1/tags/index.rabl +0 -9
  150. data/app/views/spree/api/v1/taxonomies/index.rabl +0 -7
  151. data/app/views/spree/api/v1/taxonomies/jstree.rabl +0 -7
  152. data/app/views/spree/api/v1/taxonomies/nested.rabl +0 -11
  153. data/app/views/spree/api/v1/taxonomies/new.rabl +0 -3
  154. data/app/views/spree/api/v1/taxonomies/show.rabl +0 -15
  155. data/app/views/spree/api/v1/taxons/index.rabl +0 -10
  156. data/app/views/spree/api/v1/taxons/jstree.rabl +0 -7
  157. data/app/views/spree/api/v1/taxons/new.rabl +0 -3
  158. data/app/views/spree/api/v1/taxons/show.rabl +0 -6
  159. data/app/views/spree/api/v1/taxons/taxons.rabl +0 -5
  160. data/app/views/spree/api/v1/users/index.rabl +0 -7
  161. data/app/views/spree/api/v1/users/new.rabl +0 -3
  162. data/app/views/spree/api/v1/users/show.rabl +0 -11
  163. data/app/views/spree/api/v1/variants/big.rabl +0 -14
  164. data/app/views/spree/api/v1/variants/index.rabl +0 -9
  165. data/app/views/spree/api/v1/variants/new.rabl +0 -2
  166. data/app/views/spree/api/v1/variants/show.rabl +0 -3
  167. data/app/views/spree/api/v1/variants/small.rabl +0 -18
  168. data/app/views/spree/api/v1/zones/index.rabl +0 -7
  169. data/app/views/spree/api/v1/zones/show.rabl +0 -6
  170. data/config/initializers/rabl.rb +0 -9
  171. data/lib/spree/api/api_dependencies.rb +0 -163
  172. data/lib/spree/api/controller_setup.rb +0 -19
  173. data/lib/spree/api/responders/rabl_template.rb +0 -28
  174. data/lib/spree/api/responders.rb +0 -11
  175. data/lib/spree/api/testing_support/helpers.rb +0 -44
  176. data/lib/spree/api/testing_support/setup.rb +0 -16
@@ -1,62 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class OptionValuesController < Spree::Api::BaseController
5
- def index
6
- @option_values = if params[:ids]
7
- scope.where(id: params[:ids])
8
- else
9
- scope.ransack(params[:q]).result.distinct
10
- end
11
- respond_with(@option_values)
12
- end
13
-
14
- def show
15
- @option_value = scope.find(params[:id])
16
- respond_with(@option_value)
17
- end
18
-
19
- def new; end
20
-
21
- def create
22
- authorize! :create, Spree::OptionValue
23
- @option_value = scope.new(option_value_params)
24
- if @option_value.save
25
- render :show, status: 201
26
- else
27
- invalid_resource!(@option_value)
28
- end
29
- end
30
-
31
- def update
32
- @option_value = scope.accessible_by(current_ability, :update).find(params[:id])
33
- if @option_value.update(option_value_params)
34
- render :show
35
- else
36
- invalid_resource!(@option_value)
37
- end
38
- end
39
-
40
- def destroy
41
- @option_value = scope.accessible_by(current_ability, :destroy).find(params[:id])
42
- @option_value.destroy
43
- render plain: nil, status: 204
44
- end
45
-
46
- private
47
-
48
- def scope
49
- @scope ||= if params[:option_type_id]
50
- Spree::OptionType.find(params[:option_type_id]).option_values.accessible_by(current_ability, :show)
51
- else
52
- Spree::OptionValue.accessible_by(current_ability, :show).load
53
- end
54
- end
55
-
56
- def option_value_params
57
- params.require(:option_value).permit(permitted_option_value_attributes)
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,160 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class OrdersController < Spree::Api::BaseController
5
- skip_before_action :authenticate_user, only: :apply_coupon_code
6
-
7
- before_action :find_order, except: [:create, :mine, :current, :index, :update, :remove_coupon_code]
8
-
9
- # Dynamically defines our stores checkout steps to ensure we check authorization on each step.
10
- Order.checkout_steps.keys.each do |step|
11
- define_method step do
12
- find_order
13
- authorize! :update, @order, params[:token]
14
- end
15
- end
16
-
17
- def cancel
18
- authorize! :update, @order, params[:token]
19
- @order.canceled_by(current_api_user)
20
- respond_with(@order, default_template: :show)
21
- end
22
-
23
- def approve
24
- authorize! :approve, @order, params[:token]
25
- @order.approved_by(current_api_user)
26
- respond_with(@order, default_template: :show)
27
- end
28
-
29
- def create
30
- authorize! :create, Spree::Order
31
- if can?(:admin, Spree::Order)
32
- order_user = if @current_user_roles.include?('admin') && order_params[:user_id]
33
- Spree.user_class.find(order_params[:user_id])
34
- else
35
- current_api_user
36
- end
37
-
38
- import_params = if @current_user_roles.include?('admin')
39
- params[:order].present? ? params[:order].permit! : {}
40
- else
41
- order_params
42
- end
43
-
44
- @order = Spree::Core::Importer::Order.import(order_user, import_params)
45
-
46
- respond_with(@order, default_template: :show, status: 201)
47
- else
48
- @order = Spree::Order.create!(user: current_api_user, store: current_store)
49
- if Cart::Update.call(order: @order, params: order_params).success?
50
- respond_with(@order, default_template: :show, status: 201)
51
- else
52
- invalid_resource!(@order)
53
- end
54
- end
55
- end
56
-
57
- def empty
58
- authorize! :update, @order, order_token
59
- cart_empty_service.call(order: @order)
60
- render plain: nil, status: 204
61
- end
62
-
63
- def index
64
- authorize! :index, Order
65
- @orders = Order.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
66
- respond_with(@orders)
67
- end
68
-
69
- def show
70
- authorize! :show, @order, order_token
71
- respond_with(@order)
72
- end
73
-
74
- def update
75
- find_order(true)
76
- authorize! :update, @order, order_token
77
-
78
- if Cart::Update.call(order: @order, params: order_params).success?
79
- user_id = params[:order][:user_id]
80
- if current_api_user.has_spree_role?('admin') && user_id
81
- @order.associate_user!(Spree.user_class.find(user_id))
82
- end
83
- respond_with(@order, default_template: :show)
84
- else
85
- invalid_resource!(@order)
86
- end
87
- end
88
-
89
- def current
90
- @order = find_current_order
91
- if @order
92
- respond_with(@order, default_template: :show, locals: { root_object: @order })
93
- else
94
- head :no_content
95
- end
96
- end
97
-
98
- def mine
99
- if current_api_user.persisted?
100
- @orders = current_api_user.orders.reverse_chronological.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
101
- else
102
- render 'spree/api/errors/unauthorized', status: :unauthorized
103
- end
104
- end
105
-
106
- def apply_coupon_code
107
- find_order
108
- authorize! :update, @order, order_token
109
- @order.coupon_code = params[:coupon_code]
110
- @handler = PromotionHandler::Coupon.new(@order).apply
111
- status = @handler.successful? ? 200 : 422
112
- render 'spree/api/v1/promotions/handler', status: status
113
- end
114
-
115
- def remove_coupon_code
116
- find_order(true)
117
- authorize! :update, @order, order_token
118
- @handler = Spree::PromotionHandler::Coupon.new(@order).remove(params[:coupon_code])
119
- status = @handler.successful? ? 200 : 404
120
- render 'spree/api/v1/promotions/handler', status: status
121
- end
122
-
123
- private
124
-
125
- def order_params
126
- if params[:order]
127
- normalize_params
128
- params.require(:order).permit(permitted_order_attributes)
129
- else
130
- {}
131
- end
132
- end
133
-
134
- def normalize_params
135
- params[:order][:payments_attributes] = params[:order].delete(:payments) if params[:order][:payments]
136
- params[:order][:shipments_attributes] = params[:order].delete(:shipments) if params[:order][:shipments]
137
- params[:order][:line_items_attributes] = params[:order].delete(:line_items) if params[:order][:line_items]
138
- params[:order][:ship_address_attributes] = params[:order].delete(:ship_address) if params[:order][:ship_address]
139
- params[:order][:bill_address_attributes] = params[:order].delete(:bill_address) if params[:order][:bill_address]
140
- end
141
-
142
- def find_order(lock = false)
143
- @order = Spree::Order.lock(lock).find_by!(number: params[:id])
144
- end
145
-
146
- def find_current_order
147
- current_api_user ? current_api_user.orders.incomplete.order(:created_at).last : nil
148
- end
149
-
150
- def order_id
151
- super || params[:id]
152
- end
153
-
154
- def cart_empty_service
155
- Spree::Dependencies.cart_empty_service.constantize
156
- end
157
- end
158
- end
159
- end
160
- end
@@ -1,82 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class PaymentsController < Spree::Api::BaseController
5
- before_action :find_order
6
- before_action :find_payment, only: [:update, :show, :authorize, :purchase, :capture, :void]
7
-
8
- def index
9
- @payments = @order.payments.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
10
- respond_with(@payments)
11
- end
12
-
13
- def new
14
- @payment_methods = Spree::PaymentMethod.available
15
- respond_with(@payment_methods)
16
- end
17
-
18
- def create
19
- @order.validate_payments_attributes([payment_params])
20
- @payment = @order.payments.build(payment_params)
21
- if @payment.save
22
- respond_with(@payment, status: 201, default_template: :show)
23
- else
24
- invalid_resource!(@payment)
25
- end
26
- end
27
-
28
- def update
29
- authorize! params[:action], @payment
30
- if !@payment.editable?
31
- render 'update_forbidden', status: 403
32
- elsif @payment.update(payment_params)
33
- respond_with(@payment, default_template: :show)
34
- else
35
- invalid_resource!(@payment)
36
- end
37
- end
38
-
39
- def show
40
- respond_with(@payment)
41
- end
42
-
43
- def authorize
44
- perform_payment_action(:authorize)
45
- end
46
-
47
- def capture
48
- perform_payment_action(:capture)
49
- end
50
-
51
- def purchase
52
- perform_payment_action(:purchase)
53
- end
54
-
55
- def void
56
- perform_payment_action(:void_transaction)
57
- end
58
-
59
- private
60
-
61
- def find_order
62
- @order = Spree::Order.find_by!(number: order_id)
63
- authorize! :show, @order, order_token
64
- end
65
-
66
- def find_payment
67
- @payment = @order.payments.find_by!(number: params[:id])
68
- end
69
-
70
- def perform_payment_action(action, *args)
71
- authorize! action, Payment
72
- @payment.send("#{action}!", *args)
73
- respond_with(@payment, default_template: :show)
74
- end
75
-
76
- def payment_params
77
- params.require(:payment).permit(permitted_payment_attributes)
78
- end
79
- end
80
- end
81
- end
82
- end
@@ -1,73 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class ProductPropertiesController < Spree::Api::BaseController
5
- before_action :find_product, :authorize_product!
6
- before_action :product_property, only: [:show, :update, :destroy]
7
-
8
- def index
9
- @product_properties = @product.product_properties.accessible_by(current_ability).
10
- ransack(params[:q]).result.
11
- page(params[:page]).per(params[:per_page])
12
- respond_with(@product_properties)
13
- end
14
-
15
- def show
16
- respond_with(@product_property)
17
- end
18
-
19
- def new; end
20
-
21
- def create
22
- authorize! :create, ProductProperty
23
- @product_property = @product.product_properties.new(product_property_params)
24
- if @product_property.save
25
- respond_with(@product_property, status: 201, default_template: :show)
26
- else
27
- invalid_resource!(@product_property)
28
- end
29
- end
30
-
31
- def update
32
- authorize! :update, @product_property
33
-
34
- if @product_property.update(product_property_params)
35
- respond_with(@product_property, status: 200, default_template: :show)
36
- else
37
- invalid_resource!(@product_property)
38
- end
39
- end
40
-
41
- def destroy
42
- authorize! :destroy, @product_property
43
- @product_property.destroy
44
- respond_with(@product_property, status: 204)
45
- end
46
-
47
- private
48
-
49
- def find_product
50
- super(params[:product_id])
51
- end
52
-
53
- def authorize_product!
54
- authorize! :show, @product
55
- end
56
-
57
- def product_property
58
- if @product
59
- @product_property ||= @product.product_properties.find_by(id: params[:id])
60
- @product_property ||= @product.product_properties.includes(:property).where(spree_properties: { name: params[:id] }).first
61
- raise ActiveRecord::RecordNotFound unless @product_property
62
-
63
- authorize! :show, @product_property
64
- end
65
- end
66
-
67
- def product_property_params
68
- params.require(:product_property).permit(permitted_product_properties_attributes)
69
- end
70
- end
71
- end
72
- end
73
- end
@@ -1,131 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class ProductsController < Spree::Api::BaseController
5
- before_action :find_product, only: [:update, :show, :destroy]
6
-
7
- def index
8
- @products = if params[:ids]
9
- product_scope.where(id: params[:ids].split(',').flatten)
10
- else
11
- product_scope.ransack(params[:q]).result
12
- end
13
-
14
- @products = @products.distinct.page(params[:page]).per(params[:per_page])
15
- expires_in 15.minutes, public: true
16
- headers['Surrogate-Control'] = "max-age=#{15.minutes}"
17
- respond_with(@products)
18
- end
19
-
20
- def show
21
- expires_in 15.minutes, public: true
22
- headers['Surrogate-Control'] = "max-age=#{15.minutes}"
23
- headers['Surrogate-Key'] = 'product_id=1'
24
- respond_with(@product)
25
- end
26
-
27
- # Takes besides the products attributes either an array of variants or
28
- # an array of option types.
29
- #
30
- # By submitting an array of variants the option types will be created
31
- # using the *name* key in options hash. e.g
32
- #
33
- # product: {
34
- # ...
35
- # variants: {
36
- # price: 19.99,
37
- # sku: "hey_you",
38
- # options: [
39
- # { name: "size", value: "small" },
40
- # { name: "color", value: "black" }
41
- # ]
42
- # }
43
- # }
44
- #
45
- # Or just pass in the option types hash:
46
- #
47
- # product: {
48
- # ...
49
- # option_types: ['size', 'color']
50
- # }
51
- #
52
- # By passing the shipping category name you can fetch or create that
53
- # shipping category on the fly. e.g.
54
- #
55
- # product: {
56
- # ...
57
- # shipping_category: "Free Shipping Items"
58
- # }
59
- #
60
- def new; end
61
-
62
- def create
63
- authorize! :create, Product
64
- params[:product][:available_on] ||= Time.current
65
- set_up_shipping_category
66
-
67
- options = { store: current_store, variants_attrs: variants_params, options_attrs: option_types_params }
68
- @product = Core::Importer::Product.new(nil, product_params, options).create
69
-
70
- if @product.persisted?
71
- respond_with(@product, status: 201, default_template: :show)
72
- else
73
- invalid_resource!(@product)
74
- end
75
- end
76
-
77
- def update
78
- authorize! :update, @product
79
-
80
- options = { store: current_store, variants_attrs: variants_params, options_attrs: option_types_params }
81
- @product = Core::Importer::Product.new(@product, product_params, options).update
82
-
83
- if @product.errors.empty?
84
- respond_with(@product.reload, status: 200, default_template: :show)
85
- else
86
- invalid_resource!(@product)
87
- end
88
- end
89
-
90
- def destroy
91
- authorize! :destroy, @product
92
- @product.destroy
93
- respond_with(@product, status: 204)
94
- end
95
-
96
- private
97
-
98
- def product_params
99
- params.require(:product).permit(permitted_product_attributes)
100
- end
101
-
102
- def variants_params
103
- variants_key = if params[:product].key? :variants
104
- :variants
105
- else
106
- :variants_attributes
107
- end
108
-
109
- params.require(:product).permit(
110
- variants_key => [permitted_variant_attributes, :id]
111
- ).delete(variants_key) || []
112
- end
113
-
114
- def option_types_params
115
- params[:product].fetch(:option_types, [])
116
- end
117
-
118
- def find_product
119
- super(params[:id])
120
- end
121
-
122
- def set_up_shipping_category
123
- if shipping_category = params[:product].delete(:shipping_category)
124
- id = ShippingCategory.find_or_create_by(name: shipping_category).id
125
- params[:product][:shipping_category_id] = id
126
- end
127
- end
128
- end
129
- end
130
- end
131
- end
@@ -1,30 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class PromotionsController < Spree::Api::BaseController
5
- before_action :requires_admin
6
- before_action :load_promotion
7
-
8
- def show
9
- if @promotion
10
- respond_with(@promotion, default_template: :show)
11
- else
12
- raise ActiveRecord::RecordNotFound
13
- end
14
- end
15
-
16
- private
17
-
18
- def requires_admin
19
- return if @current_user_roles.include?('admin')
20
-
21
- unauthorized and return
22
- end
23
-
24
- def load_promotion
25
- @promotion = Spree::Promotion.find_by(id: params[:id]) || Spree::Promotion.with_coupon_code(params[:id])
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,70 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class PropertiesController < Spree::Api::BaseController
5
- before_action :find_property, only: [:show, :update, :destroy]
6
-
7
- def index
8
- @properties = Spree::Property.accessible_by(current_ability)
9
-
10
- @properties = if params[:ids]
11
- @properties.where(id: params[:ids].split(',').flatten)
12
- else
13
- @properties.ransack(params[:q]).result
14
- end
15
-
16
- @properties = @properties.page(params[:page]).per(params[:per_page])
17
- respond_with(@properties)
18
- end
19
-
20
- def show
21
- respond_with(@property)
22
- end
23
-
24
- def new; end
25
-
26
- def create
27
- authorize! :create, Property
28
- @property = Spree::Property.new(property_params)
29
- if @property.save
30
- respond_with(@property, status: 201, default_template: :show)
31
- else
32
- invalid_resource!(@property)
33
- end
34
- end
35
-
36
- def update
37
- if @property
38
- authorize! :update, @property
39
- @property.update(property_params)
40
- respond_with(@property, status: 200, default_template: :show)
41
- else
42
- invalid_resource!(@property)
43
- end
44
- end
45
-
46
- def destroy
47
- if @property
48
- authorize! :destroy, @property
49
- @property.destroy
50
- respond_with(@property, status: 204)
51
- else
52
- invalid_resource!(@property)
53
- end
54
- end
55
-
56
- private
57
-
58
- def find_property
59
- @property = Spree::Property.accessible_by(current_ability, :show).find(params[:id])
60
- rescue ActiveRecord::RecordNotFound
61
- @property = Spree::Property.accessible_by(current_ability, :show).find_by!(name: params[:id])
62
- end
63
-
64
- def property_params
65
- params.require(:property).permit(permitted_property_attributes)
66
- end
67
- end
68
- end
69
- end
70
- end
@@ -1,25 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class ReimbursementsController < Spree::Api::BaseController
5
- def index
6
- collection(Spree::Reimbursement)
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