diff --git a/src/middlewares/files/createFile.ts b/src/middlewares/files/createFile.ts index 05aec9161b3d70b8e8a5fbd9cfb608b47c0f494d..a49017a1fdcd89e3bc783782ba60c76892fb8408 100644 --- a/src/middlewares/files/createFile.ts +++ b/src/middlewares/files/createFile.ts @@ -1,8 +1,7 @@ import { NextFunction, Request, Response } from "express"; - -import { ErrorHandler } from "../utils/ErrorHandler"; -import File from "../../models/FileSchema"; import fs from "fs"; +import File from "../../models/FileSchema"; +import { ErrorHandler } from "../utils/ErrorHandler"; const createFile = () => async ( req: Request, @@ -10,6 +9,8 @@ const createFile = () => async ( next: NextFunction ) => { try { + if (!req.file) throw new ErrorHandler(400, "File wasn't provided"); + const newFile = new File(); newFile.originalName = req.file.originalname; diff --git a/src/middlewares/files/imageFilter.ts b/src/middlewares/files/imageFilter.ts index c8e2f40629a9e5f0235d4acfa130bd5993591edb..6ac4fb0bed324b595ed60266ffee0f4e86425c88 100644 --- a/src/middlewares/files/imageFilter.ts +++ b/src/middlewares/files/imageFilter.ts @@ -1,5 +1,5 @@ -import { ErrorHandler } from "../utils/ErrorHandler"; import { FileFilterCallback } from "multer"; +import { ErrorHandler } from "../utils/ErrorHandler"; export function imageFilter( req: Express.Request, diff --git a/src/middlewares/term/getTerm.ts b/src/middlewares/term/getTerm.ts index 8d9af82a58d22f21cdd826cef63b9ddb03fe1866..1df2a15bf0c1f81e525722d63e018344cd0ef3e1 100644 --- a/src/middlewares/term/getTerm.ts +++ b/src/middlewares/term/getTerm.ts @@ -1,11 +1,10 @@ import { NextFunction, Request, Response } from "express"; - import Term from "../../models/TermSchema"; /** * termId -> term */ -const getTerm = (sendBgFile = false) => async ( +const getTerm = () => async ( req: Request, res: Response, next: NextFunction @@ -20,7 +19,7 @@ const getTerm = (sendBgFile = false) => async ( endDate: 1, deadline: 1, createDate: 1, - backgroundFile: sendBgFile ? 1 : 0, + backgroundFile: 1, members: { $elemMatch: { user: req.params.userId } }, } ) diff --git a/src/middlewares/term/isBeforeDeadline.ts b/src/middlewares/term/isBeforeDeadline.ts new file mode 100644 index 0000000000000000000000000000000000000000..a832b78ae2b66351b57a26afa8be52aa2810e25e --- /dev/null +++ b/src/middlewares/term/isBeforeDeadline.ts @@ -0,0 +1,18 @@ +import { NextFunction, Request, Response } from "express"; + +const isBeforeDeadline = () => async ( + req: Request, + res: Response, + next: NextFunction +) => { + try { + if (new Date() > res.data.term!.deadline!) + return res.status(400).json({ message: "You can no longer apply!" }); + + next(); + } catch (err) { + next(err); + } +}; + +export default isBeforeDeadline; diff --git a/src/models/TermSchema.ts b/src/models/TermSchema.ts index a71858c11aab39933ac98eb2ee9679d5547c33e0..dff717061b808084b09159c1acbb91ac543024f2 100644 --- a/src/models/TermSchema.ts +++ b/src/models/TermSchema.ts @@ -1,4 +1,4 @@ -import { Document, Schema, model } from "mongoose"; +import { Document, model, Schema } from "mongoose"; export enum MemberState { Accepted = "ACCEPTED", @@ -8,7 +8,7 @@ export enum MemberState { export enum CardState { Created = "CREATED", - Printed = "PRINTD", + Printed = "PRINTED", Given = "GIVEN", } diff --git a/src/routes/files.ts b/src/routes/files.ts index 92d6093f8bdc64ab089b3efe0e3a6e40cc64c614..29e25ddb67195ec46ab25b82b1f4acefdea6823f 100644 --- a/src/routes/files.ts +++ b/src/routes/files.ts @@ -1,21 +1,21 @@ import { Application } from "express"; +import multer from "multer"; +import isAdmin from "../middlewares/auth/isAdmin"; +import isRegistered from "../middlewares/auth/isRegistered"; import createFile from "../middlewares/files/createFile"; -import createdResponse from "../middlewares/utils/createdResponse"; -import getFieldValue from "../middlewares/utils/getFieldValue"; -import getTerm from "../middlewares/term/getTerm"; -import getTermWithQuery from "../middlewares/term/getTermWithQuery"; -import getUser from "../middlewares/user/getUser"; import { imageFilter } from "../middlewares/files/imageFilter"; import { imageStorage } from "../middlewares/files/imageStorage"; -import isAdmin from "../middlewares/auth/isAdmin"; -import isRegistered from "../middlewares/auth/isRegistered"; -import multer from "multer"; import sendFile from "../middlewares/files/sendFile"; import sendUserCard from "../middlewares/files/sendUserCard"; -import setOwnUserId from "../middlewares/user/setOwnUserId"; import updateProfilePicture from "../middlewares/files/updateProfilePicture"; import updateTermCardBg from "../middlewares/files/updateTermCardBg"; +import getTerm from "../middlewares/term/getTerm"; +import getTermWithQuery from "../middlewares/term/getTermWithQuery"; +import getUser from "../middlewares/user/getUser"; +import setOwnUserId from "../middlewares/user/setOwnUserId"; import userIsStaff from "../middlewares/user/userIsStaff"; +import createdResponse from "../middlewares/utils/createdResponse"; +import getFieldValue from "../middlewares/utils/getFieldValue"; const profilePictureUpload = multer({ storage: imageStorage("uploads/profile_pictures/"), @@ -28,6 +28,7 @@ const CardImageUpload = multer({ }); // TODO in Future: OwnTermCardPreview(termId) +// TODO delete file after update const filesRoute = (prefix: string, app: Application): void => { /** @@ -103,7 +104,6 @@ const filesRoute = (prefix: string, app: Application): void => { */ app.get( `${prefix}/staff/:userId/picture`, - isRegistered(), getUser("_id acceptedPicture isStaffMember staffMemberText"), userIsStaff(), getFieldValue("profile", "acceptedPicture"), @@ -119,7 +119,7 @@ const filesRoute = (prefix: string, app: Application): void => { isRegistered(), isAdmin(), getUser("_id acceptedPicture name roomNumber"), - getTerm(true), + getTerm(), sendUserCard() ); diff --git a/src/routes/terms.ts b/src/routes/terms.ts index 8a22bf5ae4430688d1c3f82179b2abcfd9361f84..14f4eef8262acb9f9a2c53cdeda21b9d0a9fa83a 100644 --- a/src/routes/terms.ts +++ b/src/routes/terms.ts @@ -1,25 +1,26 @@ import { Application } from "express"; +import isAdmin from "../middlewares/auth/isAdmin"; +import isRegistered from "../middlewares/auth/isRegistered"; +import deleteFile from "../middlewares/files/deleteFile"; import addMember from "../middlewares/term/addMember"; import addTerm from "../middlewares/term/addTerm"; -import createdEmptyResponse from "../middlewares/utils/createdEmptyResponse"; -import createdResponse from "../middlewares/utils/createdResponse"; -import deleteFile from "../middlewares/files/deleteFile"; import deleteTerm from "../middlewares/term/deleteTerm"; -import getFieldValue from "../middlewares/utils/getFieldValue"; import getTerm from "../middlewares/term/getTerm"; import getTermMembers from "../middlewares/term/getTermMembers"; import getTermsList from "../middlewares/term/getTermsList"; -import getUser from "../middlewares/user/getUser"; -import isAdmin from "../middlewares/auth/isAdmin"; +import isBeforeDeadline from "../middlewares/term/isBeforeDeadline"; import isNotMember from "../middlewares/term/isNotMember"; -import isRegistered from "../middlewares/auth/isRegistered"; -import noContentResponse from "../middlewares/utils/noContentResponse"; import responseMembersList from "../middlewares/term/responseMembersList"; import responseTerm from "../middlewares/term/responseTerm"; import responseTermsList from "../middlewares/term/responseTermsList"; -import setOwnUserId from "../middlewares/user/setOwnUserId"; import updateTerm from "../middlewares/term/updateTerm"; import updateTermMember from "../middlewares/term/updateTermMember"; +import getUser from "../middlewares/user/getUser"; +import setOwnUserId from "../middlewares/user/setOwnUserId"; +import createdEmptyResponse from "../middlewares/utils/createdEmptyResponse"; +import createdResponse from "../middlewares/utils/createdResponse"; +import getFieldValue from "../middlewares/utils/getFieldValue"; +import noContentResponse from "../middlewares/utils/noContentResponse"; const termsRoute = (prefix: string, app: Application): void => { /** @@ -56,6 +57,7 @@ const termsRoute = (prefix: string, app: Application): void => { setOwnUserId(), getUser("_id"), getTerm(), + isBeforeDeadline(), isNotMember(), addMember(), createdEmptyResponse() diff --git a/src/routes/users/user.ts b/src/routes/users/user.ts index b54277fd44de97a5f29e70b91c1e211697989eff..0bbdab1a29de8cb8cf480dd473f039aaece0e32e 100644 --- a/src/routes/users/user.ts +++ b/src/routes/users/user.ts @@ -154,7 +154,7 @@ const usersRoute = (prefix: string, app: Application): void => { ); /** - * Delete a User + * Delete a User TODO * Role: ADMIN */ app.delete(