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