diff --git a/src/routes/api/admin/news.ts b/src/routes/api/admin/news.ts index f339838..b80f595 100644 --- a/src/routes/api/admin/news.ts +++ b/src/routes/api/admin/news.ts @@ -2,26 +2,28 @@ import { Router } from "express"; import News from "@schemas/News" import { Perms, adminPerm } from "@/utility"; import capability, { Features } from "@/helpers/capability"; +import { IUser } from "@/schemas/User"; const newsRouter = Router() newsRouter.use(adminPerm(Perms.News)) newsRouter.use(capability.mw(Features.News)) -newsRouter.get('/', async (req,res)=>{ - res.send(await News.find({},null,{sort: {pinned: -1 ,date: -1}})) +newsRouter.get('/', async (req, res) => { + var news = await News.find(undefined, undefined, { sort: { pinned: -1, date: -1 } }).populate<{ author: Pick }>("author", ["fname", "surname", "uname"]) + res.send(news) }) -newsRouter.post('/', async (req,res)=>{ - await News.create({title: req.body.title, content: req.body.content}) - res.status(201).send({status: 201}) +newsRouter.post('/', async (req, res) => { + await News.create({ title: req.body.title, content: req.body.content, author: req.user._id }) + res.status(201).send({ status: 201 }) }) -newsRouter.delete('/:id', async (req,res)=>{ +newsRouter.delete('/:id', async (req, res) => { await News.findByIdAndDelete(req.params.id) - res.send({status: 200}) + res.send({ status: 200 }) }) -newsRouter.put('/:id', async (req,res)=>{ - await News.findByIdAndUpdate(req.params.id, req.body) - res.send({status: 200}) +newsRouter.put('/:id', async (req, res) => { + await News.findByIdAndUpdate(req.params.id, { ...req.body, author: req.user._id }) + res.send({ status: 200 }) }) -export {newsRouter}; \ No newline at end of file +export { newsRouter }; \ No newline at end of file diff --git a/src/routes/api/app/index.ts b/src/routes/api/app/index.ts index abcf303..52aee1d 100644 --- a/src/routes/api/app/index.ts +++ b/src/routes/api/app/index.ts @@ -10,13 +10,14 @@ import usettings from "@/helpers/usettings"; import Grade from "@schemas/Grade"; import { createHash } from "node:crypto"; import Inbox from "@/schemas/Inbox"; +import { IUser } from "@/schemas/User"; export const appRouter = Router(); appRouter.use(islogged) appRouter.get("/news", capability.mw(Features.News), async (req, res) => { - var news = await News.find({"visible": {"$ne": false}}, {_id: 0, visible: 0}, {sort: {pinned: -1 ,date: -1}}) + var news = await News.find({"visible": {"$ne": false}}, {_id: 0, visible: 0}, {sort: {pinned: -1 ,date: -1}}).populate<{author: Pick}>("author", ["fname", "surname", "uname"]) res.send(news) }) diff --git a/src/schemas/News.ts b/src/schemas/News.ts index 27cc749..e743551 100644 --- a/src/schemas/News.ts +++ b/src/schemas/News.ts @@ -1,11 +1,12 @@ -import mongoose, { Schema } from "mongoose" +import mongoose, { Schema, Types } from "mongoose" interface INews { content: string; title: string; date: Date; visible?: boolean; - pinned?: boolean + pinned?: boolean; + author: Types.ObjectId } const newsSchema = new Schema({ @@ -13,7 +14,8 @@ const newsSchema = new Schema({ title: {type: String, required: true}, date: {type: Date, requred: true, default: Date.now}, visible: {type: Boolean, default: false}, - pinned: {type: Boolean, default: false} + pinned: {type: Boolean, default: false}, + author: {type: "ObjectId", ref: "logins", required: true} }) export default mongoose.model("news", newsSchema) \ No newline at end of file