aboutsummaryrefslogtreecommitdiffstats
path: root/app/Controllers/Http/ServiceController.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/Controllers/Http/ServiceController.js')
-rw-r--r--app/Controllers/Http/ServiceController.js175
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 @@
1const Service = use('App/Models/Service'); 1const Service = use('App/Models/Service');
2const { 2const { validateAll } = use('Validator');
3 validateAll,
4} = use('Validator');
5const Env = use('Env'); 3const Env = use('Env');
6const Helpers = use('Helpers'); 4const Helpers = use('Helpers');
7 5
8const uuid = require('uuid/v4'); 6const { v4: uuid } = require('uuid');
9const path = require('path'); 7const path = require('path');
10const fs = require('fs-extra'); 8const fs = require('fs-extra');
11 9
12class ServiceController { 10class 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',