Skip to content
Snippets Groups Projects
Commit 2200cfae authored by vincent.steinman's avatar vincent.steinman Committed by michael.minelli
Browse files

split tag managers with tag submit manager

parent d1d115dd
No related branches found
No related tags found
No related merge requests found
/*
Warnings:
- You are about to alter the column `state` on the `SubmissionTag` table. The data in that column could be lost. The data in that column will be cast from `VarChar(191)` to `Enum(EnumId(3))`.
*/
-- AlterTable
ALTER TABLE `SubmissionTag` MODIFY `state` ENUM('PENDINGAPPROVAL', 'DECLINED', 'APPROVED') NOT NULL;
-- This is an empty migration.
\ No newline at end of file
/*
Warnings:
- You are about to alter the column `state` on the `SubmissionTag` table. The data in that column could be lost. The data in that column will be cast from `Enum(EnumId(3))` to `VarChar(191)`.
*/
-- AlterTable
ALTER TABLE `SubmissionTag` MODIFY `state` VARCHAR(191) NOT NULL;
...@@ -20,12 +20,6 @@ enum TagType { ...@@ -20,12 +20,6 @@ enum TagType {
USERDEFINED USERDEFINED
} }
enum SubmissionStatus{
PENDINGAPPROVAL
DECLINED
APPROVED
}
model User { model User {
id Int @id /// The user's id is the same as their gitlab id id Int @id /// The user's id is the same as their gitlab id
name String? name String?
......
...@@ -12,5 +12,5 @@ class TagManager { ...@@ -12,5 +12,5 @@ class TagManager {
} }
} }
export default new TagManager(); export default new TagManager();
import { Prisma, SubmissionTag } from '@prisma/client';
import db from '../helpers/DatabaseHelper';
class TagSubmitManager {
async get(name: string | undefined = undefined): Promise<SubmissionTag | undefined> {
return await db.submissionTag.findUnique({
where : {
name: name
}
}) as unknown as SubmissionTag ?? undefined;
}
}
export default new TagSubmitManager();
...@@ -3,7 +3,8 @@ import express from 'express'; ...@@ -3,7 +3,8 @@ import express from 'express';
import { StatusCodes } from 'http-status-codes'; import { StatusCodes } from 'http-status-codes';
import ExerciseManager from '../managers/ExerciseManager'; import ExerciseManager from '../managers/ExerciseManager';
import AssignmentManager from '../managers/AssignmentManager'; import AssignmentManager from '../managers/AssignmentManager';
import TagManager from '../managers/TagManager'; import TagManager from '../managers/TagManager';
import TagSubmitManager from '../managers/TagSubmitManager';
type GetFunction = (id: string | number, ...args: Array<unknown>) => Promise<unknown> type GetFunction = (id: string | number, ...args: Array<unknown>) => Promise<unknown>
...@@ -51,7 +52,7 @@ class ParamsCallbackManager { ...@@ -51,7 +52,7 @@ class ParamsCallbackManager {
} ], 'tags'); } ], 'tags');
this.listenParam('tagProposalName', backend, (TagManager.get as GetFunction).bind(TagManager), [ { this.listenParam('tagProposalName', backend, (TagSubmitManager.get as GetFunction).bind(TagSubmitManager), [ {
} ], 'tags'); } ], 'tags');
} }
......
import { Express } from 'express-serve-static-core';
import express from 'express'; import express from 'express';
import { TagType } from '@prisma/client';
import * as ExpressValidator from 'express-validator'; import * as ExpressValidator from 'express-validator';
import { StatusCodes } from 'http-status-codes'; import { StatusCodes } from 'http-status-codes';
import RoutesManager from '../express/RoutesManager'; import RoutesManager from '../express/RoutesManager';
import ParamsValidatorMiddleware from '../middlewares/ParamsValidatorMiddleware'; import { Express } from 'express-serve-static-core';
import SecurityMiddleware from '../middlewares/SecurityMiddleware';
import SecurityCheckType from '../types/SecurityCheckType';
import db from '../helpers/DatabaseHelper'; import db from '../helpers/DatabaseHelper';
import { Tags } from '../types/DatabaseTypes'; import SecurityCheckType from '../types/SecurityCheckType';
import { TagType } from '@prisma/client'; import SecurityMiddleware from '../middlewares/SecurityMiddleware';
import ParamsValidatorMiddleware from '../middlewares/ParamsValidatorMiddleware';
enum SubmitStatus{ enum SubmitStatus{
...@@ -36,12 +35,19 @@ class TagRoutes implements RoutesManager { ...@@ -36,12 +35,19 @@ class TagRoutes implements RoutesManager {
}, },
}; };
private readonly tagsValidatorName: ExpressValidator.Schema = {
tagProposalName: {
trim: true,
notEmpty: true
},
};
registerOnBackend(backend: Express) { registerOnBackend(backend: Express) {
backend.post('/tags', SecurityMiddleware.check(true, SecurityCheckType.TEACHING_STAFF), ParamsValidatorMiddleware.validate(this.tagsValidatorNameType), this.addTag.bind(this)); backend.post('/tags', SecurityMiddleware.check(true, SecurityCheckType.TEACHING_STAFF), ParamsValidatorMiddleware.validate(this.tagsValidatorNameType), this.addTag.bind(this));
backend.delete('/tags/:tageName', SecurityMiddleware.check(true, SecurityCheckType.ADMIN), this.deleteTag.bind(this)); backend.delete('/tags/:tageName', SecurityMiddleware.check(true, SecurityCheckType.ADMIN), this.deleteTag.bind(this));
backend.get('/tags/proposals/state', SecurityMiddleware.check(true, SecurityCheckType.ADMIN), this.getSubmittedTag.bind(this)); //Check ? backend.get('/tags/proposals/:state', SecurityMiddleware.check(true, SecurityCheckType.ADMIN), this.getSubmittedTag.bind(this));
backend.post('/tags/proposals', SecurityMiddleware.check(true, SecurityCheckType.TEACHING_STAFF), ParamsValidatorMiddleware.validate(this.tagsValidatorNameType), this.SubmitTag.bind(this)); backend.post('/tags/proposals', SecurityMiddleware.check(true, SecurityCheckType.TEACHING_STAFF), ParamsValidatorMiddleware.validate(this.tagsValidatorNameType), this.SubmitTag.bind(this));
backend.patch('/tags/proposals/:tagProposalName', SecurityMiddleware.check(true, SecurityCheckType.ADMIN), ParamsValidatorMiddleware.validate(this.tagsValidatorStatus), this.validateTag.bind(this)); backend.patch('/tags/proposals/:tagProposalName', SecurityMiddleware.check(true, SecurityCheckType.ADMIN), ParamsValidatorMiddleware.validate(this.tagsValidatorName), this.validateTag.bind(this));
} }
private async addTag(req: express.Request, res: express.Response) { private async addTag(req: express.Request, res: express.Response) {
...@@ -74,17 +80,14 @@ class TagRoutes implements RoutesManager { ...@@ -74,17 +80,14 @@ class TagRoutes implements RoutesManager {
return req.session.sendResponse(res, StatusCodes.OK, "Tag supprimé avec succès"); return req.session.sendResponse(res, StatusCodes.OK, "Tag supprimé avec succès");
} }
private async getSubmittedTag(req: express.Request, res: express.Response) { private async getSubmittedTag(req: express.Request, res: express.Response) {
const state = req.params.name const state = req.params.state
db.submissionTag.findMany({ db.submissionTag.findMany({
where : { where : {
state: state state: state
} }
}) })
return req.session.sendResponse(res, StatusCodes.OK, { return req.session.sendResponse(res, StatusCodes.OK);
name : req.body.name,
tag : req.body.type
});
} }
private async SubmitTag(req: express.Request, res: express.Response) { private async SubmitTag(req: express.Request, res: express.Response) {
const tagName = req.body.name const tagName = req.body.name
...@@ -107,10 +110,13 @@ class TagRoutes implements RoutesManager { ...@@ -107,10 +110,13 @@ class TagRoutes implements RoutesManager {
}); });
} }
private async validateTag(req: express.Request, res: express.Response) { private async validateTag(req: express.Request, res: express.Response) {
if(req.body.state == SubmitStatus.PendingApproval){ const state = req.body.state
if(state == SubmitStatus.PendingApproval){
return req.session.sendResponse(res, StatusCodes.OK, "Approbation toujours en attente"); return req.session.sendResponse(res, StatusCodes.OK, "Approbation toujours en attente");
} else if (req.body.state == SubmitStatus.Declined){ } else if (state == SubmitStatus.Declined){
return req.session.sendResponse(res, StatusCodes.OK, req.body.details); const detail = req.body.details
return req.session.sendResponse(res, StatusCodes.OK, detail);
} else{ } else{
const tagName = req.params.tagProposalName const tagName = req.params.tagProposalName
const tagType = req.body.type const tagType = req.body.type
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment