Skip to content
Snippets Groups Projects
Commit 7ca82fad authored by michael.minelli's avatar michael.minelli
Browse files

EnonceRoutes => Add routes for publish / unpublish

parent e883c7c9
No related branches found
No related tags found
No related merge requests found
......@@ -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();
}
};
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment