diff --git a/src/pages/api/groups/[id].ts b/src/pages/api/groups/[id].ts index 31c7b6c7..48df6782 100644 --- a/src/pages/api/groups/[id].ts +++ b/src/pages/api/groups/[id].ts @@ -1,109 +1,91 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import type { NextApiRequest, NextApiResponse } from "next"; +import type {NextApiRequest, NextApiResponse} from "next"; import client from "@/lib/mongodb"; -import { withIronSessionApiRoute } from "iron-session/next"; -import { sessionOptions } from "@/lib/session"; -import { Group } from "@/interfaces/user"; -import { updateExpiryDateOnGroup } from "@/utils/groups.be"; +import {withIronSessionApiRoute} from "iron-session/next"; +import {sessionOptions} from "@/lib/session"; +import {Group} from "@/interfaces/user"; +import {updateExpiryDateOnGroup} from "@/utils/groups.be"; const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); async function handler(req: NextApiRequest, res: NextApiResponse) { - if (req.method === "GET") return await get(req, res); - if (req.method === "DELETE") return await del(req, res); - if (req.method === "PATCH") return await patch(req, res); + if (req.method === "GET") return await get(req, res); + if (req.method === "DELETE") return await del(req, res); + if (req.method === "PATCH") return await patch(req, res); - res.status(404).json(undefined); + res.status(404).json(undefined); } async function get(req: NextApiRequest, res: NextApiResponse) { - if (!req.session.user) { - res.status(401).json({ ok: false }); - return; - } + if (!req.session.user) { + res.status(401).json({ok: false}); + return; + } - const { id } = req.query as { id: string }; + const {id} = req.query as {id: string}; - const snapshot = await db.collection("groups").findOne({ id: id}); + const snapshot = await db.collection("groups").findOne({id: id}); - if (snapshot) { - res.status(200).json({ ...snapshot }); - } else { - res.status(404).json(undefined); - } + if (snapshot) { + res.status(200).json({...snapshot}); + } else { + res.status(404).json(undefined); + } } async function del(req: NextApiRequest, res: NextApiResponse) { - if (!req.session.user) { - res.status(401).json({ ok: false }); - return; - } + if (!req.session.user) { + res.status(401).json({ok: false}); + return; + } - const { id } = req.query as { id: string }; - const group = await db.collection("groups").findOne({id: id}); + const {id} = req.query as {id: string}; + const group = await db.collection("groups").findOne({id: id}); - if (!group) { - res.status(404); - return; - } + if (!group) { + res.status(404); + return; + } - const user = req.session.user; - if ( - user.type === "admin" || - user.type === "developer" || - user.id === group.admin - ) { - await db.collection("groups").deleteOne({ id: id }); + const user = req.session.user; + if (user.type === "admin" || user.type === "developer" || user.id === group.admin) { + await db.collection("groups").deleteOne({id: id}); - res.status(200).json({ ok: true }); - return; - } + res.status(200).json({ok: true}); + return; + } - res.status(403).json({ ok: false }); + res.status(403).json({ok: false}); } async function patch(req: NextApiRequest, res: NextApiResponse) { - if (!req.session.user) { - res.status(401).json({ ok: false }); - return; - } + if (!req.session.user) { + res.status(401).json({ok: false}); + return; + } - const { id } = req.query as { id: string }; + const {id} = req.query as {id: string}; - const group = await db.collection("groups").findOne({id: id}); - if (!group) { - res.status(404); - return; - } + const group = await db.collection("groups").findOne({id: id}); + if (!group) { + res.status(404); + return; + } - const user = req.session.user; - if ( - user.type === "admin" || - user.type === "developer" || - user.id === group.admin - ) { - if ("participants" in req.body) { - const newParticipants = (req.body.participants as string[]).filter( - (x) => !group.participants.includes(x), - ); - await Promise.all( - newParticipants.map( - async (p) => await updateExpiryDateOnGroup(p, group.admin), - ), - ); - } + const user = req.session.user; + if (user.type === "admin" || user.type === "developer" || user.id === group.admin) { + if ("participants" in req.body) { + const newParticipants = (req.body.participants as string[]).filter((x) => !group.participants.includes(x)); + await Promise.all(newParticipants.map(async (p) => await updateExpiryDateOnGroup(p, group.admin))); + } - await db.collection("grading").updateOne( - { id: req.session.user.id }, - { $set: {id: id, ...req.body} }, - { upsert: true } - ); + await db.collection("groups").updateOne({id: req.session.user.id}, {$set: {id, ...req.body}}, {upsert: true}); - res.status(200).json({ ok: true }); - return; - } + res.status(200).json({ok: true}); + return; + } - res.status(403).json({ ok: false }); + res.status(403).json({ok: false}); }