aboutsummaryrefslogtreecommitdiffstats
path: root/app/Controllers/Http/WorkspaceController.ts
diff options
context:
space:
mode:
Diffstat (limited to 'app/Controllers/Http/WorkspaceController.ts')
-rw-r--r--app/Controllers/Http/WorkspaceController.ts85
1 files changed, 44 insertions, 41 deletions
diff --git a/app/Controllers/Http/WorkspaceController.ts b/app/Controllers/Http/WorkspaceController.ts
index a2bc54e..6cecf69 100644
--- a/app/Controllers/Http/WorkspaceController.ts
+++ b/app/Controllers/Http/WorkspaceController.ts
@@ -1,53 +1,53 @@
1import type { HttpContext } from '@adonisjs/core/http' 1import type { HttpContext } from '@adonisjs/core/http';
2import { validator, schema } from '@adonisjs/validator' 2import { validator, schema } from '@adonisjs/validator';
3import Workspace from '#app/Models/Workspace' 3import Workspace from '#app/Models/Workspace';
4import { v4 as uuid } from 'uuid' 4import { v4 as uuid } from 'uuid';
5 5
6const createSchema = schema.create({ 6const createSchema = schema.create({
7 name: schema.string(), 7 name: schema.string(),
8}) 8});
9 9
10const editSchema = schema.create({ 10const editSchema = schema.create({
11 name: schema.string(), 11 name: schema.string(),
12}) 12});
13 13
14const deleteSchema = schema.create({ 14const deleteSchema = schema.create({
15 id: schema.string(), 15 id: schema.string(),
16}) 16});
17 17
18export default class WorkspaceController { 18export default class WorkspaceController {
19 // Create a new workspace for user 19 // Create a new workspace for user
20 public async create({ request, response, auth }: HttpContext) { 20 public async create({ request, response, auth }: HttpContext) {
21 // @ts-expect-error Property 'user' does not exist on type 'HttpContextContract'. 21 // @ts-expect-error Property 'user' does not exist on type 'HttpContextContract'.
22 const user = auth.user ?? request.user 22 const user = auth.user ?? request.user;
23 23
24 if (!user) { 24 if (!user) {
25 return response.unauthorized('Missing or invalid api token') 25 return response.unauthorized('Missing or invalid api token');
26 } 26 }
27 27
28 // Validate user input 28 // Validate user input
29 let data 29 let data;
30 try { 30 try {
31 data = await request.validate({ schema: createSchema }) 31 data = await request.validate({ schema: createSchema });
32 } catch (error) { 32 } catch (error) {
33 return response.status(401).send({ 33 return response.status(401).send({
34 message: 'Invalid POST arguments', 34 message: 'Invalid POST arguments',
35 messages: error.messages, 35 messages: error.messages,
36 status: 401, 36 status: 401,
37 }) 37 });
38 } 38 }
39 39
40 // Get new, unused uuid 40 // Get new, unused uuid
41 let workspaceId 41 let workspaceId;
42 do { 42 do {
43 workspaceId = uuid() 43 workspaceId = uuid();
44 } while ( 44 } while (
45 // eslint-disable-next-line unicorn/no-await-expression-member, no-await-in-loop 45 // eslint-disable-next-line unicorn/no-await-expression-member, no-await-in-loop
46 (await Workspace.query().where('workspaceId', workspaceId)).length > 0 46 (await Workspace.query().where('workspaceId', workspaceId)).length > 0
47 ) 47 );
48 48
49 // eslint-disable-next-line unicorn/no-await-expression-member 49 // eslint-disable-next-line unicorn/no-await-expression-member
50 const order = (await user.related('workspaces').query()).length 50 const order = (await user.related('workspaces').query()).length;
51 51
52 await Workspace.create({ 52 await Workspace.create({
53 userId: user.id, 53 userId: user.id,
@@ -56,7 +56,7 @@ export default class WorkspaceController {
56 order, 56 order,
57 services: JSON.stringify([]), 57 services: JSON.stringify([]),
58 data: JSON.stringify(data), 58 data: JSON.stringify(data),
59 }) 59 });
60 60
61 return response.send({ 61 return response.send({
62 userId: user.id, 62 userId: user.id,
@@ -64,30 +64,30 @@ export default class WorkspaceController {
64 id: workspaceId, 64 id: workspaceId,
65 order, 65 order,
66 workspaces: [], 66 workspaces: [],
67 }) 67 });
68 } 68 }
69 69
70 public async edit({ request, response, auth, params }: HttpContext) { 70 public async edit({ request, response, auth, params }: HttpContext) {
71 // @ts-expect-error Property 'user' does not exist on type 'HttpContextContract'. 71 // @ts-expect-error Property 'user' does not exist on type 'HttpContextContract'.
72 const user = auth.user ?? request.user 72 const user = auth.user ?? request.user;
73 73
74 if (!user) { 74 if (!user) {
75 return response.unauthorized('Missing or invalid api token') 75 return response.unauthorized('Missing or invalid api token');
76 } 76 }
77 77
78 // Validate user input 78 // Validate user input
79 try { 79 try {
80 await request.validate({ schema: editSchema }) 80 await request.validate({ schema: editSchema });
81 } catch (error) { 81 } catch (error) {
82 return response.status(401).send({ 82 return response.status(401).send({
83 message: 'Invalid POST arguments', 83 message: 'Invalid POST arguments',
84 messages: error.messages, 84 messages: error.messages,
85 status: 401, 85 status: 401,
86 }) 86 });
87 } 87 }
88 88
89 const data = request.all() 89 const data = request.all();
90 const { id } = params 90 const { id } = params;
91 91
92 // Update data in database 92 // Update data in database
93 await Workspace.query() 93 await Workspace.query()
@@ -96,13 +96,13 @@ export default class WorkspaceController {
96 .update({ 96 .update({
97 name: data.name, 97 name: data.name,
98 services: JSON.stringify(data.services), 98 services: JSON.stringify(data.services),
99 }) 99 });
100 100
101 // Get updated row 101 // Get updated row
102 const workspace = await Workspace.query() 102 const workspace = await Workspace.query()
103 .where('workspaceId', id) 103 .where('workspaceId', id)
104 .where('userId', user.id) 104 .where('userId', user.id)
105 .firstOrFail() 105 .firstOrFail();
106 106
107 return response.send({ 107 return response.send({
108 id: workspace.workspaceId, 108 id: workspace.workspaceId,
@@ -110,54 +110,57 @@ export default class WorkspaceController {
110 order: workspace.order, 110 order: workspace.order,
111 services: data.services, 111 services: data.services,
112 userId: user.id, 112 userId: user.id,
113 }) 113 });
114 } 114 }
115 115
116 public async delete({ request, response, auth, params }: HttpContext) { 116 public async delete({ request, response, auth, params }: HttpContext) {
117 // @ts-expect-error Property 'user' does not exist on type 'HttpContextContract'. 117 // @ts-expect-error Property 'user' does not exist on type 'HttpContextContract'.
118 const user = auth.user ?? request.user 118 const user = auth.user ?? request.user;
119 119
120 if (!user) { 120 if (!user) {
121 return response.unauthorized('Missing or invalid api token') 121 return response.unauthorized('Missing or invalid api token');
122 } 122 }
123 123
124 // Validate user input 124 // Validate user input
125 let data 125 let data;
126 try { 126 try {
127 data = await validator.validate({ 127 data = await validator.validate({
128 data: params, 128 data: params,
129 schema: deleteSchema, 129 schema: deleteSchema,
130 }) 130 });
131 } catch (error) { 131 } catch (error) {
132 return response.status(401).send({ 132 return response.status(401).send({
133 message: 'Invalid arguments', 133 message: 'Invalid arguments',
134 messages: error.messages, 134 messages: error.messages,
135 status: 401, 135 status: 401,
136 }) 136 });
137 } 137 }
138 138
139 const { id } = data 139 const { id } = data;
140 140
141 // Update data in database 141 // Update data in database
142 await Workspace.query().where('workspaceId', id).where('userId', user.id).delete() 142 await Workspace.query()
143 .where('workspaceId', id)
144 .where('userId', user.id)
145 .delete();
143 146
144 return response.send({ 147 return response.send({
145 message: 'Successfully deleted workspace', 148 message: 'Successfully deleted workspace',
146 }) 149 });
147 } 150 }
148 151
149 // List all workspaces a user has created 152 // List all workspaces a user has created
150 public async list({ request, response, auth }: HttpContext) { 153 public async list({ request, response, auth }: HttpContext) {
151 // @ts-expect-error Property 'user' does not exist on type 'HttpContextContract'. 154 // @ts-expect-error Property 'user' does not exist on type 'HttpContextContract'.
152 const user = auth.user ?? request.user 155 const user = auth.user ?? request.user;
153 156
154 if (!user) { 157 if (!user) {
155 return response.unauthorized('Missing or invalid api token') 158 return response.unauthorized('Missing or invalid api token');
156 } 159 }
157 160
158 const workspaces = await user.related('workspaces').query() 161 const workspaces = await user.related('workspaces').query();
159 // Convert to array with all data Franz wants 162 // Convert to array with all data Franz wants
160 let workspacesArray: object[] = [] 163 let workspacesArray: object[] = [];
161 if (workspaces) { 164 if (workspaces) {
162 // eslint-disable-next-line @typescript-eslint/no-explicit-any 165 // eslint-disable-next-line @typescript-eslint/no-explicit-any
163 workspacesArray = workspaces.map((workspace: any) => ({ 166 workspacesArray = workspaces.map((workspace: any) => ({
@@ -169,9 +172,9 @@ export default class WorkspaceController {
169 ? JSON.parse(workspace.services) 172 ? JSON.parse(workspace.services)
170 : workspace.services, 173 : workspace.services,
171 userId: user.id, 174 userId: user.id,
172 })) 175 }));
173 } 176 }
174 177
175 return response.send(workspacesArray) 178 return response.send(workspacesArray);
176 } 179 }
177} 180}