diff --git a/ExpressAPI/prisma/migrations/20240321212753_add_correction_to_assignment/migration.sql b/ExpressAPI/prisma/migrations/20240321212753_add_correction_to_assignment/migration.sql new file mode 100644 index 0000000000000000000000000000000000000000..0ded83188955e133b20f23b0030964055ce3cdb0 --- /dev/null +++ b/ExpressAPI/prisma/migrations/20240321212753_add_correction_to_assignment/migration.sql @@ -0,0 +1,8 @@ +/* + 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; diff --git a/ExpressAPI/prisma/migrations/20240321213742_add_correction_to_assignment/migration.sql b/ExpressAPI/prisma/migrations/20240321213742_add_correction_to_assignment/migration.sql new file mode 100644 index 0000000000000000000000000000000000000000..af5102c8ba20cc6051c01d3ca06b2e7f8d7e14d9 --- /dev/null +++ b/ExpressAPI/prisma/migrations/20240321213742_add_correction_to_assignment/migration.sql @@ -0,0 +1 @@ +-- This is an empty migration. \ No newline at end of file diff --git a/ExpressAPI/prisma/migrations/20240321214043_add_correction_to_assignment/migration.sql b/ExpressAPI/prisma/migrations/20240321214043_add_correction_to_assignment/migration.sql new file mode 100644 index 0000000000000000000000000000000000000000..ece1aead8605a0456ed1ad59f96076e7c4231fd4 --- /dev/null +++ b/ExpressAPI/prisma/migrations/20240321214043_add_correction_to_assignment/migration.sql @@ -0,0 +1,8 @@ +/* + 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; diff --git a/ExpressAPI/prisma/schema.prisma b/ExpressAPI/prisma/schema.prisma index 16f531a7667104d90073d6f270be2acbd96bbe81..9aac09a10024dc8edc3f36cdca7d7dceccb0bf87 100644 --- a/ExpressAPI/prisma/schema.prisma +++ b/ExpressAPI/prisma/schema.prisma @@ -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? diff --git a/ExpressAPI/src/managers/TagManager.ts b/ExpressAPI/src/managers/TagManager.ts index 19ac12c6d6b2d1fddf2adedcda67b51801dab4ef..936b3bcb04d3aea3c205215d6d283337ae62f0b9 100644 --- a/ExpressAPI/src/managers/TagManager.ts +++ b/ExpressAPI/src/managers/TagManager.ts @@ -12,5 +12,5 @@ class TagManager { } } - export default new TagManager(); + diff --git a/ExpressAPI/src/managers/TagSubmitManager.ts b/ExpressAPI/src/managers/TagSubmitManager.ts new file mode 100644 index 0000000000000000000000000000000000000000..d942eebbc71080c225fa9c98d7da22b47d42febd --- /dev/null +++ b/ExpressAPI/src/managers/TagSubmitManager.ts @@ -0,0 +1,16 @@ +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(); + diff --git a/ExpressAPI/src/middlewares/ParamsCallbackManager.ts b/ExpressAPI/src/middlewares/ParamsCallbackManager.ts index 753c1548c6f003dda4f5cf5c484b6483fe8795ce..2ff49332b5e3686dd76f14d6b1af8b328da8526f 100644 --- a/ExpressAPI/src/middlewares/ParamsCallbackManager.ts +++ b/ExpressAPI/src/middlewares/ParamsCallbackManager.ts @@ -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'); } diff --git a/ExpressAPI/src/routes/TagsRoutes.ts b/ExpressAPI/src/routes/TagsRoutes.ts index 5d0e97de0e935715a7b35d3baba77aa45dcf5b71..bcf1a77cc3ee868a4161fe646f80fafa0b24e18b 100644 --- a/ExpressAPI/src/routes/TagsRoutes.ts +++ b/ExpressAPI/src/routes/TagsRoutes.ts @@ -1,14 +1,13 @@ -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