1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
'use strict'
const Workspace = use('App/Models/Workspace');
const uuid = require('uuid/v4');
class WorkspaceController {
// Create a new workspace for user
async create({
request,
response,
auth
}) {
try {
await auth.getUser()
} catch (error) {
return response.send('Missing or invalid api token')
}
const data = request.all();
// Get new, unused uuid
let workspaceId;
do {
workspaceId = uuid();
} while ((await Workspace.query().where('workspaceId', workspaceId).fetch()).rows.length > 0)
const order = (await auth.user.workspaces().fetch()).rows.length;
await Workspace.create({
userId: auth.user.id,
workspaceId,
name: data.name,
order,
services: JSON.stringify([]),
data: JSON.stringify(data)
});
return response.send({
userId: auth.user.id,
name: data.name,
id: workspaceId,
order,
workspaces: [],
})
}
async edit({
request,
response,
auth,
params
}) {
try {
await auth.getUser()
} catch (error) {
return response.send('Missing or invalid api token')
}
const data = request.all();
const {
id
} = params;
// Update data in database
await (Workspace.query()
.where('workspaceId', id)
.where('userId', auth.user.id)).update({
name: data.name,
services: JSON.stringify(data.services)
});
// Get updated row
const workspace = (await Workspace.query()
.where('workspaceId', id)
.where('userId', auth.user.id).fetch()).rows[0];
return response.send({
"id": workspace.workspaceId,
"name": data.name,
"order": workspace.order,
"services": data.services,
"userId": auth.user.id
})
}
// List all workspaces a user has created
async list({
request,
response,
auth
}) {
try {
await auth.getUser()
} catch (error) {
return response.send('Missing or invalid api token')
}
const workspaces = (await auth.user.workspaces().fetch()).rows;
// Convert to array with all data Franz wants
let workspacesArray = [];
if(workspaces) {
workspacesArray = workspaces.map(workspace => ({
"id": workspace.workspaceId,
"name": workspace.name,
"order": workspace.order,
"services": JSON.parse(workspace.services),
"userId": auth.user.id
}))
}
return response.send(workspacesArray)
}
}
module.exports = WorkspaceController
|