From 213bf1dc35323fa3f2f02f614fc17e5599fb2f68 Mon Sep 17 00:00:00 2001
From: "kelly.nguyen" <kelly.nguyen@etu.hesge.ch>
Date: Mon, 27 May 2024 21:03:18 +0200
Subject: [PATCH] fix deleteAssignment route

---
 ExpressAPI/src/managers/GitlabManager.ts      |  6 +++
 ExpressAPI/src/routes/AssignmentRoutes.ts     | 20 +++++++---
 .../src/shared/types/Gitlab/GitlabRoute.ts    | 39 ++++++++++---------
 3 files changed, 40 insertions(+), 25 deletions(-)

diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts
index 096161b..8809faa 100644
--- a/ExpressAPI/src/managers/GitlabManager.ts
+++ b/ExpressAPI/src/managers/GitlabManager.ts
@@ -69,6 +69,12 @@ class GitlabManager {
         return response.data;
     }
 
+    async getRepositoryDirectMembers(idOrNamespace: string): Promise<Array<GitlabMember>> {
+        const response = await axios.get<Array<GitlabMember>>(this.getApiUrl(GitlabRoute.REPOSITORY_DIRECT_MEMBERS_GET).replace('{{id}}', encodeURIComponent(idOrNamespace)));
+
+        return response.data;
+    }
+
     async getRepositoryReleases(repoId: number): Promise<Array<GitlabRelease>> {
         const response = await axios.get<Array<GitlabRelease>>(this.getApiUrl(GitlabRoute.REPOSITORY_RELEASES_GET).replace('{{id}}', String(repoId)));
 
diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts
index 0cdda90..b5fbd84 100644
--- a/ExpressAPI/src/routes/AssignmentRoutes.ts
+++ b/ExpressAPI/src/routes/AssignmentRoutes.ts
@@ -225,17 +225,25 @@ class AssignmentRoutes implements RoutesManager {
             return req.session.sendResponse(res, StatusCodes.NOT_FOUND);
         }
 
-        const members = await GitlabManager.getRepositoryMembers(String(repo['gitlabId']));
+        // const members = await GitlabManager.getRepositoryMembers(String(repo['gitlabId']));
+        const members = await GitlabManager.getRepositoryDirectMembers(String(repo['gitlabId']));
         members.forEach(async member => {
             if ( member.id !== Config.gitlab.account.id ) {
-                await GitlabManager.removeRepositoryMember(repo['gitlabId'], member.id);
+                logger.debug(`${member.name} : ${member.id}`);
+                try {
+                    await GitlabManager.removeRepositoryMember(repo['gitlabId'], member.id);
+                } catch (error) {
+                    logger.error(`Error while removing members ${member.id} with this error : ${error}`);                    
+                }
             }
         });
-        await GitlabManager.moveRepositorySubGroup(repo['gitlabId'], 14193);
-        
-        // recup l'id du repo en question
-        await GitlabManager.removeRepositoryMember(repo['gitlabId'], 627);
         
+        try {
+            await GitlabManager.moveRepositorySubGroup(repo['gitlabId'], 14193);
+            logger.debug("Repo was successfully move");
+        } catch (error) {
+            logger.debug(`Error while moving the repo to "deleted" with  the error : ${error}`);
+        }
         
         await db.assignment.update({
             where : {
diff --git a/ExpressAPI/src/shared/types/Gitlab/GitlabRoute.ts b/ExpressAPI/src/shared/types/Gitlab/GitlabRoute.ts
index ade5852..4485f38 100644
--- a/ExpressAPI/src/shared/types/Gitlab/GitlabRoute.ts
+++ b/ExpressAPI/src/shared/types/Gitlab/GitlabRoute.ts
@@ -1,23 +1,24 @@
 enum GitlabRoute {
-    NOTIFICATION_SETTINGS       = '/notification_settings',
-    PROFILE_GET                 = '/user',
-    USERS_GET                   = '/users',
-    REPOSITORY_GET              = '/projects/{{id}}',
-    REPOSITORY_CREATE           = '/projects', // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
-    REPOSITORY_DELETE           = '/projects/{{id}}', // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
-    REPOSITORY_EDIT             = '/projects/{{id}}',
-    REPOSITORY_FORK             = '/projects/{{id}}/fork',
-    REPOSITORY_MEMBER_ADD       = '/projects/{{id}}/members',
-    REPOSITORY_MEMBERS_GET      = '/projects/{{id}}/members/all',
-    REPOSITORY_RELEASES_GET     = '/projects/{{id}}/releases',
-    REPOSITORY_BADGES_ADD       = '/projects/{{id}}/badges',
-    REPOSITORY_VARIABLES_ADD    = '/projects/{{id}}/variables',
-    REPOSITORY_BRANCHES_PROTECT = '/projects/{{id}}/protected_branches',
-    REPOSITORY_TREE             = '/projects/{{id}}/repository/tree',
-    REPOSITORY_FILE             = '/projects/{{id}}/repository/files/{{filePath}}',
-    REPOSITORY_PIPELINES        = '/projects/{{id}}/pipelines',
-    REPOSITORY_MEMBER_DELETE    = '/projects/{{id}}/members/{{user_id}}',
-    REPOSITORY_MOVE_SUBGROUP    = '/projects/{{id}}/transfer',
+    NOTIFICATION_SETTINGS           = '/notification_settings',
+    PROFILE_GET                     = '/user',
+    USERS_GET                       = '/users',
+    REPOSITORY_GET                  = '/projects/{{id}}',
+    REPOSITORY_CREATE               = '/projects', // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
+    REPOSITORY_DELETE               = '/projects/{{id}}', // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
+    REPOSITORY_EDIT                 = '/projects/{{id}}',
+    REPOSITORY_FORK                 = '/projects/{{id}}/fork',
+    REPOSITORY_MEMBER_ADD           = '/projects/{{id}}/members',
+    REPOSITORY_MEMBERS_GET          = '/projects/{{id}}/members/all',
+    REPOSITORY_DIRECT_MEMBERS_GET   = '/projects/{{id}}/members',
+    REPOSITORY_RELEASES_GET         = '/projects/{{id}}/releases',
+    REPOSITORY_BADGES_ADD           = '/projects/{{id}}/badges',
+    REPOSITORY_VARIABLES_ADD        = '/projects/{{id}}/variables',
+    REPOSITORY_BRANCHES_PROTECT     = '/projects/{{id}}/protected_branches',
+    REPOSITORY_TREE                 = '/projects/{{id}}/repository/tree',
+    REPOSITORY_FILE                 = '/projects/{{id}}/repository/files/{{filePath}}',
+    REPOSITORY_PIPELINES            = '/projects/{{id}}/pipelines',
+    REPOSITORY_MEMBER_DELETE        = '/projects/{{id}}/members/{{user_id}}',
+    REPOSITORY_MOVE_SUBGROUP        = '/projects/{{id}}/transfer',
 }
 
 
-- 
GitLab