diff --git a/src/middlewares/news/addNews.ts b/src/middlewares/news/addNews.ts index b0d9f0c988f1b09d7dc6c16efea5711c0f38594b..f41e11ddcc6200168c1024fb4c27cc0f18d9a257 100644 --- a/src/middlewares/news/addNews.ts +++ b/src/middlewares/news/addNews.ts @@ -1,21 +1,14 @@ +import News, { INews } from "../../models/NewsSchema"; import { NextFunction, Request, Response } from "express"; -import News from "../../models/NewsSchema"; import { validateFields } from "../utils/validateFields"; -const fields = [ - { name: "title", required: true }, - { name: "text", required: true }, -]; - /** * Create a New Article */ -const addNews = () => async ( - req: Request, - res: Response, - next: NextFunction -) => { +const addNews = ( + fields: { name: Partial<keyof INews>; required: boolean }[] +) => async (req: Request, res: Response, next: NextFunction) => { try { const news = new News(); diff --git a/src/middlewares/news/deleteNews.ts b/src/middlewares/news/deleteNews.ts index e101b29c26f3e73961d3cb330909f90da7619f12..cfc9694392ac90d64dcf46e09954927c123aff0e 100644 --- a/src/middlewares/news/deleteNews.ts +++ b/src/middlewares/news/deleteNews.ts @@ -9,7 +9,10 @@ const deleteNews = () => async ( next: NextFunction ) => { try { - const news = await News.findByIdAndRemove(req.params.newsId).lean().exec(); + const news = await News.findByIdAndRemove(req.params.newsId) + .select("_id") + .lean() + .exec(); next(); } catch (err) { next(err); diff --git a/src/middlewares/news/getNewsList.ts b/src/middlewares/news/getNewsList.ts index 58ff01aea8b7f0f445a45306bca75f5223f5c72d..9e1f1f88fc8a89df4cc440dea389e4231263df5f 100644 --- a/src/middlewares/news/getNewsList.ts +++ b/src/middlewares/news/getNewsList.ts @@ -5,13 +5,13 @@ import News from "../../models/NewsSchema"; /** * Get all news and set res.data.news */ -const getNewsList = () => async ( +const getNewsList = (selectQuery: string) => async ( req: Request, res: Response, next: NextFunction ) => { try { - res.data.news = await News.find().lean().exec(); + res.data.news = await News.find().select(selectQuery).lean().exec(); next(); } catch (err) { next(err); diff --git a/src/middlewares/news/getOneNews.ts b/src/middlewares/news/getOneNews.ts index c2c610fd18d75e1e9f2bdba9a1dca6597e86d740..7de7cbfc82825ca9f39c07b443a0009ba73f509c 100644 --- a/src/middlewares/news/getOneNews.ts +++ b/src/middlewares/news/getOneNews.ts @@ -6,13 +6,17 @@ import News from "../../models/NewsSchema"; * Get one News with id = req.params.id * and set res.data.newsObject */ -const getOneNews = () => async ( +const getOneNews = (selectQuery: string) => async ( req: Request, res: Response, next: NextFunction ) => { try { - res.data.oneNews = await News.findById(req.params.newsId).lean().exec(); + res.data.oneNews = await News.findById(req.params.newsId) + .select(selectQuery) + .lean() + .exec(); + if (!res.data.oneNews) return res.status(404).json({ message: "News not found!" }); diff --git a/src/middlewares/news/updateNews.ts b/src/middlewares/news/updateNews.ts index b1137de14b84b7b054b5c7e76076050611a9e6cc..156491e87c7deeea0ff9b364f9ee18e3bf3343f8 100644 --- a/src/middlewares/news/updateNews.ts +++ b/src/middlewares/news/updateNews.ts @@ -1,24 +1,21 @@ import News, { INews } from "../../models/NewsSchema"; import { NextFunction, Request, Response } from "express"; -// Valid fields to update -const validFields: Partial<keyof INews>[] = ["title", "text"]; - /** * Update a News Object */ -const updateNews = () => async ( +const updateNews = (fields: Partial<keyof INews>[]) => async ( req: Request, res: Response, next: NextFunction ) => { try { let newFields: Partial<INews> = {}; - validFields.forEach((field) => { + fields.forEach((field) => { const value = req.body[field]; if (value) newFields[field] = value; }); - newFields["updatedBy"] = req.session.user?.id; + newFields["updatedBy"] = req.session.user!.id; await News.updateOne( { _id: req.params.newsId }, diff --git a/src/middlewares/term/deleteTerm.ts b/src/middlewares/term/deleteTerm.ts index cf5c325a241130aec67667a8ad88b06fa8b5d8fa..74c8b5293edaa5a16b658a9a961c299199d3e40f 100644 --- a/src/middlewares/term/deleteTerm.ts +++ b/src/middlewares/term/deleteTerm.ts @@ -13,7 +13,10 @@ const deleteTerm = () => async ( next: NextFunction ) => { try { - const removedTerm = await Term.findByIdAndDelete(req.params.termId); + const removedTerm = await Term.findByIdAndDelete(req.params.termId) + .select("_id backgroundFile") + .lean() + .exec(); if (!removedTerm) return res.status(404).json({ message: "Term not found!" }); await File.findByIdAndDelete(removedTerm?.backgroundFile); diff --git a/src/middlewares/term/getLatestTerm.ts b/src/middlewares/term/getLatestTerm.ts deleted file mode 100644 index 9cd890ed6b622752a092962338ed975c2da08561..0000000000000000000000000000000000000000 --- a/src/middlewares/term/getLatestTerm.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NextFunction, Request, Response } from "express"; - -import Profile from "../../models/ProfileSchema"; -import Term from "../../models/TermSchema"; - -const getLatestTerm = () => async ( - req: Request, - res: Response, - next: NextFunction -) => { - try { - res.data.term = await Term.findOne({}, {}, { sort: { createDate: -1 } }) - .lean() - .exec(); - if (!res.data.term) - return res.status(404).json({ message: "There are no Terms" }); - - next(); - } catch (err) { - next(err); - } -}; - -export default getLatestTerm; diff --git a/src/middlewares/term/getMember.ts b/src/middlewares/term/getMember.ts deleted file mode 100644 index 45c9882b2b138d513be3df022d681e8ccbbe4dd4..0000000000000000000000000000000000000000 --- a/src/middlewares/term/getMember.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NextFunction, Request, Response } from "express"; - -import File from "../../models/FileSchema"; -import Profile from "../../models/ProfileSchema"; -import Term from "../../models/TermSchema"; - -/** - * userId -> Found Term - */ -const getMember = () => async ( - req: Request, - res: Response, - next: NextFunction -) => { - try { - res.data.member = res.data.term?.members?.find( - (member) => member.user == req.params.userId - ); - if (!res.data.member) - return res.status(404).json({ message: "Member not found!" }); - next(); - } catch (err) { - next(err); - } -}; - -export default getMember; diff --git a/src/middlewares/term/getMemberState.ts b/src/middlewares/term/getMemberState.ts deleted file mode 100644 index 2f2f512eef74883f2ab40ea1c63243466d2ffb08..0000000000000000000000000000000000000000 --- a/src/middlewares/term/getMemberState.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NextFunction, Request, Response } from "express"; - -import File from "../../models/FileSchema"; -import Profile from "../../models/ProfileSchema"; -import Term from "../../models/TermSchema"; - -/** - * member -> memberState - */ -const getMemberState = () => async ( - req: Request, - res: Response, - next: NextFunction -) => { - try { - res.data.memberState = res.data.member!.memberState; - next(); - } catch (err) { - next(err); - } -}; - -export default getMemberState; diff --git a/src/middlewares/term/getMembers.ts b/src/middlewares/term/getMembers.ts deleted file mode 100644 index 23f5a9ce0f9bfb40a342ec59611c705d9c570d12..0000000000000000000000000000000000000000 --- a/src/middlewares/term/getMembers.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NextFunction, Request, Response } from "express"; - -import File from "../../models/FileSchema"; -import Profile from "../../models/ProfileSchema"; -import Term from "../../models/TermSchema"; - -/** - * res.data.term.members -> res.data.members - */ -const getMembers = () => async ( - req: Request, - res: Response, - next: NextFunction -) => { - try { - res.data.members = res.data.term?.members; - next(); - } catch (err) { - next(err); - } -}; - -export default getMembers; diff --git a/src/middlewares/term/responseMember.ts b/src/middlewares/term/responseMember.ts deleted file mode 100644 index e1348185409f5e8dfd411eeee2722d523f8c039d..0000000000000000000000000000000000000000 --- a/src/middlewares/term/responseMember.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NextFunction, Request, Response, response } from "express"; - -/** - * Return the found Member - */ -const responseMember = () => (req: Request, res: Response) => { - if (!res.data.member) { - res.status(404).json({ message: "Member not found!" }); - } else { - return res.json(res.data.member); - } -}; - -export default responseMember; diff --git a/src/middlewares/term/responseMemberState.ts b/src/middlewares/term/responseMemberState.ts deleted file mode 100644 index 295d9111a06b760e8f08e4cf6c2a873901f0ada9..0000000000000000000000000000000000000000 --- a/src/middlewares/term/responseMemberState.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NextFunction, Request, Response, response } from "express"; - -/** - * Return the found MemberState - */ -const responseMemberState = () => (req: Request, res: Response) => { - if (!res.data.memberState) { - res.status(404).json({ message: "MemberState not found!" }); - } else { - return res.json(res.data.memberState); - } -}; - -export default responseMemberState; diff --git a/src/middlewares/user/getStaffList.ts b/src/middlewares/user/getStaffList.ts deleted file mode 100644 index 37bc050fbf67302a4825816de538f6f3101087e7..0000000000000000000000000000000000000000 --- a/src/middlewares/user/getStaffList.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NextFunction, Request, Response } from "express"; -import Profile, { Role } from "../../models/ProfileSchema"; - -/** - * -> All Staff Profiles to res.data.profiles - */ -const getStaffList = () => async ( - req: Request, - res: Response, - next: NextFunction -) => { - try { - res.data.profiles = await Profile.find({ role: Role.Staff }); - next(); - } catch (err) { - next(err); - } -}; - -export default getStaffList; diff --git a/src/routes/news.ts b/src/routes/news.ts index b601e17558292a798bdf575159d27c52c1b99eb2..7b585f505cc994afafa7fabc5b5ad51fb70a7e8c 100644 --- a/src/routes/news.ts +++ b/src/routes/news.ts @@ -13,40 +13,66 @@ import responseNews from "../middlewares/news/responseNews"; import responseOneNews from "../middlewares/news/responseOneNews"; import updateNews from "../middlewares/news/updateNews"; -// GetNewsList [{ID, title, text, date}] -// GetOneNews(Id) [{ID, title, text, date, modifyDate, publishedBy, editedBy}] -// UpdateOneNews(Id) { title, text} -// DeleteOneNews(id) -// CreateOneNews {title, text} - const newsRoute = (prefix: string, app: Application): void => { - // Get all news - app.get(`${prefix}/`, getNewsList(), responseNews()); - // Add a new News + /** + * Get All News + * Role: None + */ + app.get( + `${prefix}/`, + getNewsList("_id title text publishedAt"), + responseNews() + ); + + /** + * Get one News + * Role: Admin + */ + app.get( + `${prefix}/one/:newsId`, + isRegistered(), + isAdmin(), + getOneNews("_id title text publishedAt publishedBy updatedBy"), + responseOneNews() + ); + + /** + * Create one new News + * Role: Admin + */ app.post( `${prefix}/`, isRegistered(), isAdmin(), - addNews(), + addNews([ + { name: "title", required: true }, + { name: "text", required: true }, + ]), createdResponse() ); - // Get a News - app.get(`${prefix}/one/:newsId`, getOneNews(), responseOneNews()); - // Update a News + + /** + * Update one News + * Role: Admin + */ app.put( `${prefix}/one/:newsId`, isRegistered(), isAdmin(), - getOneNews(), - updateNews(), + getOneNews("_id"), + updateNews(["title", "text"]), noContentResponse() ); - // Delete a News + + /** + * Delete one News + * Role: Admin + */ app.delete( `${prefix}/one/:newsId`, isRegistered(), isAdmin(), - getOneNews(), + getOneNews("_id"), deleteNews(), noContentResponse() );