From e3400e856447737166b6729546ee357216a2efda Mon Sep 17 00:00:00 2001 From: Carlos Mesquita Date: Sat, 7 Sep 2024 16:17:24 +0100 Subject: [PATCH] /api/evaluate refactor --- src/pages/api/evaluate/interactiveSpeaking.ts | 27 ++++++++++--------- src/pages/api/evaluate/speaking.ts | 16 +++++------ src/pages/api/evaluate/writing.ts | 17 ++++++------ 3 files changed, 32 insertions(+), 28 deletions(-) diff --git a/src/pages/api/evaluate/interactiveSpeaking.ts b/src/pages/api/evaluate/interactiveSpeaking.ts index 6f38eac7..087230fb 100644 --- a/src/pages/api/evaluate/interactiveSpeaking.ts +++ b/src/pages/api/evaluate/interactiveSpeaking.ts @@ -6,12 +6,13 @@ import axios, {AxiosResponse} from "axios"; import formidable from "formidable-serverless"; import {ref, uploadBytes} from "firebase/storage"; import fs from "fs"; -import {app, storage} from "@/firebase"; -import {doc, getDoc, getFirestore, setDoc} from "firebase/firestore"; +import {storage} from "@/firebase"; +import client from "@/lib/mongodb"; import {Stat} from "@/interfaces/user"; import {speakingReverseMarking} from "@/utils/score"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); + export default withIronSessionApiRoute(handler, sessionOptions); function delay(ms: number) { @@ -53,18 +54,20 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { const correspondingStat = await getCorrespondingStat(fields.id, 1); const solutions = correspondingStat.solutions.map((x) => ({...x, evaluation: backendRequest.data, solution: uploadingAudios})); - await setDoc( - doc(db, "stats", fields.id), + await db.collection("stats").updateOne( + { id: fields.id }, { + $set: { solutions, score: { - correct: speakingReverseMarking[backendRequest.data.overall || 0] || 0, - missing: 0, - total: 100, + correct: speakingReverseMarking[backendRequest.data.overall || 0] || 0, + missing: 0, + total: 100, }, - isDisabled: false, + isDisabled: false + } }, - {merge: true}, + { upsert: true } ); console.log("🌱 - Updated the DB"); }); @@ -72,9 +75,9 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { async function getCorrespondingStat(id: string, index: number): Promise { console.log(`🌱 - Try number ${index} - ${id}`); - const correspondingStat = await getDoc(doc(db, "stats", id)); + const correspondingStat = await db.collection("stats").findOne({ id: id }); - if (correspondingStat.exists()) return {...correspondingStat.data(), id} as Stat; + if (correspondingStat) return correspondingStat; await delay(3 * 10000); return getCorrespondingStat(id, index + 1); } diff --git a/src/pages/api/evaluate/speaking.ts b/src/pages/api/evaluate/speaking.ts index 382ddc02..4e408139 100644 --- a/src/pages/api/evaluate/speaking.ts +++ b/src/pages/api/evaluate/speaking.ts @@ -6,12 +6,12 @@ import axios, {AxiosResponse} from "axios"; import formidable from "formidable-serverless"; import {getDownloadURL, ref, uploadBytes} from "firebase/storage"; import fs from "fs"; -import {app, storage} from "@/firebase"; -import {doc, getDoc, getFirestore, setDoc} from "firebase/firestore"; +import {storage} from "@/firebase"; +import client from "@/lib/mongodb"; import {Stat} from "@/interfaces/user"; import {speakingReverseMarking} from "@/utils/score"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); function delay(ms: number) { @@ -51,8 +51,8 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { solution: url, })); - await setDoc( - doc(db, "stats", fields.id), + await db.collection("stats").updateOne( + { id: fields.id }, { solutions, score: { @@ -62,7 +62,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { }, isDisabled: false, }, - {merge: true}, + {upsert: true}, ); console.log("🌱 - Updated the DB"); }); @@ -70,9 +70,9 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { async function getCorrespondingStat(id: string, index: number): Promise { console.log(`🌱 - Try number ${index} - ${id}`); - const correspondingStat = await getDoc(doc(db, "stats", id)); + const correspondingStat = await db.collection("stats").findOne({ id: id }); - if (correspondingStat.exists()) return {...correspondingStat.data(), id} as Stat; + if (correspondingStat) return correspondingStat; await delay(3 * 10000); return getCorrespondingStat(id, index + 1); } diff --git a/src/pages/api/evaluate/writing.ts b/src/pages/api/evaluate/writing.ts index d9d0ca26..dab927de 100644 --- a/src/pages/api/evaluate/writing.ts +++ b/src/pages/api/evaluate/writing.ts @@ -1,10 +1,9 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction import type {NextApiRequest, NextApiResponse} from "next"; -import {getFirestore, doc, getDoc, setDoc} from "firebase/firestore"; +import client from "@/lib/mongodb"; import {withIronSessionApiRoute} from "iron-session/next"; import {sessionOptions} from "@/lib/session"; import axios, {AxiosResponse} from "axios"; -import {app} from "@/firebase"; import {Stat} from "@/interfaces/user"; import {writingReverseMarking} from "@/utils/score"; @@ -19,7 +18,8 @@ function delay(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); } -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); + export default withIronSessionApiRoute(handler, sessionOptions); async function handler(req: NextApiRequest, res: NextApiResponse) { @@ -37,8 +37,8 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { const correspondingStat = await getCorrespondingStat(req.body.id, 1); const solutions = correspondingStat.solutions.map((x) => ({...x, evaluation: backendRequest.data})); - await setDoc( - doc(db, "stats", (req.body as Body).id), + await db.collection("stats").updateOne( + { id: (req.body as Body).id}, { solutions, score: { @@ -48,16 +48,17 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { }, isDisabled: false, }, - {merge: true}, + {upsert: true}, ); console.log("🌱 - Updated the DB"); } async function getCorrespondingStat(id: string, index: number): Promise { console.log(`🌱 - Try number ${index} - ${id}`); - const correspondingStat = await getDoc(doc(db, "stats", id)); + const correspondingStat = await db.collection("stats").findOne({ id: id}); - if (correspondingStat.exists()) return {...correspondingStat.data(), id} as Stat; + if (correspondingStat) return correspondingStat; + await delay(3 * 10000); return getCorrespondingStat(id, index + 1); }