diff options
Diffstat (limited to 'app/Controllers/Http/ServiceController.js')
-rw-r--r-- | app/Controllers/Http/ServiceController.js | 175 |
1 files changed, 90 insertions, 85 deletions
diff --git a/app/Controllers/Http/ServiceController.js b/app/Controllers/Http/ServiceController.js index 4aa611c..ef8b168 100644 --- a/app/Controllers/Http/ServiceController.js +++ b/app/Controllers/Http/ServiceController.js | |||
@@ -1,21 +1,15 @@ | |||
1 | const Service = use('App/Models/Service'); | 1 | const Service = use('App/Models/Service'); |
2 | const { | 2 | const { validateAll } = use('Validator'); |
3 | validateAll, | ||
4 | } = use('Validator'); | ||
5 | const Env = use('Env'); | 3 | const Env = use('Env'); |
6 | const Helpers = use('Helpers'); | 4 | const Helpers = use('Helpers'); |
7 | 5 | ||
8 | const uuid = require('uuid/v4'); | 6 | const { v4: uuid } = require('uuid'); |
9 | const path = require('path'); | 7 | const path = require('path'); |
10 | const fs = require('fs-extra'); | 8 | const fs = require('fs-extra'); |
11 | 9 | ||
12 | class ServiceController { | 10 | class ServiceController { |
13 | // Create a new service for user | 11 | // Create a new service for user |
14 | async create({ | 12 | async create({ request, response, auth }) { |
15 | request, | ||
16 | response, | ||
17 | auth, | ||
18 | }) { | ||
19 | try { | 13 | try { |
20 | await auth.getUser(); | 14 | await auth.getUser(); |
21 | } catch (error) { | 15 | } catch (error) { |
@@ -41,7 +35,10 @@ class ServiceController { | |||
41 | let serviceId; | 35 | let serviceId; |
42 | do { | 36 | do { |
43 | serviceId = uuid(); | 37 | serviceId = uuid(); |
44 | } while ((await Service.query().where('serviceId', serviceId).fetch()).rows.length > 0); // eslint-disable-line no-await-in-loop | 38 | } while ( |
39 | (await Service.query().where('serviceId', serviceId).fetch()).rows | ||
40 | .length > 0 | ||
41 | ); // eslint-disable-line no-await-in-loop | ||
45 | 42 | ||
46 | await Service.create({ | 43 | await Service.create({ |
47 | userId: auth.user.id, | 44 | userId: auth.user.id, |
@@ -73,10 +70,7 @@ class ServiceController { | |||
73 | } | 70 | } |
74 | 71 | ||
75 | // List all services a user has created | 72 | // List all services a user has created |
76 | async list({ | 73 | async list({ response, auth }) { |
77 | response, | ||
78 | auth, | ||
79 | }) { | ||
80 | try { | 74 | try { |
81 | await auth.getUser(); | 75 | await auth.getUser(); |
82 | } catch (error) { | 76 | } catch (error) { |
@@ -85,8 +79,11 @@ class ServiceController { | |||
85 | 79 | ||
86 | const services = (await auth.user.services().fetch()).rows; | 80 | const services = (await auth.user.services().fetch()).rows; |
87 | // Convert to array with all data Franz wants | 81 | // Convert to array with all data Franz wants |
88 | const servicesArray = services.map((service) => { | 82 | const servicesArray = services.map(service => { |
89 | const settings = typeof service.settings === 'string' ? JSON.parse(service.settings) : service.settings; | 83 | const settings = |
84 | typeof service.settings === 'string' | ||
85 | ? JSON.parse(service.settings) | ||
86 | : service.settings; | ||
90 | 87 | ||
91 | return { | 88 | return { |
92 | customRecipe: false, | 89 | customRecipe: false, |
@@ -100,7 +97,9 @@ class ServiceController { | |||
100 | spellcheckerLanguage: '', | 97 | spellcheckerLanguage: '', |
101 | workspaces: [], | 98 | workspaces: [], |
102 | ...settings, | 99 | ...settings, |
103 | iconUrl: settings.iconId ? `${Env.get('APP_URL')}/v1/icon/${settings.iconId}` : null, | 100 | iconUrl: settings.iconId |
101 | ? `${Env.get('APP_URL')}/v1/icon/${settings.iconId}` | ||
102 | : null, | ||
104 | id: service.serviceId, | 103 | id: service.serviceId, |
105 | name: service.name, | 104 | name: service.name, |
106 | recipeId: service.recipeId, | 105 | recipeId: service.recipeId, |
@@ -111,12 +110,7 @@ class ServiceController { | |||
111 | return response.send(servicesArray); | 110 | return response.send(servicesArray); |
112 | } | 111 | } |
113 | 112 | ||
114 | async edit({ | 113 | async edit({ request, response, auth, params }) { |
115 | request, | ||
116 | response, | ||
117 | auth, | ||
118 | params, | ||
119 | }) { | ||
120 | try { | 114 | try { |
121 | await auth.getUser(); | 115 | await auth.getUser(); |
122 | } catch (error) { | 116 | } catch (error) { |
@@ -129,18 +123,22 @@ class ServiceController { | |||
129 | types: ['image'], | 123 | types: ['image'], |
130 | size: '2mb', | 124 | size: '2mb', |
131 | }); | 125 | }); |
132 | const { | 126 | const { id } = params; |
133 | id, | 127 | const service = ( |
134 | } = params; | 128 | await Service.query() |
135 | const service = (await Service.query() | 129 | .where('serviceId', id) |
136 | .where('serviceId', id) | 130 | .where('userId', auth.user.id) |
137 | .where('userId', auth.user.id).fetch()).rows[0]; | 131 | .fetch() |
138 | const settings = typeof service.settings === 'string' ? JSON.parse(service.settings) : service.settings; | 132 | ).rows[0]; |
133 | const settings = | ||
134 | typeof service.settings === 'string' | ||
135 | ? JSON.parse(service.settings) | ||
136 | : service.settings; | ||
139 | 137 | ||
140 | let iconId; | 138 | let iconId; |
141 | do { | 139 | do { |
142 | iconId = uuid() + uuid(); | 140 | iconId = uuid() + uuid(); |
143 | // eslint-disable-next-line no-await-in-loop | 141 | // eslint-disable-next-line no-await-in-loop |
144 | } while (await fs.exists(path.join(Helpers.tmpPath('uploads'), iconId))); | 142 | } while (await fs.exists(path.join(Helpers.tmpPath('uploads'), iconId))); |
145 | iconId = `${iconId}.${icon.extname}`; | 143 | iconId = `${iconId}.${icon.extname}`; |
146 | 144 | ||
@@ -157,17 +155,21 @@ class ServiceController { | |||
157 | ...settings, | 155 | ...settings, |
158 | ...{ | 156 | ...{ |
159 | iconId, | 157 | iconId, |
160 | customIconVersion: settings && settings.customIconVersion ? settings.customIconVersion + 1 : 1, | 158 | customIconVersion: |
159 | settings && settings.customIconVersion | ||
160 | ? settings.customIconVersion + 1 | ||
161 | : 1, | ||
161 | }, | 162 | }, |
162 | }; | 163 | }; |
163 | 164 | ||
164 | // Update data in database | 165 | // Update data in database |
165 | await (Service.query() | 166 | await Service.query() |
166 | .where('serviceId', id) | 167 | .where('serviceId', id) |
167 | .where('userId', auth.user.id)).update({ | 168 | .where('userId', auth.user.id) |
168 | name: service.name, | 169 | .update({ |
169 | settings: JSON.stringify(newSettings), | 170 | name: service.name, |
170 | }); | 171 | settings: JSON.stringify(newSettings), |
172 | }); | ||
171 | 173 | ||
172 | return response.send({ | 174 | return response.send({ |
173 | data: { | 175 | data: { |
@@ -182,32 +184,39 @@ class ServiceController { | |||
182 | } | 184 | } |
183 | // Update service info | 185 | // Update service info |
184 | const data = request.all(); | 186 | const data = request.all(); |
185 | const { | 187 | const { id } = params; |
186 | id, | ||
187 | } = params; | ||
188 | 188 | ||
189 | // Get current settings from db | 189 | // Get current settings from db |
190 | const serviceData = (await Service.query() | 190 | const serviceData = ( |
191 | .where('serviceId', id) | 191 | await Service.query() |
192 | .where('userId', auth.user.id).fetch()).rows[0]; | 192 | .where('serviceId', id) |
193 | .where('userId', auth.user.id) | ||
194 | .fetch() | ||
195 | ).rows[0]; | ||
193 | 196 | ||
194 | const settings = { | 197 | const settings = { |
195 | ...typeof serviceData.settings === 'string' ? JSON.parse(serviceData.settings) : serviceData.settings, | 198 | ...(typeof serviceData.settings === 'string' |
199 | ? JSON.parse(serviceData.settings) | ||
200 | : serviceData.settings), | ||
196 | ...data, | 201 | ...data, |
197 | }; | 202 | }; |
198 | 203 | ||
199 | // Update data in database | 204 | // Update data in database |
200 | await (Service.query() | 205 | await Service.query() |
201 | .where('serviceId', id) | 206 | .where('serviceId', id) |
202 | .where('userId', auth.user.id)).update({ | 207 | .where('userId', auth.user.id) |
203 | name: data.name, | 208 | .update({ |
204 | settings: JSON.stringify(settings), | 209 | name: data.name, |
205 | }); | 210 | settings: JSON.stringify(settings), |
211 | }); | ||
206 | 212 | ||
207 | // Get updated row | 213 | // Get updated row |
208 | const service = (await Service.query() | 214 | const service = ( |
209 | .where('serviceId', id) | 215 | await Service.query() |
210 | .where('userId', auth.user.id).fetch()).rows[0]; | 216 | .where('serviceId', id) |
217 | .where('userId', auth.user.id) | ||
218 | .fetch() | ||
219 | ).rows[0]; | ||
211 | 220 | ||
212 | return response.send({ | 221 | return response.send({ |
213 | data: { | 222 | data: { |
@@ -221,46 +230,42 @@ class ServiceController { | |||
221 | }); | 230 | }); |
222 | } | 231 | } |
223 | 232 | ||
224 | async icon({ | 233 | async icon({ params, response }) { |
225 | params, | 234 | const { id } = params; |
226 | response, | ||
227 | }) { | ||
228 | const { | ||
229 | id, | ||
230 | } = params; | ||
231 | 235 | ||
232 | const iconPath = path.join(Helpers.tmpPath('uploads'), id); | 236 | const iconPath = path.join(Helpers.tmpPath('uploads'), id); |
233 | if (!await fs.exists(iconPath)) { | 237 | if (!(await fs.exists(iconPath))) { |
234 | return response.status(404).send({ | 238 | return response.status(404).send({ |
235 | status: 'Icon doesn\'t exist', | 239 | status: "Icon doesn't exist", |
236 | }); | 240 | }); |
237 | } | 241 | } |
238 | 242 | ||
239 | return response.download(iconPath); | 243 | return response.download(iconPath); |
240 | } | 244 | } |
241 | 245 | ||
242 | async reorder({ | 246 | async reorder({ request, response, auth }) { |
243 | request, | ||
244 | response, | ||
245 | auth, | ||
246 | }) { | ||
247 | const data = request.all(); | 247 | const data = request.all(); |
248 | 248 | ||
249 | for (const service of Object.keys(data)) { | 249 | for (const service of Object.keys(data)) { |
250 | // Get current settings from db | 250 | // Get current settings from db |
251 | const serviceData = (await Service.query() // eslint-disable-line no-await-in-loop | 251 | const serviceData = ( |
252 | .where('serviceId', service) | 252 | await Service.query() // eslint-disable-line no-await-in-loop |
253 | .where('userId', auth.user.id).fetch()).rows[0]; | 253 | .where('serviceId', service) |
254 | .where('userId', auth.user.id) | ||
255 | .fetch() | ||
256 | ).rows[0]; | ||
254 | 257 | ||
255 | const settings = { | 258 | const settings = { |
256 | ...typeof serviceData.settings === 'string' ? JSON.parse(serviceData.settings) : serviceData.settings, | 259 | ...(typeof serviceData.settings === 'string' |
260 | ? JSON.parse(serviceData.settings) | ||
261 | : serviceData.settings), | ||
257 | order: data[service], | 262 | order: data[service], |
258 | }; | 263 | }; |
259 | 264 | ||
260 | // Update data in database | 265 | // Update data in database |
261 | await (Service.query() // eslint-disable-line no-await-in-loop | 266 | await Service.query() // eslint-disable-line no-await-in-loop |
262 | .where('serviceId', service) | 267 | .where('serviceId', service) |
263 | .where('userId', auth.user.id)) | 268 | .where('userId', auth.user.id) |
264 | .update({ | 269 | .update({ |
265 | settings: JSON.stringify(settings), | 270 | settings: JSON.stringify(settings), |
266 | }); | 271 | }); |
@@ -269,8 +274,11 @@ class ServiceController { | |||
269 | // Get new services | 274 | // Get new services |
270 | const services = (await auth.user.services().fetch()).rows; | 275 | const services = (await auth.user.services().fetch()).rows; |
271 | // Convert to array with all data Franz wants | 276 | // Convert to array with all data Franz wants |
272 | const servicesArray = services.map((service) => { | 277 | const servicesArray = services.map(service => { |
273 | const settings = typeof service.settings === 'string' ? JSON.parse(service.settings) : service.settings; | 278 | const settings = |
279 | typeof service.settings === 'string' | ||
280 | ? JSON.parse(service.settings) | ||
281 | : service.settings; | ||
274 | 282 | ||
275 | return { | 283 | return { |
276 | customRecipe: false, | 284 | customRecipe: false, |
@@ -284,7 +292,9 @@ class ServiceController { | |||
284 | spellcheckerLanguage: '', | 292 | spellcheckerLanguage: '', |
285 | workspaces: [], | 293 | workspaces: [], |
286 | ...settings, | 294 | ...settings, |
287 | iconUrl: settings.iconId ? `${Env.get('APP_URL')}/v1/icon/${settings.iconId}` : null, | 295 | iconUrl: settings.iconId |
296 | ? `${Env.get('APP_URL')}/v1/icon/${settings.iconId}` | ||
297 | : null, | ||
288 | id: service.serviceId, | 298 | id: service.serviceId, |
289 | name: service.name, | 299 | name: service.name, |
290 | recipeId: service.recipeId, | 300 | recipeId: service.recipeId, |
@@ -295,21 +305,16 @@ class ServiceController { | |||
295 | return response.send(servicesArray); | 305 | return response.send(servicesArray); |
296 | } | 306 | } |
297 | 307 | ||
298 | update({ | 308 | update({ response }) { |
299 | response, | ||
300 | }) { | ||
301 | return response.send([]); | 309 | return response.send([]); |
302 | } | 310 | } |
303 | 311 | ||
304 | async delete({ | 312 | async delete({ params, auth, response }) { |
305 | params, | ||
306 | auth, | ||
307 | response, | ||
308 | }) { | ||
309 | // Update data in database | 313 | // Update data in database |
310 | await (Service.query() | 314 | await Service.query() |
311 | .where('serviceId', params.id) | 315 | .where('serviceId', params.id) |
312 | .where('userId', auth.user.id)).delete(); | 316 | .where('userId', auth.user.id) |
317 | .delete(); | ||
313 | 318 | ||
314 | return response.send({ | 319 | return response.send({ |
315 | message: 'Sucessfully deleted service', | 320 | message: 'Sucessfully deleted service', |