Continued migrating more and more files

This commit is contained in:
Tiago Ribeiro
2024-09-07 18:29:20 +01:00
parent bb8dca69cf
commit 6251f8f4db
16 changed files with 254 additions and 356 deletions

View File

@@ -7,9 +7,11 @@ import {getAuth} from "firebase-admin/auth";
import {withIronSessionApiRoute} from "iron-session/next";
import {NextApiRequest, NextApiResponse} from "next";
import {getPermissions, getPermissionDocs} from "@/utils/permissions.be";
import client from "@/lib/mongodb";
import {getGroupsForUser, getParticipantGroups} from "@/utils/groups.be";
const db = getFirestore(app);
const auth = getAuth(adminApp);
const db = client.db(process.env.MONGODB_DB);
export default withIronSessionApiRoute(user, sessionOptions);
@@ -28,36 +30,26 @@ async function del(req: NextApiRequest, res: NextApiResponse) {
const {id} = req.query as {id: string};
const docUser = await getDoc(doc(db, "users", req.session.user.id));
if (!docUser.exists()) {
const user = await db.collection("users").findOne<User>({id: req.session.user.id});
if (!user) {
res.status(401).json({ok: false});
return;
}
const user = docUser.data() as User;
const docTargetUser = await getDoc(doc(db, "users", id));
if (!docTargetUser.exists()) {
const targetUser = await db.collection("users").findOne<User>({id});
if (!targetUser) {
res.status(404).json({ok: false});
return;
}
const targetUser = {...docTargetUser.data(), id: docTargetUser.id} as User;
if (user.type === "corporate" && (targetUser.type === "student" || targetUser.type === "teacher")) {
const userParticipantGroup = await getDocs(query(collection(db, "groups"), where("participants", "array-contains", id)));
const groups = await getGroupsForUser(user.id, targetUser.id);
await Promise.all([
...userParticipantGroup.docs
.filter((x) => (x.data() as Group).admin === user.id)
...groups
.filter((x) => x.admin === user.id)
.map(
async (x) =>
await setDoc(
x.ref,
{
participants: x.data().participants.filter((y: string) => y !== id),
},
{merge: true},
),
await db.collection("groups").updateOne({id: x.id}, {$set: {participants: x.participants.filter((y: string) => y !== id)}}),
),
]);
@@ -65,41 +57,30 @@ async function del(req: NextApiRequest, res: NextApiResponse) {
}
await auth.deleteUser(id);
await deleteDoc(doc(db, "users", id));
const userCodeDocs = await getDocs(query(collection(db, "codes"), where("userId", "==", id)));
const userParticipantGroup = await getDocs(query(collection(db, "groups"), where("participants", "array-contains", id)));
const userGroupAdminDocs = await getDocs(query(collection(db, "groups"), where("admin", "==", id)));
const userStatsDocs = await getDocs(query(collection(db, "stats"), where("user", "==", id)));
await db.collection("users").deleteOne({id: targetUser.id});
await db.collection("codes").deleteMany({userId: targetUser.id});
await db.collection("groups").deleteMany({admin: targetUser.id});
await db.collection("stats").deleteMany({user: targetUser.id});
await Promise.all([
...userCodeDocs.docs.map(async (x) => await deleteDoc(x.ref)),
...userGroupAdminDocs.docs.map(async (x) => await deleteDoc(x.ref)),
...userStatsDocs.docs.map(async (x) => await deleteDoc(x.ref)),
...userParticipantGroup.docs.map(
async (x) =>
await setDoc(
x.ref,
{
participants: x.data().participants.filter((y: string) => y !== id),
},
{merge: true},
),
const groups = await getParticipantGroups(targetUser.id);
await Promise.all(
groups.map(
async (x) => await db.collection("groups").updateOne({id: x.id}, {$set: {participants: x.participants.filter((y: string) => y !== id)}}),
),
]);
);
res.json({ok: true});
}
async function get(req: NextApiRequest, res: NextApiResponse) {
if (req.session.user) {
const docUser = await getDoc(doc(db, "users", req.session.user.id));
if (!docUser.exists()) {
const user = await db.collection("users").findOne<User>({id: req.session.user.id});
if (!user) {
res.status(401).json(undefined);
return;
}
const user = docUser.data() as User;
await setDoc(docUser.ref, {lastLogin: new Date().toISOString()}, {merge: true});
await db.collection("users").updateOne({id: user.id}, {$set: {lastLogin: new Date().toISOString()}});
req.session.user = {
...user,