workarea-api-admin 4.4.6
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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/README.md +82 -0
- data/Rakefile +10 -0
- data/app/assets/images/workarea/api/admin/icons/api.svg +1 -0
- data/app/controllers/workarea/api/admin/application_controller.rb +73 -0
- data/app/controllers/workarea/api/admin/categories_controller.rb +305 -0
- data/app/controllers/workarea/api/admin/category_product_rules_controller.rb +232 -0
- data/app/controllers/workarea/api/admin/content_assets_controller.rb +299 -0
- data/app/controllers/workarea/api/admin/content_controller.rb +268 -0
- data/app/controllers/workarea/api/admin/discounts_controller.rb +271 -0
- data/app/controllers/workarea/api/admin/email_signups_controller.rb +108 -0
- data/app/controllers/workarea/api/admin/fulfillments_controller.rb +268 -0
- data/app/controllers/workarea/api/admin/inventory_skus_controller.rb +305 -0
- data/app/controllers/workarea/api/admin/navigation_menus_controller.rb +267 -0
- data/app/controllers/workarea/api/admin/navigation_taxons_controller.rb +305 -0
- data/app/controllers/workarea/api/admin/orders_controller.rb +160 -0
- data/app/controllers/workarea/api/admin/pages_controller.rb +305 -0
- data/app/controllers/workarea/api/admin/payment_profiles_controller.rb +305 -0
- data/app/controllers/workarea/api/admin/payment_transactions_controller.rb +108 -0
- data/app/controllers/workarea/api/admin/payments_controller.rb +115 -0
- data/app/controllers/workarea/api/admin/prices_controller.rb +232 -0
- data/app/controllers/workarea/api/admin/pricing_skus_controller.rb +305 -0
- data/app/controllers/workarea/api/admin/product_images_controller.rb +232 -0
- data/app/controllers/workarea/api/admin/products_controller.rb +305 -0
- data/app/controllers/workarea/api/admin/promo_code_lists_controller.rb +305 -0
- data/app/controllers/workarea/api/admin/recommendation_settings_controller.rb +122 -0
- data/app/controllers/workarea/api/admin/redirects_controller.rb +305 -0
- data/app/controllers/workarea/api/admin/releases_controller.rb +304 -0
- data/app/controllers/workarea/api/admin/saved_addresses_controller.rb +232 -0
- data/app/controllers/workarea/api/admin/saved_credit_cards_controller.rb +256 -0
- data/app/controllers/workarea/api/admin/shipping_rates_controller.rb +232 -0
- data/app/controllers/workarea/api/admin/shipping_services_controller.rb +299 -0
- data/app/controllers/workarea/api/admin/shippings_controller.rb +105 -0
- data/app/controllers/workarea/api/admin/swagger_controller.rb +41 -0
- data/app/controllers/workarea/api/admin/tax_categories_controller.rb +242 -0
- data/app/controllers/workarea/api/admin/tax_rates_controller.rb +292 -0
- data/app/controllers/workarea/api/admin/users_controller.rb +296 -0
- data/app/controllers/workarea/api/admin/variants_controller.rb +232 -0
- data/app/models/workarea/api/admin/bulk_upsert.rb +74 -0
- data/app/models/workarea/user.decorator +7 -0
- data/app/views/workarea/admin/users/_api_permissions.html.haml +6 -0
- data/app/workers/workarea/perform_api_bulk_upsert.rb +15 -0
- data/bin/rails +18 -0
- data/config/initializers/append_points.rb +4 -0
- data/config/initializers/config.rb +15 -0
- data/config/locales/en.yml +9 -0
- data/config/routes.rb +81 -0
- data/lib/workarea/api/admin.rb +21 -0
- data/lib/workarea/api/admin/engine.rb +14 -0
- data/lib/workarea/api/admin/swagger.rb +106 -0
- data/test/documentation/workarea/api/admin/categories_documentation_test.rb +106 -0
- data/test/documentation/workarea/api/admin/category_product_rules_documentation_test.rb +78 -0
- data/test/documentation/workarea/api/admin/content_assets_documentation_test.rb +94 -0
- data/test/documentation/workarea/api/admin/content_documentation_test.rb +87 -0
- data/test/documentation/workarea/api/admin/discounts_documentation_test.rb +85 -0
- data/test/documentation/workarea/api/admin/email_signups_documentation_test.rb +41 -0
- data/test/documentation/workarea/api/admin/fulfillment_documentation_test.rb +84 -0
- data/test/documentation/workarea/api/admin/inventory_skus_documentation_test.rb +95 -0
- data/test/documentation/workarea/api/admin/navigation_menus_documentation_test.rb +81 -0
- data/test/documentation/workarea/api/admin/navigation_taxons_documentation_test.rb +94 -0
- data/test/documentation/workarea/api/admin/orders_documentation_test.rb +65 -0
- data/test/documentation/workarea/api/admin/pages_documentation_test.rb +93 -0
- data/test/documentation/workarea/api/admin/payment_profiles_documentation_test.rb +98 -0
- data/test/documentation/workarea/api/admin/payment_transactions_documentation_test.rb +43 -0
- data/test/documentation/workarea/api/admin/payments_documentation_test.rb +41 -0
- data/test/documentation/workarea/api/admin/prices_documentation_test.rb +82 -0
- data/test/documentation/workarea/api/admin/pricing_skus_documentation_test.rb +95 -0
- data/test/documentation/workarea/api/admin/product_images_documentation_test.rb +101 -0
- data/test/documentation/workarea/api/admin/products_documentation_test.rb +96 -0
- data/test/documentation/workarea/api/admin/promo_code_lists_documentation_test.rb +94 -0
- data/test/documentation/workarea/api/admin/recommendation_settings_documentation_test.rb +37 -0
- data/test/documentation/workarea/api/admin/redirects_documentation_test.rb +96 -0
- data/test/documentation/workarea/api/admin/release_changes_documentation_test.rb +32 -0
- data/test/documentation/workarea/api/admin/releases_documentation_test.rb +93 -0
- data/test/documentation/workarea/api/admin/saved_addresses_documentation_test.rb +92 -0
- data/test/documentation/workarea/api/admin/saved_credit_cards_documentation_test.rb +86 -0
- data/test/documentation/workarea/api/admin/shipping_rates_documentation_test.rb +78 -0
- data/test/documentation/workarea/api/admin/shipping_services_documentation_test.rb +93 -0
- data/test/documentation/workarea/api/admin/shippings_documentation_test.rb +41 -0
- data/test/documentation/workarea/api/admin/tax_categories_documentation_test.rb +95 -0
- data/test/documentation/workarea/api/admin/tax_rates_documentation_test.rb +78 -0
- data/test/documentation/workarea/api/admin/users_documentation_test.rb +99 -0
- data/test/documentation/workarea/api/admin/variants_documentation_test.rb +80 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/.keep +0 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +34 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +25 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +9 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +55 -0
- data/test/dummy/config/environments/production.rb +86 -0
- data/test/dummy/config/environments/test.rb +43 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/new_framework_defaults.rb +21 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/workarea.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/puma.rb +47 -0
- data/test/dummy/config/routes.rb +6 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/db/seeds.rb +2 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/test/dummy/public/apple-touch-icon.png +0 -0
- data/test/dummy/public/favicon.ico +1 -0
- data/test/integration/workarea/api/admin/audit_log_integration_test.rb +20 -0
- data/test/integration/workarea/api/admin/authentication_integration_test.rb +61 -0
- data/test/integration/workarea/api/admin/categories_integration_test.rb +64 -0
- data/test/integration/workarea/api/admin/category_product_rules_integration_test.rb +58 -0
- data/test/integration/workarea/api/admin/content_assets_integration_test.rb +65 -0
- data/test/integration/workarea/api/admin/content_integration_test.rb +59 -0
- data/test/integration/workarea/api/admin/discounts_integration_test.rb +64 -0
- data/test/integration/workarea/api/admin/email_signups_integration_test.rb +32 -0
- data/test/integration/workarea/api/admin/error_handling_integration_test.rb +16 -0
- data/test/integration/workarea/api/admin/fulfillments_integration_test.rb +62 -0
- data/test/integration/workarea/api/admin/inventory_skus_integration_test.rb +70 -0
- data/test/integration/workarea/api/admin/navigation_menus_integration_test.rb +54 -0
- data/test/integration/workarea/api/admin/navigation_taxons_integration_test.rb +63 -0
- data/test/integration/workarea/api/admin/orders_integration_test.rb +53 -0
- data/test/integration/workarea/api/admin/pages_integration_test.rb +64 -0
- data/test/integration/workarea/api/admin/payment_profiles_integration_test.rb +75 -0
- data/test/integration/workarea/api/admin/payment_transactions_integration_test.rb +45 -0
- data/test/integration/workarea/api/admin/payments_integration_test.rb +29 -0
- data/test/integration/workarea/api/admin/prices_integration_test.rb +55 -0
- data/test/integration/workarea/api/admin/pricing_skus_integration_test.rb +72 -0
- data/test/integration/workarea/api/admin/product_images_integration_test.rb +56 -0
- data/test/integration/workarea/api/admin/products_integration_test.rb +66 -0
- data/test/integration/workarea/api/admin/promo_code_lists_integration_test.rb +70 -0
- data/test/integration/workarea/api/admin/recommendation_settings_integration_test.rb +41 -0
- data/test/integration/workarea/api/admin/redirects_integration_test.rb +69 -0
- data/test/integration/workarea/api/admin/release_changes_integration_test.rb +32 -0
- data/test/integration/workarea/api/admin/releases_integration_test.rb +60 -0
- data/test/integration/workarea/api/admin/saved_addresses_integration_test.rb +70 -0
- data/test/integration/workarea/api/admin/saved_credit_cards_integration_test.rb +76 -0
- data/test/integration/workarea/api/admin/shipping_rates_integration_test.rb +54 -0
- data/test/integration/workarea/api/admin/shipping_services_integration_test.rb +64 -0
- data/test/integration/workarea/api/admin/shippings_integration_test.rb +34 -0
- data/test/integration/workarea/api/admin/tax_categories_integration_test.rb +64 -0
- data/test/integration/workarea/api/admin/tax_rates_integration_test.rb +66 -0
- data/test/integration/workarea/api/admin/users_integration_test.rb +67 -0
- data/test/integration/workarea/api/admin/variants_integration_test.rb +59 -0
- data/test/models/workarea/api/admin/bulk_upsert_test.rb +79 -0
- data/test/test_helper.rb +10 -0
- data/test/vcr_cassettes/product_image_from_url.yml +43 -0
- data/workarea-api-admin.gemspec +18 -0
- metadata +252 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Api
|
|
3
|
+
module Admin
|
|
4
|
+
class ProductImagesController < Admin::ApplicationController
|
|
5
|
+
before_action :find_product
|
|
6
|
+
before_action :find_image, except: [:index, :create]
|
|
7
|
+
|
|
8
|
+
swagger_path '/products/{id}/images' do
|
|
9
|
+
operation :get do
|
|
10
|
+
key :summary, 'All Product Images'
|
|
11
|
+
key :description, 'Returns all images for a product'
|
|
12
|
+
key :operationId, 'listProductImages'
|
|
13
|
+
key :produces, ['application/json']
|
|
14
|
+
|
|
15
|
+
parameter do
|
|
16
|
+
key :name, :id
|
|
17
|
+
key :in, :path
|
|
18
|
+
key :description, 'product ID'
|
|
19
|
+
key :required, true
|
|
20
|
+
key :type, :string
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
response 200 do
|
|
24
|
+
key :description, 'Product images'
|
|
25
|
+
schema do
|
|
26
|
+
key :type, :object
|
|
27
|
+
property :images do
|
|
28
|
+
key :type, :array
|
|
29
|
+
items do
|
|
30
|
+
key :'$ref', 'Workarea::Catalog::ProductImage'
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
operation :post do
|
|
38
|
+
key :summary, 'Create Product Image'
|
|
39
|
+
key :description, 'Creates a new product image'
|
|
40
|
+
key :operationId, 'addProductImage'
|
|
41
|
+
key :produces, ['application/json']
|
|
42
|
+
|
|
43
|
+
parameter do
|
|
44
|
+
key :name, :id
|
|
45
|
+
key :in, :path
|
|
46
|
+
key :description, 'product ID'
|
|
47
|
+
key :required, true
|
|
48
|
+
key :type, :string
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
parameter do
|
|
52
|
+
key :name, :body
|
|
53
|
+
key :in, :body
|
|
54
|
+
key :description, 'Image to add'
|
|
55
|
+
key :required, true
|
|
56
|
+
schema do
|
|
57
|
+
key :type, :object
|
|
58
|
+
property :image do
|
|
59
|
+
key :'$ref', 'Workarea::Catalog::ProductImage'
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
response 201 do
|
|
65
|
+
key :description, 'Product image created'
|
|
66
|
+
schema do
|
|
67
|
+
key :type, :object
|
|
68
|
+
property :image do
|
|
69
|
+
key :'$ref', 'Workarea::Catalog::ProductImage'
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
response 422 do
|
|
75
|
+
key :description, 'Validation failure'
|
|
76
|
+
schema do
|
|
77
|
+
key :type, :object
|
|
78
|
+
property :problem do
|
|
79
|
+
key :type, :string
|
|
80
|
+
end
|
|
81
|
+
property :document do
|
|
82
|
+
key :'$ref', 'Workarea::Catalog::ProductImage'
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def index
|
|
90
|
+
respond_with images: @product.images
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def create
|
|
94
|
+
@image = @product.images.create!(params[:image])
|
|
95
|
+
respond_with(
|
|
96
|
+
{ image: @image },
|
|
97
|
+
{ status: :created,
|
|
98
|
+
location: product_images_path(@product.id) }
|
|
99
|
+
)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
swagger_path '/products/{product_id}/images/{id}' do
|
|
103
|
+
operation :patch do
|
|
104
|
+
key :summary, 'Update a product image'
|
|
105
|
+
key :description, 'Updates attributes on a product image'
|
|
106
|
+
key :operationId, 'updateProductImage'
|
|
107
|
+
|
|
108
|
+
parameter do
|
|
109
|
+
key :name, :product_id
|
|
110
|
+
key :in, :path
|
|
111
|
+
key :description, 'ID of product'
|
|
112
|
+
key :required, true
|
|
113
|
+
key :type, :string
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
parameter do
|
|
117
|
+
key :name, :id
|
|
118
|
+
key :in, :path
|
|
119
|
+
key :description, 'ID of product image to update'
|
|
120
|
+
key :required, true
|
|
121
|
+
key :type, :string
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
parameter do
|
|
125
|
+
key :name, :body
|
|
126
|
+
key :in, :body
|
|
127
|
+
key :description, 'New attributes'
|
|
128
|
+
key :required, true
|
|
129
|
+
schema do
|
|
130
|
+
key :type, :object
|
|
131
|
+
property :image do
|
|
132
|
+
key :'$ref', 'Workarea::Catalog::ProductImage'
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
response 204 do
|
|
138
|
+
key :description, 'Product image updated successfully'
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
response 422 do
|
|
142
|
+
key :description, 'Validation failure'
|
|
143
|
+
schema do
|
|
144
|
+
key :type, :object
|
|
145
|
+
property :problem do
|
|
146
|
+
key :type, :string
|
|
147
|
+
end
|
|
148
|
+
property :document do
|
|
149
|
+
key :'$ref', 'Workarea::Catalog::ProductImage'
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
response 404 do
|
|
155
|
+
key :description, 'Product or image not found'
|
|
156
|
+
schema do
|
|
157
|
+
key :type, :object
|
|
158
|
+
property :problem do
|
|
159
|
+
key :type, :string
|
|
160
|
+
end
|
|
161
|
+
property :params do
|
|
162
|
+
key :type, :object
|
|
163
|
+
key :additionalProperties, true
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
operation :delete do
|
|
170
|
+
key :summary, 'Remove a Product Image'
|
|
171
|
+
key :description, 'Remove a product image'
|
|
172
|
+
key :operationId, 'removeProductImage'
|
|
173
|
+
|
|
174
|
+
parameter do
|
|
175
|
+
key :name, :product_id
|
|
176
|
+
key :in, :path
|
|
177
|
+
key :description, 'ID of product'
|
|
178
|
+
key :required, true
|
|
179
|
+
key :type, :string
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
parameter do
|
|
183
|
+
key :name, :id
|
|
184
|
+
key :in, :path
|
|
185
|
+
key :description, 'ID of product image to remove'
|
|
186
|
+
key :required, true
|
|
187
|
+
key :type, :string
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
response 204 do
|
|
191
|
+
key :description, 'Product image removed successfully'
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
response 404 do
|
|
195
|
+
key :description, 'Product or image not found'
|
|
196
|
+
schema do
|
|
197
|
+
key :type, :object
|
|
198
|
+
property :problem do
|
|
199
|
+
key :type, :string
|
|
200
|
+
end
|
|
201
|
+
property :params do
|
|
202
|
+
key :type, :object
|
|
203
|
+
key :additionalProperties, true
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def update
|
|
211
|
+
@image.update_attributes!(params[:image])
|
|
212
|
+
respond_with image: @image
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def destroy
|
|
216
|
+
@image.destroy
|
|
217
|
+
head :no_content
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
private
|
|
221
|
+
|
|
222
|
+
def find_product
|
|
223
|
+
@product = Catalog::Product.find(params[:product_id])
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def find_image
|
|
227
|
+
@image = @product.images.find(params[:id])
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Api
|
|
3
|
+
module Admin
|
|
4
|
+
class ProductsController < Admin::ApplicationController
|
|
5
|
+
before_action :find_product, except: [:index, :create, :bulk]
|
|
6
|
+
|
|
7
|
+
swagger_path '/products' do
|
|
8
|
+
operation :get do
|
|
9
|
+
key :summary, 'All Products'
|
|
10
|
+
key :description, 'Returns all products from the system'
|
|
11
|
+
key :operationId, 'listProducts'
|
|
12
|
+
key :produces, ['application/json']
|
|
13
|
+
|
|
14
|
+
parameter do
|
|
15
|
+
key :name, :page
|
|
16
|
+
key :in, :query
|
|
17
|
+
key :description, 'Current page'
|
|
18
|
+
key :required, false
|
|
19
|
+
key :type, :integer
|
|
20
|
+
key :default, 1
|
|
21
|
+
end
|
|
22
|
+
parameter do
|
|
23
|
+
key :name, :sort_by
|
|
24
|
+
key :in, :query
|
|
25
|
+
key :description, 'Field on which to sort (see responses for possible values)'
|
|
26
|
+
key :required, false
|
|
27
|
+
key :type, :string
|
|
28
|
+
key :default, 'created_at'
|
|
29
|
+
end
|
|
30
|
+
parameter do
|
|
31
|
+
key :name, :sort_direction
|
|
32
|
+
key :in, :query
|
|
33
|
+
key :description, 'Direction for sort by'
|
|
34
|
+
key :type, :string
|
|
35
|
+
key :enum, %w(asc desc)
|
|
36
|
+
key :default, 'desc'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
response 200 do
|
|
40
|
+
key :description, 'Products'
|
|
41
|
+
schema do
|
|
42
|
+
key :type, :object
|
|
43
|
+
property :products do
|
|
44
|
+
key :type, :array
|
|
45
|
+
items do
|
|
46
|
+
key :'$ref', 'Workarea::Catalog::Product'
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
operation :post do
|
|
54
|
+
key :summary, 'Create Product'
|
|
55
|
+
key :description, 'Creates a new product.'
|
|
56
|
+
key :operationId, 'addProduct'
|
|
57
|
+
key :produces, ['application/json']
|
|
58
|
+
|
|
59
|
+
parameter do
|
|
60
|
+
key :name, :body
|
|
61
|
+
key :in, :body
|
|
62
|
+
key :description, 'Product to add'
|
|
63
|
+
key :required, true
|
|
64
|
+
schema do
|
|
65
|
+
key :type, :object
|
|
66
|
+
property :product do
|
|
67
|
+
key :'$ref', 'Workarea::Catalog::Product'
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
response 201 do
|
|
73
|
+
key :description, 'Product created'
|
|
74
|
+
schema do
|
|
75
|
+
key :type, :object
|
|
76
|
+
property :product do
|
|
77
|
+
key :'$ref', 'Workarea::Catalog::Product'
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
response 422 do
|
|
83
|
+
key :description, 'Validation failure'
|
|
84
|
+
schema do
|
|
85
|
+
key :type, :object
|
|
86
|
+
property :problem do
|
|
87
|
+
key :type, :string
|
|
88
|
+
end
|
|
89
|
+
property :document do
|
|
90
|
+
key :'$ref', 'Workarea::Catalog::Product'
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def index
|
|
98
|
+
@products = Catalog::Product
|
|
99
|
+
.all
|
|
100
|
+
.order_by(sort_field => sort_direction)
|
|
101
|
+
.page(params[:page])
|
|
102
|
+
|
|
103
|
+
respond_with products: @products
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def create
|
|
107
|
+
@product = Catalog::Product.create!(params[:product])
|
|
108
|
+
respond_with(
|
|
109
|
+
{ product: @product },
|
|
110
|
+
{ status: :created,
|
|
111
|
+
location: product_path(@product.id) }
|
|
112
|
+
)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
swagger_path '/products/{id}' do
|
|
116
|
+
operation :get do
|
|
117
|
+
key :summary, 'Find Product by ID'
|
|
118
|
+
key :description, 'Returns a single product'
|
|
119
|
+
key :operationId, 'showProduct'
|
|
120
|
+
|
|
121
|
+
parameter do
|
|
122
|
+
key :name, :id
|
|
123
|
+
key :in, :path
|
|
124
|
+
key :description, 'ID of product to fetch'
|
|
125
|
+
key :required, true
|
|
126
|
+
key :type, :string
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
response 200 do
|
|
130
|
+
key :description, 'Product details'
|
|
131
|
+
schema do
|
|
132
|
+
key :type, :object
|
|
133
|
+
property :product do
|
|
134
|
+
key :'$ref', 'Workarea::Catalog::Product'
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
response 404 do
|
|
140
|
+
key :description, 'Product not found'
|
|
141
|
+
schema do
|
|
142
|
+
key :type, :object
|
|
143
|
+
property :problem do
|
|
144
|
+
key :type, :string
|
|
145
|
+
end
|
|
146
|
+
property :params do
|
|
147
|
+
key :type, :object
|
|
148
|
+
key :additionalProperties, true
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
operation :patch do
|
|
155
|
+
key :summary, 'Update a Product'
|
|
156
|
+
key :description, 'Updates attributes on a product'
|
|
157
|
+
key :operationId, 'updateProduct'
|
|
158
|
+
|
|
159
|
+
parameter do
|
|
160
|
+
key :name, :id
|
|
161
|
+
key :in, :path
|
|
162
|
+
key :description, 'ID of product to update'
|
|
163
|
+
key :required, true
|
|
164
|
+
key :type, :string
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
parameter do
|
|
168
|
+
key :name, :body
|
|
169
|
+
key :in, :body
|
|
170
|
+
key :required, true
|
|
171
|
+
schema do
|
|
172
|
+
key :type, :object
|
|
173
|
+
property :product do
|
|
174
|
+
key :description, 'New attributes'
|
|
175
|
+
key :'$ref', 'Workarea::Catalog::Product'
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
response 204 do
|
|
181
|
+
key :description, 'Product updated successfully'
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
response 422 do
|
|
185
|
+
key :description, 'Validation failure'
|
|
186
|
+
schema do
|
|
187
|
+
key :type, :object
|
|
188
|
+
property :problem do
|
|
189
|
+
key :type, :string
|
|
190
|
+
end
|
|
191
|
+
property :document do
|
|
192
|
+
key :'$ref', 'Workarea::Catalog::Product'
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
response 404 do
|
|
198
|
+
key :description, 'Product not found'
|
|
199
|
+
schema do
|
|
200
|
+
key :type, :object
|
|
201
|
+
property :problem do
|
|
202
|
+
key :type, :string
|
|
203
|
+
end
|
|
204
|
+
property :params do
|
|
205
|
+
key :type, :object
|
|
206
|
+
key :additionalProperties, true
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
operation :delete do
|
|
213
|
+
key :summary, 'Remove a Product'
|
|
214
|
+
key :description, 'Remove a product'
|
|
215
|
+
key :operationId, 'removeProduct'
|
|
216
|
+
|
|
217
|
+
parameter do
|
|
218
|
+
key :name, :id
|
|
219
|
+
key :in, :path
|
|
220
|
+
key :description, 'ID of product to remove'
|
|
221
|
+
key :required, true
|
|
222
|
+
key :type, :string
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
response 204 do
|
|
226
|
+
key :description, 'Product removed successfully'
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
response 404 do
|
|
230
|
+
key :description, 'Product not found'
|
|
231
|
+
schema do
|
|
232
|
+
key :type, :object
|
|
233
|
+
property :problem do
|
|
234
|
+
key :type, :string
|
|
235
|
+
end
|
|
236
|
+
property :params do
|
|
237
|
+
key :type, :object
|
|
238
|
+
key :additionalProperties, true
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def show
|
|
246
|
+
respond_with product: @product
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def update
|
|
250
|
+
@product.update_attributes!(params[:product])
|
|
251
|
+
respond_with product: @product
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
swagger_path '/products/bulk' do
|
|
255
|
+
operation :patch do
|
|
256
|
+
key :summary, 'Bulk Upsert Products'
|
|
257
|
+
key :description, 'Creates new products or updates existing ones in bulk.'
|
|
258
|
+
key :operationId, 'upsertProducts'
|
|
259
|
+
key :produces, ['application/json']
|
|
260
|
+
|
|
261
|
+
parameter do
|
|
262
|
+
key :name, :body
|
|
263
|
+
key :in, :body
|
|
264
|
+
key :description, 'Array of products to upsert'
|
|
265
|
+
key :required, true
|
|
266
|
+
schema do
|
|
267
|
+
key :type, :object
|
|
268
|
+
property :products do
|
|
269
|
+
key :type, :array
|
|
270
|
+
items do
|
|
271
|
+
key :'$ref', 'Workarea::Catalog::Product'
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
response 204 do
|
|
278
|
+
key :description, 'Upsert received'
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def bulk
|
|
284
|
+
@bulk = Api::Admin::BulkUpsert.create!(
|
|
285
|
+
klass: Catalog::Product,
|
|
286
|
+
data: params[:products].map(&:to_h)
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
head :no_content
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def destroy
|
|
293
|
+
@product.destroy
|
|
294
|
+
head :no_content
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
private
|
|
298
|
+
|
|
299
|
+
def find_product
|
|
300
|
+
@product = Catalog::Product.find(params[:id])
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
end
|