From db727fe702f8e97b967c9a76e768f01aa172448b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20L=C3=A1szl=C3=B3?= <rlacko99@gmail.com> Date: Wed, 23 Dec 2020 17:39:22 +0100 Subject: [PATCH] updated API routes and added notification strings --- src/index.ts | 21 ++--- src/middlewares/auth/complete.ts | 4 +- src/middlewares/example.ts | 7 ++ src/routes/auth.ts | 8 +- src/routes/card.ts | 30 ------- src/routes/file.ts | 67 ---------------- src/routes/files.ts | 43 ++++++++++ src/routes/news.ts | 32 ++++---- src/routes/notifications.ts | 21 +++++ src/routes/terms.ts | 29 +++++++ src/routes/user.ts | 93 ++++++---------------- src/routes/warning.ts | 61 -------------- src/routes/warnings.ts | 17 ++++ src/utils/strings/.gitignore | 1 + src/utils/strings/notifications.example.ts | 6 ++ 15 files changed, 180 insertions(+), 260 deletions(-) create mode 100644 src/middlewares/example.ts delete mode 100644 src/routes/card.ts delete mode 100644 src/routes/file.ts create mode 100644 src/routes/files.ts create mode 100644 src/routes/notifications.ts create mode 100644 src/routes/terms.ts delete mode 100644 src/routes/warning.ts create mode 100644 src/routes/warnings.ts create mode 100644 src/utils/strings/.gitignore create mode 100644 src/utils/strings/notifications.example.ts diff --git a/src/index.ts b/src/index.ts index 0181a400..d5d79dbe 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,14 +5,15 @@ import express, { Application, NextFunction, Request, Response } from "express"; import authRoute from "./routes/auth"; import bodyParser from "body-parser"; -import cardRoute from "./routes/card"; import expressSession from "express-session"; -import fileRoute from "./routes/file"; +import filesRoute from "./routes/files"; import mongoose from "mongoose"; import morgan from "morgan"; import newsRoute from "./routes/news"; +import notificationsRoute from "./routes/notifications"; +import termsRoute from "./routes/terms"; import usersRoute from "./routes/user"; -import warningsRoute from "./routes/warning"; +import warningsRoute from "./routes/warnings"; mongoose .connect("mongodb://localhost:27017/bodysch", { @@ -61,18 +62,20 @@ app.use((req: Request, res: Response, next: NextFunction) => { }); // Register routes +const prefix = "/api/v1"; +authRoute(prefix, app); -authRoute(app); +filesRoute(`${prefix}/files`, app); -newsRoute(app); +newsRoute(`${prefix}/news`, app); -usersRoute(app); +notificationsRoute(`${prefix}/notifications`, app); -fileRoute(app); +termsRoute(`${prefix}/terms`, app); -cardRoute(app); +usersRoute(`${prefix}/users`, app); -warningsRoute(app); +warningsRoute(`${prefix}/warnings`, app); app.use((err: any, req: Request, res: Response, next: NextFunction) => { if (err instanceof ErrorHandler) return handleError(err, res); diff --git a/src/middlewares/auth/complete.ts b/src/middlewares/auth/complete.ts index d53beb27..9be22e04 100644 --- a/src/middlewares/auth/complete.ts +++ b/src/middlewares/auth/complete.ts @@ -31,14 +31,14 @@ const complete = () => async ( ); req.session!.user = { - external_id: String(response.data.internal_id), + externalId: String(response.data.internal_id), email: String(response.data.mail), name: `${response.data.sn} ${response.data.givenName}`, token, }; const profile = await Profile.findOne({ - external_id: response.data.internal_id, + externalId: response.data.internal_id, }).lean(); if (profile) req.session!.user.id = profile._id; diff --git a/src/middlewares/example.ts b/src/middlewares/example.ts new file mode 100644 index 00000000..0b4aabb1 --- /dev/null +++ b/src/middlewares/example.ts @@ -0,0 +1,7 @@ +import { NextFunction, Request, Response, response } from "express"; + +const example = () => (req: Request, res: Response) => { + res.status(200).json({ message: "Example" }); +}; + +export default example; diff --git a/src/routes/auth.ts b/src/routes/auth.ts index 1202f644..8cfc0593 100644 --- a/src/routes/auth.ts +++ b/src/routes/auth.ts @@ -5,12 +5,12 @@ import isLoggedIn from "../middlewares/auth/isLoggedIn"; import login from "../middlewares/auth/login"; import logout from "../middlewares/auth/logout"; -const authRoute = (app: Application): void => { - app.get("/api/v1/login", login()); +const authRoute = (prefix: string, app: Application): void => { + app.get(`${prefix}/login`, login()); - app.get("/api/v1/complete", complete()); + app.get(`${prefix}/complete`, complete()); - app.get("/api/v1/logout", isLoggedIn(), logout()); + app.get(`${prefix}/logout`, isLoggedIn(), logout()); }; export default authRoute; diff --git a/src/routes/card.ts b/src/routes/card.ts deleted file mode 100644 index 5532d735..00000000 --- a/src/routes/card.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Application } from "express"; -import addCard from "../middlewares/cards/addCard"; -import getCard from "../middlewares/cards/getCard"; -import getCardList from "../middlewares/cards/getCardList"; -import getCardListValid from "../middlewares/cards/getCardListValid"; -import isAuthenticated from "../middlewares/auth/isAuthenticated"; -import responseCard from "../middlewares/cards/responseCard"; -import responseCardList from "../middlewares/cards/responseCardList"; - -const cardRoute = (app: Application): void => { - app.get("/api/v1/card/:id", isAuthenticated(), getCard(), responseCard()); - - app.get( - "/api/v1/cards", - isAuthenticated(), - getCardList(), - responseCardList() - ); - - app.get( - "/api/v1/cards/valid", - isAuthenticated(), - getCardListValid(), - responseCardList() - ); - - app.post("/api/v1/cards", isAuthenticated(), addCard(), responseCard()); -}; - -export default cardRoute; diff --git a/src/routes/file.ts b/src/routes/file.ts deleted file mode 100644 index 720de10b..00000000 --- a/src/routes/file.ts +++ /dev/null @@ -1,67 +0,0 @@ -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 getProfilePicture from "../middlewares/files/profile/getProfilePicture"; -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"; - -const profilePictureUpload = multer({ - storage: profilePictureStorage, - fileFilter, -}); - -const CardImageUpload = multer({ - storage: cardImageStorage, - fileFilter, -}); - -const fileRoute = (app: Application): void => { - app.post( - "/api/v1/files/profile/picture/me", - isAuthenticated(), - profilePictureUpload.single("profile_picture"), - handleFileValidationError(), - setOwnUserId(), - getUser(), - uploadProfilePicture() - ); - app.post( - "/api/v1/files/profile/picture/:id", - isAuthenticated(), - profilePictureUpload.single("profile_picture"), - handleFileValidationError(), - getUser(), - uploadProfilePicture() - ); - app.get( - "/api/v1/files/profile", - isAuthenticated(), - setOwnUserId(), - getUser(), - getProfilePicture() - ); - - app.post( - "/api/v1/files/card", - isAuthenticated(), - CardImageUpload.single("card_image"), - handleFileValidationError(), - uploadCardImage() - ); - app.get( - "/api/v1/files/card", - isAuthenticated(), - getCardImage(), - responseCardImage() - ); -}; - -export default fileRoute; diff --git a/src/routes/files.ts b/src/routes/files.ts new file mode 100644 index 00000000..5b769a2e --- /dev/null +++ b/src/routes/files.ts @@ -0,0 +1,43 @@ +import { Application } from "express"; +import cardImageStorage from "../middlewares/files/card/cardImageStorage"; +import example from "../middlewares/example"; +import { fileFilter } from "../middlewares/files/fileFilter"; +import multer from "multer"; +import profilePictureStorage from "../middlewares/files/profile/profilePictureStorage"; + +const profilePictureUpload = multer({ + storage: profilePictureStorage, + fileFilter, +}); + +const CardImageUpload = multer({ + storage: cardImageStorage, + fileFilter, +}); + +const filesRoute = (prefix: string, app: Application): void => { + // Get a users profile picture + app.get(`${prefix}/user/:userId/picture`, example()); + // Get a users accepted picture + app.get(`${prefix}/user/:userId/picture/accepted`, example()); + // Get own picture + app.get(`${prefix}/me/picture`, example()); + // Get own accepted picture + app.get(`${prefix}/me/picture/accepted`, example()); + // Get a users card in a Term + app.get(`${prefix}/user/:userId/card/term/:termId`, example()); + // Get own card in a Term + app.get(`${prefix}/me/card/term/:termId`, example()); + // Add a profile picture to a user + app.post(`${prefix}/user/:userId/picture`, example()); + // Add own profile picture + app.post(`${prefix}/me/picture`, example()); + // Get a Term's card background image + app.get(`${prefix}/card/bg/term/:termId`, example()); + // Add a Term's card background image or update it + app.post(`${prefix}/card/bg/term/:termId`, example()); + // Pdf with all accepted cards in a term + app.get(`${prefix}/cards/term/:termId/accepted`, example()); +}; + +export default filesRoute; diff --git a/src/routes/news.ts b/src/routes/news.ts index a5030463..adf19929 100644 --- a/src/routes/news.ts +++ b/src/routes/news.ts @@ -1,22 +1,18 @@ import { Application, Response } from "express"; -import addNews from "../middlewares/news/addNews"; -import deleteNews from "../middlewares/news/deleteNews"; -import emptyResponse from "../middlewares/utils/emptyResponse"; -import getNews from "../middlewares/news/getNews"; -import getNewsList from "../middlewares/news/getNewsList"; -import responseNews from "../middlewares/news/responseNews"; -import responseNewsObject from "../middlewares/news/responseNewsObject"; -import updateNews from "../middlewares/news/updateNews"; +import example from "../middlewares/example"; -export default (app: Application): void => { - app.get("/api/v1/news", getNewsList(), responseNews()); - - app.post("/api/v1/news", addNews(), responseNewsObject()); - - app.get("/api/v1/news/:id", getNews(), responseNewsObject()); - - app.put("/api/v1/news/:id", getNews(), updateNews(), responseNewsObject()); - - app.delete("/api/v1/news/:id", deleteNews(), emptyResponse()); +const newsRoute = (prefix: string, app: Application): void => { + // Get all news + app.get(`${prefix}/`, example()); + // Add a new News + app.post(`${prefix}/`, example()); + // Get a News + app.get(`${prefix}/one/:newsId`, example()); + // Update a News + app.put(`${prefix}/one/:newsId`, example()); + // Delete a News + app.delete(`${prefix}/one/:newsId`, example()); }; + +export default newsRoute; diff --git a/src/routes/notifications.ts b/src/routes/notifications.ts new file mode 100644 index 00000000..e2db085a --- /dev/null +++ b/src/routes/notifications.ts @@ -0,0 +1,21 @@ +import { Application } from "express"; +import example from "../middlewares/example"; + +const notificationsRoute = (prefix: string, app: Application): void => { + // Get all Notifications + app.get(`${prefix}/`, example()); + // Get a Notification + app.get(`${prefix}/notification/:notificationId`, example()); + // Delete a Notification + app.delete(`${prefix}/notification/:notificationId`, example()); + // Get own notifications + app.get(`${prefix}/me`, example()); + // Notify all users + app.post(`${prefix}/notify/all`, example()); + // Notify a given user + app.post(`${prefix}/notify/user/:userId`, example()); + // Notify accepted term members + app.post(`${prefix}/notify/term/:termId/accepted`, example()); +}; + +export default notificationsRoute; diff --git a/src/routes/terms.ts b/src/routes/terms.ts new file mode 100644 index 00000000..980891c0 --- /dev/null +++ b/src/routes/terms.ts @@ -0,0 +1,29 @@ +import { Application } from "express"; +import example from "../middlewares/example"; + +const termsRoute = (prefix: string, app: Application): void => { + // Get all Terms + app.get(`${prefix}/`, example()); + // Get a Term + app.post(`${prefix}/term/:termId`, example()); + // Get members of a Term + app.get(`${prefix}/term/:termId/members`, example()); + // Get filtered members of a Term (accepted/rejected/applied) + app.get(`${prefix}/term/:termId/members/:stateFilter`, example()); + // Get own member state in a Term + app.get(`${prefix}/term/:termId/state/me`, example()); + // Get a user's state in a Term + app.get(`${prefix}/term/:termId/state/user/:userId`, example()); + // Get the latest Term + app.get(`${prefix}/latest`, example()); + // Apply own user to the latest Term + app.post(`${prefix}/apply/me/latest`, example()); + // Apply a user to the latest Term + app.post(`${prefix}/apply/user/:userId/latest`, example()); + // Apply a user to a given Term + app.post(`${prefix}/apply/user/:userId/term/:termId`, example()); + // Update a user's member data in a Term + app.put(`${prefix}/term/:termId/user/:userId`, example()); +}; + +export default termsRoute; diff --git a/src/routes/user.ts b/src/routes/user.ts index c24d0eab..35f9f338 100644 --- a/src/routes/user.ts +++ b/src/routes/user.ts @@ -1,73 +1,28 @@ import { Application } from "express"; -import addUser from "../middlewares/user/addUser"; -import addWarning from "../middlewares/warning/addWarning"; -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 getUser from "../middlewares/user/getUser"; -import getUserCard from "../middlewares/files/card/getUserCard"; -import getUsersList from "../middlewares/user/getUsersList"; -import getWarning from "../middlewares/warning/getWarning"; -import getWarningsList from "../middlewares/warning/getUserWarningsList"; -import isAuthenticated from "../middlewares/auth/isAuthenticated"; -import isLoggedIn from "../middlewares/auth/isLoggedIn"; -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"; - -const usersRoute = (app: Application): void => { - app.get( - "/api/v1/users", - isAuthenticated(), - getUsersList(), - responseUserList() - ); - - app.post("/api/v1/users", isLoggedIn(), addUser(), responseUser()); - - app.get( - "/api/v1/users/me", - isAuthenticated(), - setOwnUserId(), - getUser(), - responseUser() - ); - - app.get( - "/api/v1/users/me/card", - isAuthenticated(), - setOwnUserId(), - getUser(), - getCardImage(), - getUserCard() - ); - - app.get("/api/v1/users/:id", getUser(), responseUser()); - - app.get( - "/api/v1/users/:id/card", - isAuthenticated(), - getUser(), - getCardImage(), - getUserCard() - ); - - app.get("/api/v1/users/:id/warnings", getWarningsList()); - - app.get("/api/v1/users/:userId/warnings/:warningId", getWarning()); - - app.post("/api/v1/users/:id/warnings", addWarning()); - - app.put("/api/v1/users/:id", updateUser(), responseUser()); - - app.put("/api/v1/users/:userId/warnings/:warningId", updateWarning()); - - app.delete("/api/v1/users/:id", deleteUser(), emptyResponse()); - - app.delete("/api/v1/users/:userId/warnings/:warningId", deleteWarning()); +import example from "../middlewares/example"; + +const usersRoute = (prefix: string, app: Application): void => { + // Get all users + app.get(`${prefix}/`, example()); + // Register own user + app.post(`${prefix}/me`, example()); + // Get own user + app.get(`${prefix}/me`, example()); + // Get a user + app.get(`${prefix}/user/:userId`, example()); + // Get own warnings + app.get(`${prefix}/me/warnings`, example()); + // Get a user's warnings + app.get(`${prefix}/user/:userId/warnings`, example()); + // Update own user + app.put(`${prefix}/me`, example()); + // Update a user + app.put(`${prefix}/user/:userId`, example()); + // Delete a user + app.delete(`${prefix}/user/:userId`, example()); + // Accept/Reject a users picture + app.post(`${prefix}/user/:userId/picture/accept`, example()); + app.post(`${prefix}/user/:userId/picture/reject`, example()); }; export default usersRoute; diff --git a/src/routes/warning.ts b/src/routes/warning.ts deleted file mode 100644 index be2afb97..00000000 --- a/src/routes/warning.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Application } from "express"; -import addWarning from "../middlewares/warning/addWarning"; -import deleteWarning from "../middlewares/warning/deleteWarning"; -import emptyResponse from "../middlewares/utils/emptyResponse"; -import getUser from "../middlewares/user/getUser"; -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 => { - app.get( - "/api/v1/warnings/warning/:warningId", - isAuthenticated(), - getWarning(), - responseWarning() - ); - - app.get( - "/api/v1/warnings/me", - isAuthenticated(), - setOwnUserId(), - getUser(), - getUserWarningsList(), - responseWarningList() - ); - - app.get( - "/api/v1/warnings/user/:id", - isAuthenticated(), - getUser(), - getUserWarningsList(), - responseWarningList() - ); - - app.post( - "/api/v1/warnings/user/:id", - isAuthenticated(), - addWarning(), - responseWarning() - ); - - app.put( - "/api/v1/warnings/warning/:warningId", - isAuthenticated(), - updateWarning(), - responseWarning() - ); - - app.delete( - "/api/v1/warnings/warning/:warningId", - isAuthenticated(), - deleteWarning(), - emptyResponse() - ); -}; - -export default warningsRoute; diff --git a/src/routes/warnings.ts b/src/routes/warnings.ts new file mode 100644 index 00000000..5fb80367 --- /dev/null +++ b/src/routes/warnings.ts @@ -0,0 +1,17 @@ +import { Application } from "express"; +import example from "../middlewares/example"; + +const warningsRoute = (prefix: string, app: Application): void => { + // Get all warnings + app.get(`${prefix}/`, example()); + // Add a warning to a user + app.post(`${prefix}/user/:userId`, example()); + // Get a warning + app.get(`${prefix}/warning/:warningId`, example()); + // Update a warning + app.put(`${prefix}/warning/:warningId`, example()); + // Delete a warning + app.delete(`${prefix}/warning/:warningId`, example()); +}; + +export default warningsRoute; diff --git a/src/utils/strings/.gitignore b/src/utils/strings/.gitignore new file mode 100644 index 00000000..a64fc457 --- /dev/null +++ b/src/utils/strings/.gitignore @@ -0,0 +1 @@ +notifications.ts \ No newline at end of file diff --git a/src/utils/strings/notifications.example.ts b/src/utils/strings/notifications.example.ts new file mode 100644 index 00000000..df893c4f --- /dev/null +++ b/src/utils/strings/notifications.example.ts @@ -0,0 +1,6 @@ +export const REGISTER = "Please register"; +export const MISSING_PROFILE_PICTURE = "Add a profile picture"; +export const NEW_WARNING = "You got a new warning"; +export const DELETED_WARNING = "One of your warning was deleted"; +export const TERM_MEMBER_ACCEPTED = "You've been accepted to a Term"; +export const TERM_MEMBER_REJECTED = "You've been rejected to a Term"; -- GitLab