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 {
USERDEFINED
}
enum SubmissionStatus{
PENDINGAPPROVAL
DECLINED
APPROVED
}
model User {
id Int @id /// The user's id is the same as their gitlab id
name String?
......
......@@ -12,5 +12,5 @@ class 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';
import { StatusCodes } from 'http-status-codes';
import ExerciseManager from '../managers/ExerciseManager';
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>
......@@ -51,7 +52,7 @@ class ParamsCallbackManager {
} ], 'tags');
this.listenParam('tagProposalName', backend, (TagManager.get as GetFunction).bind(TagManager), [ {
this.listenParam('tagProposalName', backend, (TagSubmitManager.get as GetFunction).bind(TagSubmitManager), [ {
} ], 'tags');
}
......
import { Express } from 'express-serve-static-core';
import express from 'express';
import { TagType } from '@prisma/client';
import * as ExpressValidator from 'express-validator';
import { StatusCodes } from 'http-status-codes';
import RoutesManager from '../express/RoutesManager';
import ParamsValidatorMiddleware from '../middlewares/ParamsValidatorMiddleware';
import SecurityMiddleware from '../middlewares/SecurityMiddleware';
import SecurityCheckType from '../types/SecurityCheckType';
import { Express } from 'express-serve-static-core';
import db from '../helpers/DatabaseHelper';
import { Tags } from '../types/DatabaseTypes';
import { TagType } from '@prisma/client';
import SecurityCheckType from '../types/SecurityCheckType';
import SecurityMiddleware from '../middlewares/SecurityMiddleware';
import ParamsValidatorMiddleware from '../middlewares/ParamsValidatorMiddleware';
enum SubmitStatus{
......@@ -36,12 +35,19 @@ class TagRoutes implements RoutesManager {
},
};
private readonly tagsValidatorName: ExpressValidator.Schema = {
tagProposalName: {
trim: true,
notEmpty: true
},
};
registerOnBackend(backend: Express) {
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.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.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) {
......@@ -74,17 +80,14 @@ class TagRoutes implements RoutesManager {
return req.session.sendResponse(res, StatusCodes.OK, "Tag supprimé avec succès");
}
private async getSubmittedTag(req: express.Request, res: express.Response) {
const state = req.params.name
const state = req.params.state
db.submissionTag.findMany({
where : {
state: state
}
})
return req.session.sendResponse(res, StatusCodes.OK, {
name : req.body.name,
tag : req.body.type
});
return req.session.sendResponse(res, StatusCodes.OK);
}
private async SubmitTag(req: express.Request, res: express.Response) {
const tagName = req.body.name
......@@ -107,10 +110,13 @@ class TagRoutes implements RoutesManager {
});
}
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");
} else if (req.body.state == SubmitStatus.Declined){
return req.session.sendResponse(res, StatusCodes.OK, req.body.details);
} else if (state == SubmitStatus.Declined){
const detail = req.body.details
return req.session.sendResponse(res, StatusCodes.OK, detail);
} else{
const tagName = req.params.tagProposalName
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