diff --git a/src/pages/api/tickets/[id].ts b/src/pages/api/tickets/[id].ts index f55ca518..38751593 100644 --- a/src/pages/api/tickets/[id].ts +++ b/src/pages/api/tickets/[id].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, getDoc, doc, deleteDoc, setDoc} from "firebase/firestore"; -import {withIronSessionApiRoute} from "iron-session/next"; -import {sessionOptions} from "@/lib/session"; -import {Ticket, TicketTypeLabel, TicketStatusLabel} from "@/interfaces/ticket"; +import type { NextApiRequest, NextApiResponse } from "next"; +import client from "@/lib/mongodb"; +import { withIronSessionApiRoute } from "iron-session/next"; +import { sessionOptions } from "@/lib/session"; +import { Ticket, TicketTypeLabel, TicketStatusLabel } from "@/interfaces/ticket"; import moment from "moment"; -import {sendEmail} from "@/email"; +import { sendEmail } from "@/email"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -22,16 +21,16 @@ 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 snapshot = await getDoc(doc(db, "tickets", id)); + const snapshot = await db.collection("tickets").findOne({ id: id }); - if (snapshot.exists()) { - res.status(200).json({...snapshot.data(), id: snapshot.id}); + if (snapshot) { + res.status(200).json({ ...snapshot }); } else { res.status(404).json(undefined); } @@ -39,43 +38,42 @@ async function get(req: NextApiRequest, res: NextApiResponse) { async function del(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 snapshot = await getDoc(doc(db, "tickets", id)); - const data = snapshot.data() as Ticket; - + const { id } = req.query as { id: string }; const user = req.session.user; + if (user.type === "admin" || user.type === "developer") { - await deleteDoc(snapshot.ref); - res.status(200).json({ok: true}); + await db.collection("tickets").deleteOne({ id: id }); + 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}); + res.status(401).json({ ok: false }); return; } - const {id} = req.query as {id: string}; + const { id } = req.query as { id: string }; const body = req.body as Ticket; - const snapshot = await getDoc(doc(db, "tickets", id)); + const data = await db.collection("tickets").updateOne( + { id: id }, + { $set: body }, + { upsert: true } + ); const user = req.session.user; if (user.type === "admin" || user.type === "developer") { - const data = snapshot.data() as Ticket; - await setDoc(snapshot.ref, body, {merge: true}); try { // send email if the status actually changed to completed - if (data.status !== req.body.status && req.body.status === "completed") { + if (body.status !== req.body.status && req.body.status === "completed") { await sendEmail( "ticketStatusCompleted", { @@ -88,17 +86,17 @@ async function patch(req: NextApiRequest, res: NextApiResponse) { description: body.description, environment: process.env.ENVIRONMENT, }, - [data.reporter.email], - `Ticket ${id}: ${data.subject}`, + [body.reporter.email], + `Ticket ${id}: ${body.subject}`, ); } } catch (err) { console.error(err); // doesnt matter if the email fails } - res.status(200).json({ok: true}); + res.status(200).json({ ok: true }); return; } - res.status(403).json({ok: false}); + res.status(403).json({ ok: false }); } diff --git a/src/pages/api/tickets/index.ts b/src/pages/api/tickets/index.ts index dd6db2bc..46bc856f 100644 --- a/src/pages/api/tickets/index.ts +++ b/src/pages/api/tickets/index.ts @@ -1,16 +1,15 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import {sendEmail} from "@/email"; -import {app} from "@/firebase"; -import {Ticket, TicketTypeLabel, TicketWithCorporate} from "@/interfaces/ticket"; -import {sessionOptions} from "@/lib/session"; -import {collection, doc, getDocs, getFirestore, setDoc, where, query} from "firebase/firestore"; -import {withIronSessionApiRoute} from "iron-session/next"; +import { sendEmail } from "@/email"; +import { Ticket, TicketTypeLabel, TicketWithCorporate } from "@/interfaces/ticket"; +import { sessionOptions } from "@/lib/session"; +import client from "@/lib/mongodb"; +import { withIronSessionApiRoute } from "iron-session/next"; import moment from "moment"; -import type {NextApiRequest, NextApiResponse} from "next"; +import type { NextApiRequest, NextApiResponse } from "next"; import ShortUniqueId from "short-unique-id"; -import {Group, CorporateUser} from "@/interfaces/user"; +import { Group, CorporateUser } from "@/interfaces/user"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -27,7 +26,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { return; } if (!req.session.user) { - res.status(401).json({ok: false}); + res.status(401).json({ ok: false }); return; } @@ -37,31 +36,24 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { } async function get(req: NextApiRequest, res: NextApiResponse) { - const snapshot = await getDocs(collection(db, "tickets")); - - const docs = snapshot.docs.map((doc) => ({ - id: doc.id, - ...doc.data(), - })) as Ticket[]; + const docs = await db.collection("tickets").find({}).toArray(); // fetch all groups for these users - const reporters = [...new Set(docs.map((d) => d.reporter.id).filter((id) => id))]; - const groupsSnapshot = await getDocs(query(collection(db, "groups"), where("participants", "array-contains-any", reporters))); - const groups = groupsSnapshot.docs.map((doc) => doc.data()) as Group[]; + const groups = await db.collection("groups").find({ + participants: { $in: reporters } + }).toArray(); // based on the admin of each group, verify if it exists and it's of type corporate const groupsAdmins = [...new Set(groups.map((g) => g.admin).filter((id) => id))]; - const adminsSnapshot = - groupsAdmins.length > 0 - ? await getDocs(query(collection(db, "users"), where("id", "in", groupsAdmins), where("type", "==", "corporate"))) - : {docs: []}; - const admins = adminsSnapshot.docs.map((doc) => doc.data()); + const admins = groupsAdmins.length > 0 + ? await db.collection("users").find({ id: { $in: groupsAdmins }, type: "corporate" }).toArray() + : []; const docsWithAdmins = docs.map((d) => { const group = groups.find((g) => g.participants.includes(d.reporter.id)); - const admin = admins.find((a) => a.id === group?.admin) as CorporateUser; + const admin = admins.find((a) => a.id === group?.admin); if (admin) { return { @@ -81,8 +73,12 @@ async function post(req: NextApiRequest, res: NextApiResponse) { const shortUID = new ShortUniqueId(); const id = body.id || shortUID.randomUUID(8); - await setDoc(doc(db, "tickets", id), body); - res.status(200).json({ok: true}); + await db.collection("tickets").updateOne( + { id: id }, + { $set: { ...body, id: id } } + ); + + res.status(200).json({ ok: true }); try { await sendEmail( diff --git a/src/pages/api/training/[id].ts b/src/pages/api/training/[id].ts index 4532c366..185f2081 100644 --- a/src/pages/api/training/[id].ts +++ b/src/pages/api/training/[id].ts @@ -1,10 +1,9 @@ import { sessionOptions } from "@/lib/session"; -import {app} from "@/firebase"; -import { collection, doc, getDoc, getDocs, getFirestore, query } from "firebase/firestore"; +import client from "@/lib/mongodb"; import { withIronSessionApiRoute } from "iron-session/next"; import { NextApiRequest, NextApiResponse } from "next"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -26,14 +25,9 @@ async function get(req: NextApiRequest, res: NextApiResponse) { return res.status(400).json({ message: 'Invalid ID' }); } - const docRef = doc(db, "training", id); - const docSnap = await getDoc(docRef); - - if (docSnap.exists()) { - res.status(200).json({ - id: docSnap.id, - ...docSnap.data(), - }); + const doc = await db.collection("training").findOne({ id: id }); + if (doc) { + res.status(200).json(doc); } else { res.status(404).json({ message: 'Document not found' }); } diff --git a/src/pages/api/training/index.ts b/src/pages/api/training/index.ts index fe694e61..0d7e82fb 100644 --- a/src/pages/api/training/index.ts +++ b/src/pages/api/training/index.ts @@ -1,11 +1,10 @@ import { sessionOptions } from "@/lib/session"; import axios from "axios"; -import { app } from "@/firebase"; -import { collection, doc, getDoc, getDocs, getFirestore, query } from "firebase/firestore"; +import client from "@/lib/mongodb"; import { withIronSessionApiRoute } from "iron-session/next"; import { NextApiRequest, NextApiResponse } from "next"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -34,15 +33,8 @@ async function post(req: NextApiRequest, res: NextApiResponse) { async function get(req: NextApiRequest, res: NextApiResponse) { try { - const q = query(collection(db, "training")); - const snapshot = await getDocs(q); - - res.status(200).json( - snapshot.docs.map((doc) => ({ - id: doc.id, - ...doc.data(), - })) - ); + const snapshot = await db.collection("training").find({}).toArray(); + res.status(200).json(snapshot); } catch (error) { console.error('Error fetching data:', error); res.status(500).json({ message: 'An unexpected error occurred' }); diff --git a/src/pages/api/training/user/[user].ts b/src/pages/api/training/user/[user].ts index 1226e4c9..e3524623 100644 --- a/src/pages/api/training/user/[user].ts +++ b/src/pages/api/training/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,6 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { } const {user} = req.query; - const q = query(collection(db, "training"), where("user", "==", user)); - - const snapshot = await getDocs(q); - - res.status(200).json( - snapshot.docs.map((doc) => ({ - id: doc.id, - ...doc.data(), - })), - ); + const snapshot = await db.collection("training").find({ user: user }).toArray(); + res.status(200).json(snapshot); } \ No newline at end of file diff --git a/src/pages/api/training/walkthrough/index.ts b/src/pages/api/training/walkthrough/index.ts index 727df308..c2e3ac74 100644 --- a/src/pages/api/training/walkthrough/index.ts +++ b/src/pages/api/training/walkthrough/index.ts @@ -1,10 +1,9 @@ import { sessionOptions } from "@/lib/session"; -import { app } from "@/firebase"; -import { collection, doc, documentId, getDoc, getDocs, getFirestore, query, where } from "firebase/firestore"; +import client from "@/lib/mongodb"; import { withIronSessionApiRoute } from "iron-session/next"; import { NextApiRequest, NextApiResponse } from "next"; -const db = getFirestore(app); +const db = client.db(process.env.MONGODB_DB); export default withIronSessionApiRoute(handler, sessionOptions); @@ -25,18 +24,11 @@ async function get(req: NextApiRequest, res: NextApiResponse) { return res.status(400).json({ message: 'Invalid or missing ids!' }); } - const walkthroughCollection = collection(db, 'walkthrough'); + const docs = await db.collection('walkthrough').find({ + id: { $in: ids } + }).toArray(); - const q = query(walkthroughCollection, where(documentId(), 'in', ids)); - - const querySnapshot = await getDocs(q); - - const documents = querySnapshot.docs.map(doc => ({ - id: doc.id, - ...doc.data() - })); - - res.status(200).json(documents); + res.status(200).json(docs); } catch (error) { console.error('Error fetching data:', error); res.status(500).json({ message: 'An unexpected error occurred' });