ENCOA-315
This commit is contained in:
46
src/pages/api/stats/disabled.ts
Normal file
46
src/pages/api/stats/disabled.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
|
||||
import type { NextApiRequest, NextApiResponse } from "next";
|
||||
import client from "@/lib/mongodb";
|
||||
import { withIronSessionApiRoute } from "iron-session/next";
|
||||
import { sessionOptions } from "@/lib/session";
|
||||
import { requestUser } from "@/utils/api";
|
||||
import { UserSolution } from "@/interfaces/exam";
|
||||
import { WithId } from "mongodb";
|
||||
|
||||
const db = client.db(process.env.MONGODB_DB);
|
||||
|
||||
export default withIronSessionApiRoute(handler, sessionOptions);
|
||||
|
||||
async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||
const user = await requestUser(req, res)
|
||||
if (!user) return res.status(401).json({ ok: false });
|
||||
|
||||
if (req.method === "POST") return post(req, res);
|
||||
}
|
||||
|
||||
|
||||
interface Body {
|
||||
solutions: UserSolution[];
|
||||
sessionId: string;
|
||||
userId: string;
|
||||
}
|
||||
|
||||
async function post(req: NextApiRequest, res: NextApiResponse) {
|
||||
const { userId, solutions, sessionId } = req.body as Body;
|
||||
const disabledStats = await db.collection("stats").find(
|
||||
{ user: userId, session: sessionId, isDisabled: true }
|
||||
).toArray();
|
||||
|
||||
await Promise.all(disabledStats.map(async (stat) => {
|
||||
const matchingSolution = solutions.find(s => s.exercise === stat.exercise);
|
||||
if (matchingSolution) {
|
||||
const { _id, ...updateFields } = matchingSolution as WithId<UserSolution>;
|
||||
await db.collection("stats").updateOne(
|
||||
{ id: stat.id },
|
||||
{ $set: { ...updateFields } }
|
||||
);
|
||||
}
|
||||
}));
|
||||
|
||||
return res.status(200).json({ ok: true });
|
||||
}
|
||||
Reference in New Issue
Block a user