From 7ca82fad500f86c2774c64f905c44872d3eecd23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Thu, 6 Jul 2023 14:17:11 +0200 Subject: [PATCH] EnonceRoutes => Add routes for publish / unpublish --- ExpressAPI/src/routes/EnonceRoutes.ts | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/ExpressAPI/src/routes/EnonceRoutes.ts b/ExpressAPI/src/routes/EnonceRoutes.ts index 3881412..d81f836 100644 --- a/ExpressAPI/src/routes/EnonceRoutes.ts +++ b/ExpressAPI/src/routes/EnonceRoutes.ts @@ -20,6 +20,7 @@ import { Prisma } from '@prisma/client'; import db from '../helpers/DatabaseHelper'; import { Enonce } from '../types/DatabaseTypes'; import EnonceManager from '../managers/EnonceManager'; +import GitlabVisibility from '../shared/types/Gitlab/GitlabVisibility'; class EnonceRoutes implements RoutesManager { @@ -43,6 +44,9 @@ class EnonceRoutes implements RoutesManager { registerOnBackend(backend: Express) { backend.get('/enonces/:enonceNameOrUrl', SecurityMiddleware.check(true), this.getEnonce); backend.post('/enonces', SecurityMiddleware.check(true, SecurityCheckType.TEACHING_STAFF), ParamsValidatorMiddleware.validate(this.enonceValidator), this.createEnonce); + + backend.patch('/enonces/:enonceNameOrUrl/publish', SecurityMiddleware.check(true, SecurityCheckType.ENONCE_STAFF), this.changeEnoncePublishedStatus(true)); + backend.patch('/enonces/:enonceNameOrUrl/unpublish', SecurityMiddleware.check(true, SecurityCheckType.ENONCE_STAFF), this.changeEnoncePublishedStatus(false)); } // Get an enonce by its name or gitlab url @@ -127,6 +131,34 @@ class EnonceRoutes implements RoutesManager { return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send(); } } + + private changeEnoncePublishedStatus(publish: boolean): (req: ApiRequest, res: express.Response) => Promise<void> { + return async (req: ApiRequest, res: express.Response): Promise<void> => { + try { + await GitlabManager.changeRepositoryVisibility(req.boundParams.enonce.gitlabId, publish ? GitlabVisibility.INTERNAL : GitlabVisibility.PRIVATE); + + await db.enonce.update({ + where: { + name: req.boundParams.enonce.name + }, + data : { + published: publish + } + }); + + req.session.sendResponse(res, StatusCodes.OK); + } catch ( error ) { + if ( error instanceof AxiosError ) { + res.status(error.response.status).send(); + return; + } + + logger.error(error); + res.status(StatusCodes.INTERNAL_SERVER_ERROR).send(); + } + }; + } + } -- GitLab