diff --git a/src/middlewares/news/updateNews.ts b/src/middlewares/news/updateNews.ts index baa113bf8ba57c9124634ce61ce1785083481541..73f608152be1658fa7755f9501aee61551a25517 100644 --- a/src/middlewares/news/updateNews.ts +++ b/src/middlewares/news/updateNews.ts @@ -4,6 +4,9 @@ import { NextFunction, Request, Response } from "express"; // Valid fields to update const validFields = ["title", "text"]; +/** + * Update a News Object + */ const updateNews = () => async ( req: Request, res: Response, diff --git a/src/middlewares/user/getOwnUser.ts b/src/middlewares/user/setOwnUserId.ts similarity index 77% rename from src/middlewares/user/getOwnUser.ts rename to src/middlewares/user/setOwnUserId.ts index 2983521805c583e19cb84863626cce304d788ab9..160663fc53881f399acb1f85b42523665a539030 100644 --- a/src/middlewares/user/getOwnUser.ts +++ b/src/middlewares/user/setOwnUserId.ts @@ -8,8 +8,12 @@ import Warning from "../../models/WarningSchema"; * Middleware to set req.params.id to the current users id. * getUser() middleware should be called after this. */ -const getOwnUser = () => (req: Request, res: Response, next: NextFunction) => { +const setOwnUserId = () => ( + req: Request, + res: Response, + next: NextFunction +) => { req.params.id = req.session.user!.id!; next(); }; -export default getOwnUser; +export default setOwnUserId; diff --git a/src/middlewares/warning/addWarning.ts b/src/middlewares/warning/addWarning.ts index eb253b0aff0bdc6dc8cf2564362d08f190b85afb..200e14ff063fe4c07a111514aa9cb348e085239d 100644 --- a/src/middlewares/warning/addWarning.ts +++ b/src/middlewares/warning/addWarning.ts @@ -3,61 +3,49 @@ import { NextFunction, Request, Response } from "express"; import Profile from "../../models/ProfileSchema"; import { ValidationError } from "../utils/ValidationError"; import Warning from "../../models/WarningSchema"; +import { validateFields } from "../utils/validateFields"; import warningsRoute from "../../routes/warning"; +const fields = [{ name: "text", required: true }]; + const addWarning = () => async ( req: Request, res: Response, next: NextFunction ) => { - try { - const warningReceiver = await Profile.findById(req.params.userId).exec(); - if (!warningReceiver) return res.status(400).send("Profile not found"); - - const warning = new Warning(); - - // Check required fields - const fields = [{ name: "text", required: true }]; - fields.forEach((field) => { - const value = req.body[field.name]; - if (field.required && !value) { - res.status(400); - throw new ValidationError(400, `Field: {${field.name}} is required!`); - } - if (value) warning.set(field.name, value); - }); - - warning.receiver = warningReceiver.id; - warning.date = new Date(); - warning.given_by = { - _id: res.data.profile!.id, - name: res.data.profile!.name, - }; - - await warning.save((err) => { - if (err) { - return res.status(400); - } - }); - - warningReceiver.warningIds = [ - ...warningReceiver.warningIds, - String(warning.id), - ]; - await warningReceiver.save((err) => { - if (err) { - warning.remove(); - return res.status(400); - } - }); - res.data.warning = warning; - return next(); - } catch (error) { - if (error instanceof ValidationError) { - const { code, message } = error; - return res.status(code).send({ message }); + const warningReceiver = await Profile.findById(req.params.userId).exec(); + if (!warningReceiver) return res.status(400).send("Profile not found"); + + const warning = new Warning(); + + // Validate and set fields from request body + validateFields({ fields, reqBody: req.body }); + fields.forEach((field) => { + const value = req.body[field.name]; + if (value) warning.set(field.name, req.body[field.name]); + }); + + warning.receiver = warningReceiver.id!; + warning.date = new Date(); + warning.given_by = { + _id: req.session.user!.id!, + name: req.session.user!.name!, + }; + + await warning.save(); + + warningReceiver.warningIds = [ + ...warningReceiver.warningIds, + String(warning.id), + ]; + await warningReceiver.save(async (err) => { + if (err) { + await warning.remove(); + throw err; } - } + }); + res.data.warning = warning; + next(); }; export default addWarning; diff --git a/src/middlewares/warning/deleteWarning.ts b/src/middlewares/warning/deleteWarning.ts index 62c41ee1ccfd63c7a9d863de82759880436ea510..dbc566c4d10dcf1dd94fdc21a934a79d8f074c33 100644 --- a/src/middlewares/warning/deleteWarning.ts +++ b/src/middlewares/warning/deleteWarning.ts @@ -3,23 +3,18 @@ import { NextFunction, Request, Response } from "express"; import Profile from "../../models/ProfileSchema"; import Warning from "../../models/WarningSchema"; -const deleteWarning = () => ( +const deleteWarning = () => async ( req: Request, res: Response, next: NextFunction ) => { - Warning.findByIdAndDelete(req.params.warningId, async (error, result) => { - if (!error) { - await Profile.updateOne( - { _id: result?.receiver }, - { $pull: { warningIds: result?._id } } - ); - res.status(204); - res.json({}); - } else { - console.warn(error); - } - }); + const warning = await Warning.findByIdAndRemove(req.params.warningId); + + await Profile.updateOne( + { _id: warning?.receiver }, + { $pull: { warningIds: warning?._id } } + ); + res.status(204).send(); }; export default deleteWarning; diff --git a/src/middlewares/warning/getUserWarningsList.ts b/src/middlewares/warning/getUserWarningsList.ts index fa236f145c715403df01a748d5f7e4ad5a6179d3..06303340fe657e4b58079ccaf24b04d888e6d9a9 100644 --- a/src/middlewares/warning/getUserWarningsList.ts +++ b/src/middlewares/warning/getUserWarningsList.ts @@ -3,27 +3,19 @@ import { NextFunction, Request, Response } from "express"; import Profile from "../../models/ProfileSchema"; import Warning from "../../models/WarningSchema"; -const getUserWarningsList = () => ( +const getUserWarningsList = () => async ( req: Request, res: Response, next: NextFunction ) => { - Profile.findById(req.params.userId, async (error, profile) => { - if (error) { - console.warn(error); - res.status(400); - } else { - res.status(200); + if (!res.data.profile) + return res.status(404).json({ message: "User not found" }); - if (!profile) return res.status(404).send("User not found"); - - const warnings = await Warning.find({ - _id: { $in: profile?.warningIds }, - }).exec(); - res.data.warnings = warnings; - } - next(); + res.data.warnings = await Warning.find({ + _id: { $in: res.data.profile?.warningIds }, }); + + next(); }; export default getUserWarningsList; diff --git a/src/middlewares/warning/getWarning.ts b/src/middlewares/warning/getWarning.ts index 92383e00d87a98fa9ca72084b89981dfba967d11..a529ad705c2270a20b27f56b61514fa858e472c9 100644 --- a/src/middlewares/warning/getWarning.ts +++ b/src/middlewares/warning/getWarning.ts @@ -2,17 +2,13 @@ import { NextFunction, Request, Response } from "express"; import Warning from "../../models/WarningSchema"; -const getWarning = () => (req: Request, res: Response, next: NextFunction) => { - Warning.findById(req.params.warningId, (error, warning) => { - if (error) { - console.warn(error); - res.status(400); - } else { - res.status(200); - res.data.warning = warning; - } - next(); - }); +const getWarning = () => async ( + req: Request, + res: Response, + next: NextFunction +) => { + res.data.warning = await Warning.findById(req.params.warningId).lean().exec(); + next(); }; export default getWarning; diff --git a/src/middlewares/warning/responseWarning.ts b/src/middlewares/warning/responseWarning.ts index c66ffb3724b02467608666aa5f5fa5f83ef15112..e4bbb7c0343081e4e4323188705a2a997df889b7 100644 --- a/src/middlewares/warning/responseWarning.ts +++ b/src/middlewares/warning/responseWarning.ts @@ -2,10 +2,9 @@ import { NextFunction, Request, Response, response } from "express"; const responseWarning = () => (req: Request, res: Response) => { if (!res.data.warning) { - res.status(404).json({ message: "Warning not found!" }); - } else { - res.json(res.data.warning); + return res.status(404).json({ message: "Warning not found!" }); } + res.json(res.data.warning); }; export default responseWarning; diff --git a/src/middlewares/warning/responseWarningList.ts b/src/middlewares/warning/responseWarningList.ts index 8323a6f8e783437c2bc6deba571ae074ab0e7db0..432a60a5577704941c63ac23436ca8c6f3e13b85 100644 --- a/src/middlewares/warning/responseWarningList.ts +++ b/src/middlewares/warning/responseWarningList.ts @@ -1,7 +1,7 @@ import { NextFunction, Request, Response, response } from "express"; const responseWarningList = () => (req: Request, res: Response) => { - res.json(res.data.warnings); + return res.json(res.data.warnings); }; export default responseWarningList; diff --git a/src/middlewares/warning/updateWarning.ts b/src/middlewares/warning/updateWarning.ts index 89aca96b05ffe5bff9cc3a66d4b6a29b354bf81e..722f4c4550fab32a94717abd23477d76514b05a9 100644 --- a/src/middlewares/warning/updateWarning.ts +++ b/src/middlewares/warning/updateWarning.ts @@ -5,32 +5,23 @@ import Warning from "../../models/WarningSchema"; // Valid fields to update const validFields = ["text"]; -const updateWarning = () => ( +const updateWarning = () => async ( req: Request, res: Response, next: NextFunction ) => { - Warning.findOne({ _id: req.params.warningId }, async (error, warning) => { - if (error) { - res.status(400); - } else { - if (!!warning) { - validFields.forEach((field) => { - const value = req.body[field]; - if (value) warning.set(field, value); - }); - await warning.save((error, warning) => { - if (!!error) { - console.error(error); - return res.status(500).send("Couldn't update the warning"); - } - }); - res.status(200); - res.data.warning = warning; - } - } - next(); - }); + const warning = await Warning.findById(req.params.warnmingId).exec(); + + if (warning) { + validFields.forEach((field) => { + const value = req.body[field]; + if (value) warning.set(field, value); + }); + await warning.save(); + } + res.data.warning = warning; + + next(); }; export default updateWarning; diff --git a/src/routes/auth.ts b/src/routes/auth.ts index 532eb47a0d7bc72f2e6143957d4fc08599bea3b8..1202f644070fe274bffa1637f1ce052217406781 100644 --- a/src/routes/auth.ts +++ b/src/routes/auth.ts @@ -1,6 +1,7 @@ import { Application } from "express"; import complete from "../middlewares/auth/complete"; import isAuthenticated from "../middlewares/auth/isAuthenticated"; +import isLoggedIn from "../middlewares/auth/isLoggedIn"; import login from "../middlewares/auth/login"; import logout from "../middlewares/auth/logout"; @@ -9,7 +10,7 @@ const authRoute = (app: Application): void => { app.get("/api/v1/complete", complete()); - app.get("/api/v1/logout", isAuthenticated(), logout()); + app.get("/api/v1/logout", isLoggedIn(), logout()); }; export default authRoute; diff --git a/src/routes/file.ts b/src/routes/file.ts index 1b851463e0c70089d322e00b86a65e026fd5470b..7546ec6af282a0553d61f41af04eba529a823de6 100644 --- a/src/routes/file.ts +++ b/src/routes/file.ts @@ -2,14 +2,14 @@ import { Application } from "express"; import cardImageStorage from "../middlewares/files/card/cardImageStorage"; import { fileFilter } from "../middlewares/files/fileFilter"; import getCardImage from "../middlewares/files/card/getCardImage"; -import getOwnUser from "src/middlewares/user/getOwnUser"; import getProfilePicture from "../middlewares/files/profile/getProfilePicture"; -import getUser from "src/middlewares/user/getUser"; +import getUser from "../middlewares/user/getUser"; import handleFileValidationError from "../middlewares/files/handleFileValidationError"; import isAuthenticated from "../middlewares/auth/isAuthenticated"; import multer from "multer"; import profilePictureStorage from "../middlewares/files/profile/profilePictureStorage"; import responseCardImage from "../middlewares/files/card/responseCardImage"; +import setOwnUserId from "../middlewares/user/setOwnUserId"; import uploadCardImage from "../middlewares/files/card/uploadCardImage"; import uploadProfilePicture from "../middlewares/files/profile/uploadProfilePicture"; @@ -34,7 +34,7 @@ const fileRoute = (app: Application): void => { app.get( "/api/v1/files/profile", isAuthenticated(), - getOwnUser(), + setOwnUserId(), getUser(), getProfilePicture() ); diff --git a/src/routes/user.ts b/src/routes/user.ts index c78a861dad85dd8c7e567295e83815e9bb361e0c..fe249ad3757c544caea598832a7838d477811910 100644 --- a/src/routes/user.ts +++ b/src/routes/user.ts @@ -5,7 +5,6 @@ import deleteUser from "../middlewares/user/deleteUser"; import deleteWarning from "../middlewares/warning/deleteWarning"; import emptyResponse from "../middlewares/utils/emptyResponse"; import getCardImage from "../middlewares/files/card/getCardImage"; -import getOwnUser from "../middlewares/user/getOwnUser"; import getUser from "../middlewares/user/getUser"; import getUserCard from "../middlewares/files/card/getUserCard"; import getUsersList from "../middlewares/user/getUsersList"; @@ -14,6 +13,7 @@ import getWarningsList from "../middlewares/warning/getUserWarningsList"; import isAuthenticated from "../middlewares/auth/isAuthenticated"; import responseUser from "../middlewares/user/responseUser"; import responseUserList from "../middlewares/user/responseUserList"; +import setOwnUserId from "../middlewares/user/setOwnUserId"; import updateUser from "../middlewares/user/updateUser"; import updateWarning from "../middlewares/warning/updateWarning"; @@ -27,12 +27,17 @@ const usersRoute = (app: Application): void => { app.post("/api/v1/users", addUser(), responseUser()); - app.get("/api/v1/users/me", isAuthenticated(), getOwnUser(), responseUser()); + app.get( + "/api/v1/users/me", + isAuthenticated(), + setOwnUserId(), + responseUser() + ); app.get( "/api/v1/users/me/card", isAuthenticated(), - getOwnUser(), + setOwnUserId(), getCardImage(), getUserCard() ); diff --git a/src/routes/warning.ts b/src/routes/warning.ts index 67f6d46f4542608fd8e80b3396bd614fb5b45228..389f2131d1cd88b59baa10f5cb097d92082f51f4 100644 --- a/src/routes/warning.ts +++ b/src/routes/warning.ts @@ -1,12 +1,12 @@ import { Application } from "express"; import addWarning from "../middlewares/warning/addWarning"; import deleteWarning from "../middlewares/warning/deleteWarning"; -import getOwnUser from "../middlewares/user/getOwnUser"; import getUserWarningsList from "../middlewares/warning/getUserWarningsList"; import getWarning from "../middlewares/warning/getWarning"; import isAuthenticated from "../middlewares/auth/isAuthenticated"; import responseWarning from "../middlewares/warning/responseWarning"; import responseWarningList from "../middlewares/warning/responseWarningList"; +import setOwnUserId from "../middlewares/user/setOwnUserId"; import updateWarning from "../middlewares/warning/updateWarning"; const warningsRoute = (app: Application): void => { @@ -27,7 +27,7 @@ const warningsRoute = (app: Application): void => { app.post( "/api/v1/warnings/user/:userId", isAuthenticated(), - getOwnUser(), + setOwnUserId(), addWarning(), responseWarning() );