From 518d48c06510667c50a12459296306c9acdeff9c Mon Sep 17 00:00:00 2001 From: "kelly.nguyen" <kelly.nguyen@etu.hesge.ch> Date: Tue, 18 Jun 2024 18:48:38 +0200 Subject: [PATCH] add branch add_export_route --- ExpressAPI/src/managers/GitlabManager.ts | 13 ++++++++++++- ExpressAPI/src/routes/AssignmentRoutes.ts | 7 +++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts index bd2746a..56e81f7 100644 --- a/ExpressAPI/src/managers/GitlabManager.ts +++ b/ExpressAPI/src/managers/GitlabManager.ts @@ -3,7 +3,7 @@ import { StatusCodes } import GitlabVisibility from '../shared/types/Gitlab/GitlabVisibility.js'; import express from 'express'; import SharedConfig from '../shared/config/SharedConfig.js'; -import { CommitSchema, ExpandedUserSchema, Gitlab, MemberSchema, ProjectBadgeSchema, ProjectSchema, ReleaseSchema, RepositoryFileExpandedSchema, RepositoryFileSchema, RepositoryTreeSchema } from '@gitbeaker/rest'; +import { ArchiveType, CommitSchema, ExpandedUserSchema, Gitlab, MemberSchema, ProjectBadgeSchema, ProjectSchema, ReleaseSchema, RepositoryFileExpandedSchema, RepositoryFileSchema, RepositoryTreeSchema } from '@gitbeaker/rest'; import logger from '../shared/logging/WinstonLogger.js'; import { AccessLevel, EditProjectOptions, ProjectVariableSchema, ProtectedBranchAccessLevel, ProtectedBranchSchema } from '@gitbeaker/core'; import DojoStatusCode from '../shared/types/Dojo/DojoStatusCode.js'; @@ -267,6 +267,17 @@ class GitlabManager extends SharedGitlabManager { return Promise.reject(e); } } + + async exportRepository(repoId: number, extension: ArchiveType): Promise<Blob> { + try { + return await this.api.Repositories.showArchive(repoId, { + fileType: extension + }); + } catch ( e ) { + logger.error(JSON.stringify(e)); + return Promise.reject(e); + } + } } diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts index 5f46129..acac72d 100644 --- a/ExpressAPI/src/routes/AssignmentRoutes.ts +++ b/ExpressAPI/src/routes/AssignmentRoutes.ts @@ -80,6 +80,7 @@ class AssignmentRoutes implements RoutesManager { backend.post('/assignments/:assignmentNameOrUrl/corrections', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), ParamsValidatorMiddleware.validate(this.assignmentAddCorrigeValidator), this.linkUpdateAssignmentCorrection(false).bind(this) as RequestHandler); backend.patch('/assignments/:assignmentNameOrUrl/corrections/:exerciseIdOrUrl', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), ParamsValidatorMiddleware.validate(this.assignmentUpdateCorrigeValidator), this.linkUpdateAssignmentCorrection(true).bind(this) as RequestHandler); backend.delete('/assignments/:assignmentNameOrUrl/corrections/:exerciseIdOrUrl', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), this.unlinkAssignmentCorrection.bind(this) as RequestHandler); + backend.get('/assignments/:assignmentNameOrUrl/export', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), this.exportAssignment.bind(this) as RequestHandler); } // Get an assignment by its name or gitlab url @@ -299,6 +300,12 @@ class AssignmentRoutes implements RoutesManager { return req.session.sendResponse(res, StatusCodes.OK); } + + private async exportAssignment(req: express.Request, res: express.Response) { + let ext : Gitlab.ArchiveType = 'zip'; + await GitlabManager.exportRepository(req.boundParams.assignment!.gitlabId, ext); + return req.session.sendResponse(res, StatusCodes.OK); + } } -- GitLab