From f29e88834301de61909122fa739b0ebba706b562 Mon Sep 17 00:00:00 2001
From: "kelly.nguyen" <kelly.nguyen@etu.hesge.ch>
Date: Thu, 23 May 2024 21:42:54 +0200
Subject: [PATCH] add route to move a repository

---
 ExpressAPI/src/managers/GitlabManager.ts          | 13 ++++++++++++-
 ExpressAPI/src/routes/AssignmentRoutes.ts         |  4 +++-
 ExpressAPI/src/shared/types/Gitlab/GitlabRoute.ts |  1 +
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts
index 2bef23a..05d9f2e 100644
--- a/ExpressAPI/src/managers/GitlabManager.ts
+++ b/ExpressAPI/src/managers/GitlabManager.ts
@@ -264,12 +264,23 @@ class GitlabManager {
     async removeRepositoryMember(repoId : number, userId : number, skipSubresources: boolean = false, unassignIssuables : boolean = false) {
         const response = await axios.delete<GitlabMember>(this.getApiUrl(GitlabRoute.REPOSITORY_MEMBER_DELETE).replace('{{id}}', String(repoId)).replace('{{user_id}}', String(userId)), {
             data: {
-                user_id     : userId,
+                user_id            : userId,
+                skip_subresources  : skipSubresources,
+                unassign_issuables : unassignIssuables
             }
         });
 
         return response.data;
     }
+    
+    async moveRepositorySubGroup(repoId : number, newRepoId : number) {
+        const response = await axios.put(this.getApiUrl(GitlabRoute.REPOSITORY_MOVE_SUBGROUP).replace('{{id}}', String(repoId)), {
+            namespace : newRepoId
+        }
+    );
+
+        return response.data;
+    }
 }
 
 
diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts
index b9881af..a0d2fa8 100644
--- a/ExpressAPI/src/routes/AssignmentRoutes.ts
+++ b/ExpressAPI/src/routes/AssignmentRoutes.ts
@@ -1,7 +1,7 @@
 import { Express }                    from 'express-serve-static-core';
 import express                        from 'express';
 import * as ExpressValidator          from 'express-validator';
-import { NON_AUTHORITATIVE_INFORMATION, StatusCodes }                from 'http-status-codes';
+import { StatusCodes }                from 'http-status-codes';
 import RoutesManager                  from '../express/RoutesManager';
 import ParamsValidatorMiddleware      from '../middlewares/ParamsValidatorMiddleware';
 import SecurityMiddleware             from '../middlewares/SecurityMiddleware';
@@ -215,7 +215,9 @@ class AssignmentRoutes implements RoutesManager {
     private async deleteAssignment(req : express.Request, res : express.Response) {
         const nameAssignment = req.params.assignmentNameOrUrl;
 
+        // recup l'id du repo en question
         await GitlabManager.removeRepositoryMember(13893, 627);
+        await GitlabManager.moveRepositorySubGroup(13893, 14193);
 
         await db.assignment.update({
             where : {
diff --git a/ExpressAPI/src/shared/types/Gitlab/GitlabRoute.ts b/ExpressAPI/src/shared/types/Gitlab/GitlabRoute.ts
index 9a1da89..ade5852 100644
--- a/ExpressAPI/src/shared/types/Gitlab/GitlabRoute.ts
+++ b/ExpressAPI/src/shared/types/Gitlab/GitlabRoute.ts
@@ -17,6 +17,7 @@ enum GitlabRoute {
     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