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,232 @@
1
+ module Workarea
2
+ module Api
3
+ module Admin
4
+ class CategoryProductRulesController < Admin::ApplicationController
5
+ before_action :find_category
6
+ before_action :find_product_rule, except: [:index, :create]
7
+
8
+ swagger_path '/categories/{id}/product_rules' do
9
+ operation :get do
10
+ key :summary, 'All Category Product Rules'
11
+ key :description, 'Returns all product rules for a category'
12
+ key :operationId, 'listCategoryProductRules'
13
+ key :produces, ['application/json']
14
+
15
+ parameter do
16
+ key :name, :id
17
+ key :in, :path
18
+ key :description, 'category ID'
19
+ key :required, true
20
+ key :type, :string
21
+ end
22
+
23
+ response 200 do
24
+ key :description, 'Category product rules'
25
+ schema do
26
+ key :type, :object
27
+ property :product_rules do
28
+ key :type, :array
29
+ items do
30
+ key :'$ref', 'Workarea::ProductRule'
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ operation :post do
38
+ key :summary, 'Create Category Product Rule'
39
+ key :description, 'Creates a new category product rule.'
40
+ key :operationId, 'addCategoryProductRule'
41
+ key :produces, ['application/json']
42
+
43
+ parameter do
44
+ key :name, :id
45
+ key :in, :path
46
+ key :description, 'category 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, 'Rule to add'
55
+ key :required, true
56
+ schema do
57
+ key :type, :object
58
+ property :product_rule do
59
+ key :'$ref', 'Workarea::ProductRule'
60
+ end
61
+ end
62
+ end
63
+
64
+ response 201 do
65
+ key :description, 'Product rule created'
66
+ schema do
67
+ key :type, :object
68
+ property :product_rule do
69
+ key :'$ref', 'Workarea::ProductRule'
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::ProductRule'
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ def index
90
+ respond_with product_rules: @category.product_rules
91
+ end
92
+
93
+ def create
94
+ @product_rule = @category.product_rules.create!(params[:product_rule])
95
+ respond_with(
96
+ { product_rule: @product_rule },
97
+ { status: :created,
98
+ location: category_product_rules_path(@category.id) }
99
+ )
100
+ end
101
+
102
+ swagger_path '/categories/{category_id}/product_rules/{id}' do
103
+ operation :patch do
104
+ key :summary, 'Update a category product rule'
105
+ key :description, 'Updates attributes on a category product rule'
106
+ key :operationId, 'updateCategoryProductRule'
107
+
108
+ parameter do
109
+ key :name, :category_id
110
+ key :in, :path
111
+ key :description, 'ID of category'
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 category product rule 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 :product_rule do
132
+ key :'$ref', 'Workarea::ProductRule'
133
+ end
134
+ end
135
+ end
136
+
137
+ response 204 do
138
+ key :description, 'Category product rule 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::ProductRule'
150
+ end
151
+ end
152
+ end
153
+
154
+ response 404 do
155
+ key :description, 'Category or product rule 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 Category Product Rule'
171
+ key :description, 'Remove a category product rule'
172
+ key :operationId, 'removeCategoryProductRule'
173
+
174
+ parameter do
175
+ key :name, :category_id
176
+ key :in, :path
177
+ key :description, 'ID of category'
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 category product rule to remove'
186
+ key :required, true
187
+ key :type, :string
188
+ end
189
+
190
+ response 204 do
191
+ key :description, 'Category product rule removed successfully'
192
+ end
193
+
194
+ response 404 do
195
+ key :description, 'Category or product rule 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
+ @product_rule.update_attributes!(params[:product_rule])
212
+ respond_with product_rule: @product_rule
213
+ end
214
+
215
+ def destroy
216
+ @product_rule.destroy
217
+ head :no_content
218
+ end
219
+
220
+ private
221
+
222
+ def find_category
223
+ @category = Catalog::Category.find(params[:category_id])
224
+ end
225
+
226
+ def find_product_rule
227
+ @product_rule = @category.product_rules.find(params[:id])
228
+ end
229
+ end
230
+ end
231
+ end
232
+ end
@@ -0,0 +1,299 @@
1
+ module Workarea
2
+ module Api
3
+ module Admin
4
+ class ContentAssetsController < Admin::ApplicationController
5
+ before_action :find_asset, except: [:index, :create, :bulk]
6
+
7
+ swagger_path '/content_assets' do
8
+ operation :get do
9
+ key :summary, 'All Content Assets'
10
+ key :description, 'Returns all content assets from the system'
11
+ key :operationId, 'listContentAssets'
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, 'Content assets'
41
+ schema do
42
+ key :type, :object
43
+ property :assets do
44
+ key :type, :array
45
+ items do
46
+ key :'$ref', 'Workarea::Content::Asset'
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ operation :post do
54
+ key :summary, 'Create Content Asset'
55
+ key :description, 'Creates a new content asset.'
56
+ key :operationId, 'addContentAsset'
57
+ key :produces, ['application/json']
58
+
59
+ parameter do
60
+ key :name, :body
61
+ key :in, :body
62
+ key :description, 'Content asset to add'
63
+ key :required, true
64
+ schema do
65
+ key :type, :object
66
+ property :asset do
67
+ key :'$ref', 'Workarea::Content::Asset'
68
+ end
69
+ end
70
+ end
71
+
72
+ response 201 do
73
+ key :description, 'Content asset created'
74
+ schema do
75
+ key :type, :object
76
+ property :asset do
77
+ key :'$ref', 'Workarea::Content::Asset'
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::Content::Asset'
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ def index
98
+ @assets = Content::Asset
99
+ .all
100
+ .order_by(sort_field => sort_direction)
101
+ .page(params[:page])
102
+
103
+ respond_with assets: @assets
104
+ end
105
+
106
+ def create
107
+ @asset = Content::Asset.create!(params[:asset])
108
+ respond_with(
109
+ { asset: @asset },
110
+ { status: :created,
111
+ location: content_asset_path(@asset) }
112
+ )
113
+ end
114
+
115
+ swagger_path '/content_assets/{id}' do
116
+ operation :get do
117
+ key :summary, 'Find Content Asset by ID'
118
+ key :description, 'Returns a single content asset'
119
+ key :operationId, 'showContentAsset'
120
+
121
+ parameter do
122
+ key :name, :id
123
+ key :in, :path
124
+ key :description, 'ID of content asset to fetch'
125
+ key :required, true
126
+ key :type, :string
127
+ end
128
+
129
+ response 200 do
130
+ key :description, 'Content asset details'
131
+ schema do
132
+ key :'$ref', 'Workarea::Content::Asset'
133
+ end
134
+ end
135
+
136
+ response 404 do
137
+ key :description, 'Content asset 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 Content Asset'
153
+ key :description, 'Updates attributes on a content asset'
154
+ key :operationId, 'updateContentAsset'
155
+
156
+ parameter do
157
+ key :name, :id
158
+ key :in, :path
159
+ key :description, 'ID of content asset 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 :asset do
172
+ key :'$ref', 'Workarea::Content::Asset'
173
+ end
174
+ end
175
+ end
176
+
177
+ response 204 do
178
+ key :description, 'Content asset 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::Content::Asset'
190
+ end
191
+ end
192
+ end
193
+
194
+ response 404 do
195
+ key :description, 'Content asset 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 Content Asset'
211
+ key :description, 'Remove a content asset'
212
+ key :operationId, 'removeContentAsset'
213
+
214
+ parameter do
215
+ key :name, :id
216
+ key :in, :path
217
+ key :description, 'ID of content asset to remove'
218
+ key :required, true
219
+ key :type, :string
220
+ end
221
+
222
+ response 204 do
223
+ key :description, 'Content asset removed successfully'
224
+ end
225
+
226
+ response 404 do
227
+ key :description, 'Content asset 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 asset: @asset
244
+ end
245
+
246
+ def update
247
+ @asset.update_attributes!(params[:asset])
248
+ respond_with asset: @asset
249
+ end
250
+
251
+ swagger_path '/content_assets/bulk' do
252
+ operation :patch do
253
+ key :summary, 'Bulk Upsert Content Assets'
254
+ key :description, 'Creates new content assets or updates existing ones in bulk.'
255
+ key :operationId, 'upsertContentAssets'
256
+ key :produces, ['application/json']
257
+
258
+ parameter do
259
+ key :name, :body
260
+ key :in, :body
261
+ key :description, 'Array of content assets to upsert'
262
+ key :required, true
263
+ schema do
264
+ key :type, :array
265
+ items do
266
+ key :'$ref', 'Workarea::Content::Asset'
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: Content::Asset,
280
+ data: params[:assets].map(&:to_h)
281
+ )
282
+
283
+ head :no_content
284
+ end
285
+
286
+ def destroy
287
+ @asset.destroy
288
+ head :no_content
289
+ end
290
+
291
+ private
292
+
293
+ def find_asset
294
+ @asset = Content::Asset.find(params[:id])
295
+ end
296
+ end
297
+ end
298
+ end
299
+ end