diff --git a/src/pages/api/paypal/approve.ts b/src/pages/api/paypal/approve.ts index af9f18f9..f2603125 100644 --- a/src/pages/api/paypal/approve.ts +++ b/src/pages/api/paypal/approve.ts @@ -1,13 +1,6 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction import type { NextApiRequest, NextApiResponse } from "next"; -import { app } from "@/firebase"; -import { - getFirestore, - collection, - getDocs, - setDoc, - doc, -} from "firebase/firestore"; +import client from "@/lib/mongodb"; import { withIronSessionApiRoute } from "iron-session/next"; import { sessionOptions } from "@/lib/session"; import axios from "axios"; @@ -19,7 +12,7 @@ import { getAccessToken } from "@/utils/paypal"; import moment from "moment"; import { Group } from "@/interfaces/user"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -60,33 +53,33 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { const dateToBeAddedTo = !subscriptionExpirationDate ? today : moment(subscriptionExpirationDate).isAfter(today) - ? moment(subscriptionExpirationDate) - : today; + ? moment(subscriptionExpirationDate) + : today; const updatedExpirationDate = dateToBeAddedTo.add( duration, duration_unit ); - await setDoc( - doc(db, "users", req.session.user!.id), + + await db.collection("users").updateOne( + { id: req.session.user!.id }, { - subscriptionExpirationDate: updatedExpirationDate.toISOString(), - status: "active", - }, - { merge: true } + $set: { + subscriptionExpirationDate: updatedExpirationDate.toISOString(), + status: "active", + } + } ); try { - await setDoc(doc(db, "paypalpayments", v4()), { + await db.collection("paypalpayments").insertOne({ + id: v4(), orderId: id, userId: req.session.user!.id, status: request.data.status, createdAt: new Date().toISOString(), - value: - request.data.purchase_units[0].payments.captures[0].amount.value, - currency: - request.data.purchase_units[0].payments.captures[0].amount - .currency_code, + value: request.data.purchase_units[0].payments.captures[0].amount.value, + currency: request.data.purchase_units[0].payments.captures[0].amount.currency_code, subscriptionDuration: duration, subscriptionDurationUnit: duration_unit, subscriptionExpirationDate: updatedExpirationDate.toISOString(), @@ -96,12 +89,8 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { } if (user!.type === "corporate") { - const snapshot = await getDocs(collection(db, "groups")); - const groups: Group[] = ( - snapshot.docs.map((doc) => ({ - id: doc.id, - ...doc.data(), - })) as Group[] + const groups = ( + await db.collection("groups").find({}).toArray() ).filter((x) => x.admin === user!.id); await Promise.all( @@ -109,14 +98,14 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { .flatMap((x) => x.participants) .map( async (x) => - await setDoc( - doc(db, "users", x), + await db.collection("users").updateOne( + { id: x }, { - subscriptionExpirationDate: - updatedExpirationDate.toISOString(), - status: "active", - }, - { merge: true } + $set: { + subscriptionExpirationDate: updatedExpirationDate.toISOString(), + status: "active", + } + } ) ) ); diff --git a/src/pages/api/permissions/[id].ts b/src/pages/api/permissions/[id].ts index 4fe24fd4..f0580115 100644 --- a/src/pages/api/permissions/[id].ts +++ b/src/pages/api/permissions/[id].ts @@ -1,12 +1,11 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import type {NextApiRequest, NextApiResponse} from "next"; -import {app} from "@/firebase"; -import {getFirestore, doc, setDoc, getDoc} from "firebase/firestore"; -import {withIronSessionApiRoute} from "iron-session/next"; -import {sessionOptions} from "@/lib/session"; -import {getPermissionDoc} from "@/utils/permissions.be"; +import type { NextApiRequest, NextApiResponse } from "next"; +import client from "@/lib/mongodb"; +import { withIronSessionApiRoute } from "iron-session/next"; +import { sessionOptions } from "@/lib/session"; +import { getPermissionDoc } from "@/utils/permissions.be"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -17,30 +16,35 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { async function get(req: NextApiRequest, res: NextApiResponse) { if (!req.session.user) { - res.status(401).json({ok: false}); + res.status(401).json({ ok: false }); return; } - const {id} = req.query as {id: string}; + const { id } = req.query as { id: string }; const permissionDoc = await getPermissionDoc(id); - return res.status(200).json({allowed: permissionDoc.users.includes(req.session.user.id)}); + return res.status(200).json({ allowed: permissionDoc.users.includes(req.session.user.id) }); } async function patch(req: NextApiRequest, res: NextApiResponse) { if (!req.session.user) { - res.status(401).json({ok: false}); + res.status(401).json({ ok: false }); return; } - const {id} = req.query as {id: string}; - const {users} = req.body; + const { id } = req.query as { id: string }; + const { users } = req.body; try { - await setDoc(doc(db, "permissions", id), {users}, {merge: true}); - return res.status(200).json({ok: true}); + await db.collection("permissions").updateOne( + { id: id }, + { $set: {...users, id: id} }, + { upsert: true } + ); + + return res.status(200).json({ ok: true }); } catch (err) { console.error(err); - return res.status(500).json({ok: false}); + return res.status(500).json({ ok: false }); } } diff --git a/src/pages/api/permissions/index.ts b/src/pages/api/permissions/index.ts index 3f9fbfac..9f51b05b 100644 --- a/src/pages/api/permissions/index.ts +++ b/src/pages/api/permissions/index.ts @@ -1,25 +1,10 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction import type { NextApiRequest, NextApiResponse } from "next"; -import { app } from "@/firebase"; -import { - getFirestore, - collection, - getDocs, - query, - where, - doc, - setDoc, - addDoc, - getDoc, - deleteDoc, -} from "firebase/firestore"; import { withIronSessionApiRoute } from "iron-session/next"; import { sessionOptions } from "@/lib/session"; import { Permission } from "@/interfaces/permissions"; import { getPermissions, getPermissionDocs } from "@/utils/permissions.be"; -const db = getFirestore(app); - export default withIronSessionApiRoute(handler, sessionOptions); async function handler(req: NextApiRequest, res: NextApiResponse) { diff --git a/src/pages/api/reset/verify.ts b/src/pages/api/reset/verify.ts index 609267f2..b9c50213 100644 --- a/src/pages/api/reset/verify.ts +++ b/src/pages/api/reset/verify.ts @@ -1,12 +1,13 @@ import {NextApiRequest, NextApiResponse} from "next"; import {getAuth} from "firebase-admin/auth"; -import {adminApp, app} from "@/firebase"; +import {adminApp} from "@/firebase"; +import client from "@/lib/mongodb"; import {sessionOptions} from "@/lib/session"; import {withIronSessionApiRoute} from "iron-session/next"; -import {doc, getFirestore, setDoc} from "firebase/firestore"; + +const db = client.db(process.env.MONGODB_DB); const auth = getAuth(adminApp); -const db = getFirestore(app); export default withIronSessionApiRoute(verify, sessionOptions); @@ -19,8 +20,10 @@ async function verify(req: NextApiRequest, res: NextApiResponse) { return; } - const userRef = doc(db, "users", user.uid); - await setDoc(userRef, {isVerified: true}, {merge: true}); + await db.collection("users").updateOne( + { id: user.uid}, + { $set: {isVerified: true} } + ); res.status(200).json({ok: true}); } diff --git a/src/pages/api/sessions/[id].ts b/src/pages/api/sessions/[id].ts index c564e84f..f5478794 100644 --- a/src/pages/api/sessions/[id].ts +++ b/src/pages/api/sessions/[id].ts @@ -1,12 +1,11 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction import type {NextApiRequest, NextApiResponse} from "next"; -import {app} from "@/firebase"; -import {getFirestore, doc, getDoc, deleteDoc} from "firebase/firestore"; +import client from "@/lib/mongodb"; import {withIronSessionApiRoute} from "iron-session/next"; import {sessionOptions} from "@/lib/session"; import {Session} from "@/hooks/useSessions"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -23,14 +22,10 @@ async function get(req: NextApiRequest, res: NextApiResponse) { const {id} = req.query as {id: string}; - const docRef = doc(db, "sessions", id); - const docSnap = await getDoc(docRef); + const docSnap = await db.collection("sessions").findOne({ id: id }); - if (docSnap.exists()) { - res.status(200).json({ - id: docSnap.id, - ...docSnap.data(), - }); + if (docSnap) { + res.status(200).json(docSnap); } else { res.status(404).json(undefined); } @@ -44,11 +39,10 @@ async function del(req: NextApiRequest, res: NextApiResponse) { const {id} = req.query as {id: string}; - const docRef = doc(db, "sessions", id); - const docSnap = await getDoc(docRef); + const docSnap = await db.collection("sessions").findOne({ id: id }); - if (!docSnap.exists()) return res.status(404).json({ok: false}); - - await deleteDoc(docRef); + if (!docSnap) return res.status(404).json({ok: false}); + await db.collection("sessions").deleteOne({ id: id }); + return res.status(200).json({ok: true}); } diff --git a/src/pages/api/sessions/index.ts b/src/pages/api/sessions/index.ts index 16afdeca..1e7c83f1 100644 --- a/src/pages/api/sessions/index.ts +++ b/src/pages/api/sessions/index.ts @@ -1,13 +1,12 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction import type {NextApiRequest, NextApiResponse} from "next"; -import {app} from "@/firebase"; -import {getFirestore, collection, getDocs, query, where, doc, setDoc, addDoc, getDoc} from "firebase/firestore"; +import client from "@/lib/mongodb"; import {withIronSessionApiRoute} from "iron-session/next"; import {sessionOptions} from "@/lib/session"; import {Session} from "@/hooks/useSessions"; import moment from "moment"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -24,12 +23,8 @@ async function get(req: NextApiRequest, res: NextApiResponse) { const {user} = req.query as {user?: string}; - const q = user ? query(collection(db, "sessions"), where("user", "==", user)) : collection(db, "sessions"); - const snapshot = await getDocs(q); - const sessions = snapshot.docs.map((doc) => ({ - id: doc.id, - ...doc.data(), - })) as Session[]; + const q = user ? {user: user} : {}; + const sessions = await db.collection("sessions").find(q).toArray(); res.status(200).json( sessions.filter((x) => { @@ -45,9 +40,13 @@ async function post(req: NextApiRequest, res: NextApiResponse) { res.status(401).json({ok: false}); return; } - const session = req.body; - await setDoc(doc(db, "sessions", session.id), session, {merge: true}); + + await db.collection("sessions").updateOne( + { id: session.id}, + { $set: session }, + { upsert: true } + ); res.status(200).json({ok: true}); } diff --git a/src/pages/api/stats/[id]/[export]/pdf.tsx b/src/pages/api/stats/[id]/[export]/pdf.tsx index e04ffa39..a94ca960 100644 --- a/src/pages/api/stats/[id]/[export]/pdf.tsx +++ b/src/pages/api/stats/[id]/[export]/pdf.tsx @@ -1,15 +1,6 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import { app, storage } from "@/firebase"; -import { - getFirestore, - doc, - getDoc, - updateDoc, - getDocs, - query, - collection, - where, -} from "firebase/firestore"; +import { storage } from "@/firebase"; +import client from "@/lib/mongodb"; import { withIronSessionApiRoute } from "iron-session/next"; import { sessionOptions } from "@/lib/session"; import ReactPDF from "@react-pdf/renderer"; @@ -35,7 +26,8 @@ import { } from "@/utils/pdf"; import moment from "moment-timezone"; import { getCorporateNameForStudent } from "@/utils/groups.be"; -const db = getFirestore(app); + +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -281,19 +273,22 @@ async function getPdfUrl(pdfStream: any, docsSnap: any) { // upload the pdf to storage const pdfBuffer = await streamToBuffer(pdfStream); - const snapshot = await uploadBytes(fileRef, pdfBuffer, { + await uploadBytes(fileRef, pdfBuffer, { contentType: "application/pdf", }); // update the stats entries with the pdf url to prevent duplication - docsSnap.docs.forEach(async (doc: any) => { - await updateDoc(doc.ref, { - pdf: { - path: refName, - version: process.env.PDF_VERSION, - }, - }); - }); + await db.collection("stats").updateOne( + { id: docsSnap.id }, + { + $set: { + pdf: { + path: refName, + version: process.env.PDF_VERSION, + } + } + } + ); return getDownloadURL(fileRef); } @@ -302,16 +297,13 @@ async function post(req: NextApiRequest, res: NextApiResponse) { if (req.session.user) { const { id } = req.query as { id: string }; // fetch stats entries for this particular user with the requested exam session - const docsSnap = await getDocs( - query(collection(db, "stats"), where("session", "==", id)) - ); + const stats = await db.collection("stats").find({ session: id }).toArray(); - if (docsSnap.empty) { + if (stats.length == 0) { res.status(400).end(); return; } - const stats = docsSnap.docs.map((d) => d.data()) as Stat[]; // verify if the stats already have a pdf generated const hasPDF = stats.find( (s) => s.pdf?.path && s.pdf?.version === process.env.PDF_VERSION @@ -336,26 +328,25 @@ async function post(req: NextApiRequest, res: NextApiResponse) { try { // generate the pdf report - const docUser = await getDoc(doc(db, "users", userId)); + const docUser = await db.collection("users").findOne({ id: userId}); - if (docUser.exists()) { + if (docUser) { // we'll need the user in order to get the user data (name, email, focus, etc); const [stat] = stats; if (stat.module === "level") { - const user = docUser.data() as StudentUser; + const user = docUser as StudentUser; const uniqueExercises = stats.map((s) => ({ name: "Gramar & Vocabulary", result: `${s.score.correct}/${s.score.total}`, })); const dates = stats.map((s) => moment(s.date)); - const timeSpent = `${ - stats.reduce((accm, s: Stat) => accm + (s.timeSpent || 0), 0) / 60 - } minutes`; + const timeSpent = `${stats.reduce((accm, s: Stat) => accm + (s.timeSpent || 0), 0) / 60 + } minutes`; const score = stats.reduce((accm, s) => accm + s.score.correct, 0); - const corporateName = await getCorporateNameForStudent(userId); + const corporateName = await getCorporateNameForStudent(userId); const pdfStream = await ReactPDF.renderToStream( ); - const url = await getPdfUrl(pdfStream, docsSnap); + const url = await getPdfUrl(pdfStream, docUser); res.status(200).end(url); return; } - const user = docUser.data() as User; + const user = docUser as User; try { const pdfStream = await getDefaultPDFStream( @@ -386,7 +377,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) { `${req.headers.origin || ""}${req.url}` ); - const url = await getPdfUrl(pdfStream, docsSnap); + const url = await getPdfUrl(pdfStream, docUser); res.status(200).end(url); return; } catch (err) { @@ -411,21 +402,17 @@ async function post(req: NextApiRequest, res: NextApiResponse) { async function get(req: NextApiRequest, res: NextApiResponse) { const { id } = req.query as { id: string }; - const docsSnap = await getDocs( - query(collection(db, "stats"), where("session", "==", id)) - ); + const stats = await db.collection("stats").find({ session: id }).toArray(); - if (docsSnap.empty) { + if (stats.length == 0) { res.status(404).end(); return; } - const stats = docsSnap.docs.map((d) => d.data()); - const hasPDF = stats.find((s) => s.pdf?.path); if (hasPDF) { - const fileRef = ref(storage, hasPDF.pdf.path); + const fileRef = ref(storage, hasPDF.pdf!.path); const url = await getDownloadURL(fileRef); return res.redirect(url); } diff --git a/src/pages/api/stats/[id]/index.ts b/src/pages/api/stats/[id]/index.ts index d83e13a5..f531284b 100644 --- a/src/pages/api/stats/[id]/index.ts +++ b/src/pages/api/stats/[id]/index.ts @@ -1,12 +1,8 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction import type {NextApiRequest, NextApiResponse} from "next"; -import {app} from "@/firebase"; -import {getFirestore, collection, getDocs, query, where, setDoc, doc, getDoc, deleteDoc} from "firebase/firestore"; -import {withIronSessionApiRoute} from "iron-session/next"; -import {sessionOptions} from "@/lib/session"; -import {uuidv4} from "@firebase/util"; +import client from "@/lib/mongodb"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default async function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method === "GET") return GET(req, res); @@ -17,8 +13,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) async function GET(req: NextApiRequest, res: NextApiResponse) { const {id} = req.query; - const snapshot = await getDoc(doc(db, "stats", id as string)); - if (!snapshot.exists()) return res.status(404).json({id: snapshot.id}); + const snapshot = await db.collection("stats").findOne({ id: id as string}); + if (!snapshot) return res.status(404).json({id: id as string}); res.status(200).json({...snapshot.data(), id: snapshot.id}); } diff --git a/src/pages/api/stats/index.ts b/src/pages/api/stats/index.ts index ce8b4b85..41cb6d77 100644 --- a/src/pages/api/stats/index.ts +++ b/src/pages/api/stats/index.ts @@ -1,14 +1,13 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import type {NextApiRequest, NextApiResponse} from "next"; -import {app} from "@/firebase"; -import {getFirestore, collection, getDocs, query, where, doc, setDoc, addDoc, getDoc, deleteDoc} from "firebase/firestore"; -import {withIronSessionApiRoute} from "iron-session/next"; -import {sessionOptions} from "@/lib/session"; -import {Stat} from "@/interfaces/user"; -import {Assignment} from "@/interfaces/results"; -import {groupBy} from "lodash"; +import type { NextApiRequest, NextApiResponse } from "next"; +import client from "@/lib/mongodb"; +import { withIronSessionApiRoute } from "iron-session/next"; +import { sessionOptions } from "@/lib/session"; +import { Stat } from "@/interfaces/user"; +import { Assignment } from "@/interfaces/results"; +import { groupBy } from "lodash"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -19,33 +18,28 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { async function get(req: NextApiRequest, res: NextApiResponse) { if (!req.session.user) { - res.status(401).json({ok: false}); + res.status(401).json({ ok: false }); return; } + const snapshot = await db.collection("stats").find({}).toArray(); - const q = query(collection(db, "stats")); - - const snapshot = await getDocs(q); - - res.status(200).json( - snapshot.docs.map((doc) => ({ - id: doc.id, - ...doc.data(), - })), - ); + res.status(200).json(snapshot); } async function post(req: NextApiRequest, res: NextApiResponse) { if (!req.session.user) { - res.status(401).json({ok: false}); + res.status(401).json({ ok: false }); return; } const stats = req.body as Stat[]; - await stats.forEach(async (stat) => await setDoc(doc(db, "stats", stat.id), stat)); - await stats.forEach(async (stat) => { - const sessionDoc = await getDoc(doc(db, "sessions", stat.session)); - if (sessionDoc.exists()) await deleteDoc(sessionDoc.ref); + stats.forEach(async (stat) => await db.collection("stats").updateOne( + { id: stat.id }, + { $set: stat }, + { upsert: true } + )); + stats.forEach(async (stat) => { + await db.collection("sessions").deleteOne({ id: stat.session }) }); const groupedStatsByAssignment = groupBy( @@ -55,22 +49,23 @@ async function post(req: NextApiRequest, res: NextApiResponse) { if (Object.keys(groupedStatsByAssignment).length > 0) { const assignments = Object.keys(groupedStatsByAssignment); - await assignments.forEach(async (assignmentId) => { + assignments.forEach(async (assignmentId) => { const assignmentStats = groupedStatsByAssignment[assignmentId] as Stat[]; - const assignmentSnapshot = await getDoc(doc(db, "assignments", assignmentId)); - await setDoc( - doc(db, "assignments", assignmentId), + const assignmentSnapshot = await db.collection("assignments").findOne({ id: assignmentId }); + await db.collection("assignments").updateOne( + { id: assignmentId }, { - results: [ - ...(assignmentSnapshot.data() as Assignment).results, - {user: req.session.user?.id, type: req.session.user?.focus, stats: assignmentStats}, - ], - }, - {merge: true}, + $set: { + results: [ + ...assignmentSnapshot ? assignmentSnapshot.results : [], + { user: req.session.user?.id, type: req.session.user?.focus, stats: assignmentStats }, + ], + } + } ); }); } - res.status(200).json({ok: true}); + res.status(200).json({ ok: true }); } diff --git a/src/pages/api/stats/update.ts b/src/pages/api/stats/update.ts index 7d089445..11c76017 100644 --- a/src/pages/api/stats/update.ts +++ b/src/pages/api/stats/update.ts @@ -6,29 +6,25 @@ import {sessionOptions} from "@/lib/session"; import {calculateBandScore} from "@/utils/score"; import {groupByModule, groupBySession} from "@/utils/stats"; import { MODULE_ARRAY } from "@/utils/moduleUtils"; -import {getAuth} from "firebase/auth"; -import {collection, doc, getDoc, getDocs, getFirestore, query, updateDoc, where} from "firebase/firestore"; +import client from "@/lib/mongodb"; import {withIronSessionApiRoute} from "iron-session/next"; import {groupBy} from "lodash"; import {NextApiRequest, NextApiResponse} from "next"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(update, sessionOptions); async function update(req: NextApiRequest, res: NextApiResponse) { if (req.session.user) { - const docUser = await getDoc(doc(db, "users", req.session.user.id)); - if (!docUser.exists()) { + const docUser = await db.collection("users").findOne({ id: req.session.user.id }); + + if (!docUser) { res.status(401).json(undefined); return; } - const q = query(collection(db, "stats"), where("user", "==", req.session.user.id)); - const stats = (await getDocs(q)).docs.map((doc) => ({ - ...(doc.data() as Stat), - id: doc.id, - })) as Stat[]; + const stats = await db.collection("stats").find({ user: req.session.user.id }).toArray(); const groupedStats = groupBySession(stats); const sessionLevels: {[key in Module]: {correct: number; total: number}}[] = Object.keys(groupedStats).map((key) => { @@ -102,9 +98,11 @@ async function update(req: NextApiRequest, res: NextApiResponse) { level: calculateBandScore(levelLevel.correct, levelLevel.total, "level", req.session.user.focus), }; - const userDoc = doc(db, "users", req.session.user.id); - await updateDoc(userDoc, {levels}); - + await db.collection("users").updateOne( + { id: req.session.user.id}, + { $set: {levels} } + ); + res.status(200).json({ok: true}); } else { res.status(401).json(undefined); diff --git a/src/pages/api/stats/user/[user].ts b/src/pages/api/stats/user/[user].ts index ff1645bf..1f8352d6 100644 --- a/src/pages/api/stats/user/[user].ts +++ b/src/pages/api/stats/user/[user].ts @@ -1,11 +1,10 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction import type {NextApiRequest, NextApiResponse} from "next"; -import {app} from "@/firebase"; -import {getFirestore, collection, getDocs, query, where, doc, setDoc, addDoc} from "firebase/firestore"; +import client from "@/lib/mongodb"; import {withIronSessionApiRoute} from "iron-session/next"; import {sessionOptions} from "@/lib/session"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -16,14 +15,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { } const {user} = req.query; - const q = query(collection(db, "stats"), where("user", "==", user)); + const snapshot = await db.collection("stats").find({ user: user }).toArray(); - const snapshot = await getDocs(q); - - res.status(200).json( - snapshot.docs.map((doc) => ({ - id: doc.id, - ...doc.data(), - })), - ); + res.status(200).json(snapshot); } \ No newline at end of file