From 12d1b605fdf691e1a28596d48789c25378830f94 Mon Sep 17 00:00:00 2001
From: Roland Bernard <rolbernard@unibz.it>
Date: Mon, 17 May 2021 17:01:55 +0200
Subject: [PATCH] Added a API request to update roles

---
 server/src/v1/team.ts | 159 +++++++++++++++++++++++++++++-------------
 1 file changed, 111 insertions(+), 48 deletions(-)

diff --git a/server/src/v1/team.ts b/server/src/v1/team.ts
index a12609e..f2af7c9 100644
--- a/server/src/v1/team.ts
+++ b/server/src/v1/team.ts
@@ -233,54 +233,6 @@ team.get('/:uuid/members', async (req, res) => {
     }
 });
 
-team.delete('/:teamid/members/:userid', async (req, res) => {
-    try {
-        const team_id = req.params.teamid;
-        const user_id = req.params.userid;
-        if (validate(team_id) && validate(user_id)) {
-            const team = await database('team_members')
-                .select({ id: 'team_members.team_id' })
-                .where({
-                    'team_members.user_id': req.body.token.id,
-                    'team_members.team_id': team_id,
-                });
-            if (team.length >= 1) {
-                const deleted = await database('team_members')
-                    .delete()
-                    .where({
-                        'team_members.user_id': user_id,
-                        'team_members.team_id': team_id,
-                    });
-                if (deleted >= 1) {
-                    res.status(200).json({
-                        status: 'success',
-                    });
-                } else {
-                    res.status(404).json({
-                        status: 'error',
-                        message: 'role not found',
-                    });
-                }
-            } else {
-                res.status(404).json({
-                    status: 'error',
-                    message: 'team not found',
-                });
-            }
-        } else {
-            res.status(400).json({
-                status: 'error',
-                message: 'malformed uuid',
-            });
-        }
-    } catch (e) {
-        res.status(400).json({
-            status: 'error',
-            message: 'failed remove members',
-        });
-    }
-});
-
 team.get('/:uuid/roles', async (req, res) => {
     try {
         const id = req.params.uuid;
@@ -454,6 +406,69 @@ team.post('/:uuid/roles', async (req, res) => {
     }
 });
 
+interface UpdateRoleBody {
+    name: string;
+    token: Token;
+}
+
+team.put('/:teamid/roles/:roleid', async (req, res) => {
+    if (isOfType<UpdateRoleBody>(req.body, [['name', 'string']])) {
+        try {
+            const team_id = req.params.teamid;
+            const role_id = req.params.roleid;
+            if (validate(team_id) && validate(role_id)) {
+                const team = await database('team_members')
+                    .select({ id: 'team_members.team_id' })
+                    .where({
+                        'team_members.user_id': req.body.token.id,
+                        'team_members.team_id': team_id,
+                    });
+                if (team.length >= 1) {
+                    const role_name = req.body.name;
+                    const updated = await database('roles')
+                        .update({
+                            name: role_name,
+                        })
+                        .where({
+                            id: role_id,
+                            team_id: team_id,
+                        });
+                    if (updated >= 1) {
+                        res.status(200).json({
+                            status: 'success',
+                        });
+                    } else {
+                        res.status(404).json({
+                            status: 'error',
+                            message: 'role not found',
+                        });
+                    }
+                } else {
+                    res.status(404).json({
+                        status: 'error',
+                        message: 'team not found',
+                    });
+                }
+            } else {
+                res.status(400).json({
+                    status: 'error',
+                    message: 'malformed uuid',
+                });
+            }
+        } catch (e) {
+            res.status(400).json({
+                status: 'error',
+                message: 'failed to update role',
+            });
+        }
+    } else {
+        res.status(400).json({
+            status: 'error',
+            message: 'missing request fields',
+        });
+    }
+});
+
 team.delete('/:teamid/roles/:roleid', async (req, res) => {
     try {
         const team_id = req.params.teamid;
@@ -615,6 +630,54 @@ team.put('/:uuid/members', async (req, res) => {
     }
 });
 
+team.delete('/:teamid/members/:userid', async (req, res) => {
+    try {
+        const team_id = req.params.teamid;
+        const user_id = req.params.userid;
+        if (validate(team_id) && validate(user_id)) {
+            const team = await database('team_members')
+                .select({ id: 'team_members.team_id' })
+                .where({
+                    'team_members.user_id': req.body.token.id,
+                    'team_members.team_id': team_id,
+                });
+            if (team.length >= 1) {
+                const deleted = await database('team_members')
+                    .delete()
+                    .where({
+                        'team_members.user_id': user_id,
+                        'team_members.team_id': team_id,
+                    });
+                if (deleted >= 1) {
+                    res.status(200).json({
+                        status: 'success',
+                    });
+                } else {
+                    res.status(404).json({
+                        status: 'error',
+                        message: 'role not found',
+                    });
+                }
+            } else {
+                res.status(404).json({
+                    status: 'error',
+                    message: 'team not found',
+                });
+            }
+        } else {
+            res.status(400).json({
+                status: 'error',
+                message: 'malformed uuid',
+            });
+        }
+    } catch (e) {
+        res.status(400).json({
+            status: 'error',
+            message: 'failed remove members',
+        });
+    }
+});
+
 team.delete('/:uuid/', async (req, res) => {
     try {
         const id = req.params.uuid;
-- 
GitLab