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,299 @@
1
+ module Workarea
2
+ module Api
3
+ module Admin
4
+ class ShippingServicesController < Admin::ApplicationController
5
+ before_action :find_shipping_service, except: [:index, :create, :bulk]
6
+
7
+ swagger_path '/shipping_services' do
8
+ operation :get do
9
+ key :summary, 'All Shipping Services'
10
+ key :description, 'Returns all shipping services from the system'
11
+ key :operationId, 'listShippingServices'
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, 'Shipping services'
41
+ schema do
42
+ key :type, :object
43
+ property :shipping_services do
44
+ key :type, :array
45
+ items do
46
+ key :'$ref', 'Workarea::Shipping::Service'
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ operation :post do
54
+ key :summary, 'Create Shipping Service'
55
+ key :description, 'Creates a new shipping service.'
56
+ key :operationId, 'addShippingService'
57
+ key :produces, ['application/json']
58
+
59
+ parameter do
60
+ key :name, :body
61
+ key :in, :body
62
+ key :description, 'Shipping service to add'
63
+ key :required, true
64
+ schema do
65
+ key :type, :object
66
+ property :shipping_service do
67
+ key :'$ref', 'Workarea::Shipping::Service'
68
+ end
69
+ end
70
+ end
71
+
72
+ response 201 do
73
+ key :description, 'Shipping service created'
74
+ schema do
75
+ key :type, :object
76
+ property :shipping_service do
77
+ key :'$ref', 'Workarea::Shipping::Service'
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::Shipping::Service'
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ def index
98
+ @shipping_services = Shipping::Service
99
+ .all
100
+ .order_by(sort_field => sort_direction)
101
+ .page(params[:page])
102
+
103
+ respond_with shipping_services: @shipping_services
104
+ end
105
+
106
+ def create
107
+ @shipping_service = Shipping::Service.create!(params[:shipping_service])
108
+ respond_with(
109
+ { shipping_service: @shipping_service },
110
+ { status: :created,
111
+ location: shipping_service_path(@shipping_service) }
112
+ )
113
+ end
114
+
115
+ swagger_path '/shipping_services/{id}' do
116
+ operation :get do
117
+ key :summary, 'Find Shipping Service by ID'
118
+ key :description, 'Returns a single shipping service'
119
+ key :operationId, 'showShippingService'
120
+
121
+ parameter do
122
+ key :name, :id
123
+ key :in, :path
124
+ key :description, 'ID of shipping service to fetch'
125
+ key :required, true
126
+ key :type, :string
127
+ end
128
+
129
+ response 200 do
130
+ key :description, 'Shipping service details'
131
+ schema do
132
+ key :'$ref', 'Workarea::Shipping::Service'
133
+ end
134
+ end
135
+
136
+ response 404 do
137
+ key :description, 'Shipping service not found'
138
+ schema do
139
+ key :type, :object
140
+ property :problem do
141
+ key :type, :string
142
+ end
143
+ property :params do
144
+ key :type, :object
145
+ key :additionalProperties, true
146
+ end
147
+ end
148
+ end
149
+ end
150
+
151
+ operation :patch do
152
+ key :summary, 'Update a Shipping Service'
153
+ key :description, 'Updates attributes on a shipping service'
154
+ key :operationId, 'updateShippingService'
155
+
156
+ parameter do
157
+ key :name, :id
158
+ key :in, :path
159
+ key :description, 'ID of shipping service to update'
160
+ key :required, true
161
+ key :type, :string
162
+ end
163
+
164
+ parameter do
165
+ key :name, :body
166
+ key :in, :body
167
+ key :description, 'New attributes'
168
+ key :required, true
169
+ schema do
170
+ key :type, :object
171
+ property :shipping_service do
172
+ key :'$ref', 'Workarea::Shipping::Service'
173
+ end
174
+ end
175
+ end
176
+
177
+ response 204 do
178
+ key :description, 'Shipping service updated successfully'
179
+ end
180
+
181
+ response 422 do
182
+ key :description, 'Validation failure'
183
+ schema do
184
+ key :type, :object
185
+ property :problem do
186
+ key :type, :string
187
+ end
188
+ property :document do
189
+ key :'$ref', 'Workarea::Shipping::Service'
190
+ end
191
+ end
192
+ end
193
+
194
+ response 404 do
195
+ key :description, 'Shipping service 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
+
209
+ operation :delete do
210
+ key :summary, 'Remove a Shipping Service'
211
+ key :description, 'Remove a shipping service'
212
+ key :operationId, 'removeShippingService'
213
+
214
+ parameter do
215
+ key :name, :id
216
+ key :in, :path
217
+ key :description, 'ID of shipping service to remove'
218
+ key :required, true
219
+ key :type, :string
220
+ end
221
+
222
+ response 204 do
223
+ key :description, 'Shipping service removed successfully'
224
+ end
225
+
226
+ response 404 do
227
+ key :description, 'Shipping service not found'
228
+ schema do
229
+ key :type, :object
230
+ property :problem do
231
+ key :type, :string
232
+ end
233
+ property :params do
234
+ key :type, :object
235
+ key :additionalProperties, true
236
+ end
237
+ end
238
+ end
239
+ end
240
+ end
241
+
242
+ def show
243
+ respond_with shipping_service: @shipping_service
244
+ end
245
+
246
+ def update
247
+ @shipping_service.update_attributes!(params[:shipping_service])
248
+ respond_with shipping_service: @shipping_service
249
+ end
250
+
251
+ swagger_path '/shipping_services/bulk' do
252
+ operation :patch do
253
+ key :summary, 'Bulk Upsert Shipping Services'
254
+ key :description, 'Creates new shipping services or updates existing ones in bulk.'
255
+ key :operationId, 'upsertShippingServices'
256
+ key :produces, ['application/json']
257
+
258
+ parameter do
259
+ key :name, :body
260
+ key :in, :body
261
+ key :description, 'Array of shipping services to upsert'
262
+ key :required, true
263
+ schema do
264
+ key :type, :array
265
+ items do
266
+ key :'$ref', 'Workarea::Shipping::Service'
267
+ end
268
+ end
269
+ end
270
+
271
+ response 204 do
272
+ key :description, 'Upsert received'
273
+ end
274
+ end
275
+ end
276
+
277
+ def bulk
278
+ @bulk = Api::Admin::BulkUpsert.create!(
279
+ klass: Shipping::Service,
280
+ data: params[:shipping_services].map(&:to_h)
281
+ )
282
+
283
+ head :no_content
284
+ end
285
+
286
+ def destroy
287
+ @shipping_service.destroy
288
+ head :no_content
289
+ end
290
+
291
+ private
292
+
293
+ def find_shipping_service
294
+ @shipping_service = Shipping::Service.find(params[:id])
295
+ end
296
+ end
297
+ end
298
+ end
299
+ end
@@ -0,0 +1,105 @@
1
+ module Workarea
2
+ module Api
3
+ module Admin
4
+ class ShippingsController < Admin::ApplicationController
5
+ swagger_path '/shippings' do
6
+ operation :get do
7
+ key :summary, 'All Shippings'
8
+ key :description, 'Returns all shippings from the system'
9
+ key :operationId, 'listShippings'
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, 'Shippings'
39
+ schema do
40
+ key :type, :object
41
+ property :shippings do
42
+ key :type, :array
43
+ items do
44
+ key :'$ref', 'Workarea::Shipping'
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ def index
53
+ @shippings = Shipping
54
+ .all
55
+ .order_by(sort_field => sort_direction)
56
+ .page(params[:page])
57
+
58
+ respond_with shippings: @shippings
59
+ end
60
+
61
+ swagger_path '/shippings/{id}' do
62
+ operation :get do
63
+ key :summary, 'Find Shipping Service by ID'
64
+ key :description, 'Returns a single shipping'
65
+ key :operationId, 'showShipping'
66
+
67
+ parameter do
68
+ key :name, :id
69
+ key :in, :path
70
+ key :description, 'ID of shipping to fetch'
71
+ key :required, true
72
+ key :type, :string
73
+ end
74
+
75
+ response 200 do
76
+ key :description, 'Shipping details'
77
+ schema do
78
+ key :'$ref', 'Workarea::Shipping'
79
+ end
80
+ end
81
+
82
+ response 404 do
83
+ key :description, 'Shipping not found'
84
+ schema do
85
+ key :type, :object
86
+ property :problem do
87
+ key :type, :string
88
+ end
89
+ property :params do
90
+ key :type, :object
91
+ key :additionalProperties, true
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ def show
99
+ @shipping = Shipping.find(params[:id])
100
+ respond_with shipping: @shipping
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,41 @@
1
+ module Workarea
2
+ module Api
3
+ module Admin
4
+ class SwaggerController < Admin::ApplicationController
5
+ include ::Swagger::Blocks
6
+
7
+ def index
8
+ controller = self
9
+ self.class.send(:swagger_root) do
10
+ key :swagger, '2.0'
11
+
12
+ info do
13
+ key :version, '1.0.0'
14
+ key :title, 'Workarea Admin'
15
+ key :description, 'A backend API for integrating and configuring Workarea'
16
+ key :termsOfService, 'https://workarea.com'
17
+ contact do
18
+ key :name, 'Workarea Product Team'
19
+ end
20
+ end
21
+
22
+ key :host, Workarea.config.host
23
+ key :basePath, controller.root_path[0..-2]
24
+ key :schemes, [Rails.application.config.force_ssl ? 'https' : 'http']
25
+ key :consumes, ['application/json']
26
+ key :produces, ['application/json']
27
+
28
+ security_definition :BasicAuth do
29
+ key :type, :basic
30
+ end
31
+ security do
32
+ key :BasicAuth, []
33
+ end
34
+ end
35
+
36
+ render json: ::Swagger::Blocks.build_root_json(Swagger.klasses)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,242 @@
1
+ module Workarea
2
+ module Api
3
+ module Admin
4
+ class TaxCategoriesController < Admin::ApplicationController
5
+ before_action :find_tax_category, except: [:index, :create, :bulk]
6
+
7
+ swagger_path '/tax_categories' do
8
+ operation :get do
9
+ key :summary, 'All Tax Categories'
10
+ key :description, 'Returns all tax categories'
11
+ key :operationId, 'listTaxCategories'
12
+ key :produces, ['application/json']
13
+
14
+ response 200 do
15
+ key :description, 'Tax categories'
16
+ schema do
17
+ key :type, :object
18
+ property :tax_categories do
19
+ key :type, :array
20
+ items do
21
+ key :'$ref', 'Workarea::Tax::Category'
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ operation :post do
29
+ key :summary, 'Create a tax category'
30
+ key :description, 'Creates a new taxable category.'
31
+ key :operationId, 'addTaxCategory'
32
+ key :produces, ['application/json']
33
+
34
+ parameter do
35
+ key :name, :body
36
+ key :in, :body
37
+ key :description, 'Tax Category to add'
38
+ key :required, true
39
+ schema do
40
+ key :type, :object
41
+ property :tax_category do
42
+ key :'$ref', 'Workarea::Tax::Category'
43
+ end
44
+ end
45
+ end
46
+
47
+ response 201 do
48
+ key :description, 'Tax category created'
49
+ schema do
50
+ key :type, :object
51
+ property :tax_category do
52
+ key :'$ref', 'Workarea::Tax::Category'
53
+ end
54
+ end
55
+ end
56
+
57
+ response 422 do
58
+ key :description, 'Validation failure'
59
+ schema do
60
+ key :type, :object
61
+ property :problem do
62
+ key :type, :string
63
+ end
64
+ property :document do
65
+ key :'$ref', 'Workarea::Tax::Category'
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ def index
73
+ @tax_categories = Tax::Category
74
+ .all
75
+ .order_by(sort_field => sort_direction)
76
+ .page(params[:page])
77
+
78
+ respond_with tax_categories: @tax_categories
79
+ end
80
+
81
+ def create
82
+ @tax_category = Tax::Category.create!(params[:tax_category])
83
+ respond_with(
84
+ { tax_category: @tax_category },
85
+ { status: :created,
86
+ location: tax_category_path(@tax_category) }
87
+ )
88
+ end
89
+
90
+ swagger_path '/tax_categories/{id}' do
91
+ operation :patch do
92
+ key :summary, 'Update a tax category'
93
+ key :description, 'Updates attributes on a tax category'
94
+ key :operationId, 'updateTaxCategory'
95
+
96
+ parameter do
97
+ key :name, :id
98
+ key :in, :path
99
+ key :description, 'ID of tax category to update'
100
+ key :required, true
101
+ key :type, :string
102
+ end
103
+
104
+ parameter do
105
+ key :name, :body
106
+ key :in, :body
107
+ key :description, 'New attributes'
108
+ key :required, true
109
+ schema do
110
+ key :type, :object
111
+ property :tax_category do
112
+ key :'$ref', 'Workarea::Tax::Category'
113
+ end
114
+ end
115
+ end
116
+
117
+ response 204 do
118
+ key :description, 'Tax category updated successfully'
119
+ end
120
+
121
+ response 422 do
122
+ key :description, 'Validation failure'
123
+ schema do
124
+ key :type, :object
125
+ property :problem do
126
+ key :type, :string
127
+ end
128
+ property :document do
129
+ key :'$ref', 'Workarea::Tax::Category'
130
+ end
131
+ end
132
+ end
133
+
134
+ response 404 do
135
+ key :description, 'Tax category not found'
136
+ schema do
137
+ key :type, :object
138
+ property :problem do
139
+ key :type, :string
140
+ end
141
+ property :params do
142
+ key :type, :object
143
+ key :additionalProperties, true
144
+ end
145
+ end
146
+ end
147
+ end
148
+
149
+ operation :delete do
150
+ key :summary, 'Remove a Tax Category'
151
+ key :description, 'Remove a tax category'
152
+ key :operationId, 'removeTaxCategory'
153
+
154
+ parameter do
155
+ key :name, :id
156
+ key :in, :path
157
+ key :description, 'ID of tax category'
158
+ key :required, true
159
+ key :type, :string
160
+ end
161
+
162
+ response 204 do
163
+ key :description, 'Tax category removed successfully'
164
+ end
165
+
166
+ response 404 do
167
+ key :description, 'Tax category not found'
168
+ schema do
169
+ key :type, :object
170
+ property :problem do
171
+ key :type, :string
172
+ end
173
+ property :params do
174
+ key :type, :object
175
+ key :additionalProperties, true
176
+ end
177
+ end
178
+ end
179
+ end
180
+ end
181
+
182
+ def show
183
+ respond_with tax_category: @tax_category
184
+ end
185
+
186
+ def update
187
+ @tax_category.update_attributes!(params[:tax_category])
188
+ respond_with tax_category: @tax_category
189
+ end
190
+
191
+ def destroy
192
+ @tax_category.destroy
193
+ head :no_content
194
+ end
195
+
196
+ swagger_path '/tax_categories/bulk' do
197
+ operation :patch do
198
+ key :summary, 'Bulk Upsert tax categories'
199
+ key :description, 'Creates new tax categories or updates existing ones in bulk.'
200
+ key :operationId, 'upsertTaxCategory'
201
+ key :produces, ['application/json']
202
+
203
+ parameter do
204
+ key :name, :body
205
+ key :in, :body
206
+ key :description, 'Array of tax categories to upsert'
207
+ key :required, true
208
+ schema do
209
+ key :type, :object
210
+ property :tax_categories do
211
+ key :type, :array
212
+ items do
213
+ key :'$ref', 'Workarea::Tax::Category'
214
+ end
215
+ end
216
+ end
217
+ end
218
+
219
+ response 204 do
220
+ key :description, 'Upsert received'
221
+ end
222
+ end
223
+ end
224
+
225
+ def bulk
226
+ @bulk = Api::Admin::BulkUpsert.create!(
227
+ klass: Tax::Category,
228
+ data: params[:tax_categories].map(&:to_h)
229
+ )
230
+
231
+ head :no_content
232
+ end
233
+
234
+ private
235
+
236
+ def find_tax_category
237
+ @tax_category = Tax::Category.find(params[:id])
238
+ end
239
+ end
240
+ end
241
+ end
242
+ end