From 3ec886c31df8654c85525251c35c5303d6ff6248 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Tue, 27 Aug 2024 16:57:41 +0100 Subject: [PATCH] ENCOA-109: Keep the same balance after deleting a user --- src/pages/api/make_user.ts | 19 ++++++++++++++++++- src/utils/users.be.ts | 4 ++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/pages/api/make_user.ts b/src/pages/api/make_user.ts index a8ceab07..1b0fde1f 100644 --- a/src/pages/api/make_user.ts +++ b/src/pages/api/make_user.ts @@ -6,6 +6,7 @@ import {sessionOptions} from "@/lib/session"; import {v4} from "uuid"; import {CorporateUser, Group} from "@/interfaces/user"; import {createUserWithEmailAndPassword, getAuth} from "firebase/auth"; +import ShortUniqueId from "short-unique-id"; const DEFAULT_DESIRED_LEVELS = { reading: 9, @@ -73,7 +74,22 @@ async function post(req: NextApiRequest, res: NextApiResponse) { subscriptionExpirationDate: expiryDate || null, }; + const uid = new ShortUniqueId(); + const code = uid.randomUUID(6); + await setDoc(doc(db, "users", userId), user); + await setDoc(doc(db, "codes", code), { + code, + creator: maker.id, + expiryDate, + type, + creationDate: new Date(), + userId, + email: email.toLowerCase(), + name: req.body.name, + passport_id, + }); + if (type === "corporate") { const defaultTeachersGroup: Group = { admin: userId, @@ -110,6 +126,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) { if (!corporateSnapshot.empty) { const corporateUser = corporateSnapshot.docs[0].data() as CorporateUser; + await setDoc(doc(db, "codes", code), {creator: corporateUser.id}, {merge: true}); const q = query( collection(db, "groups"), @@ -124,7 +141,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) { const participants: string[] = doc.get("participants"); if (!participants.includes(userId)) { - updateDoc(doc.ref, { + await updateDoc(doc.ref, { participants: [...participants, userId], }); } diff --git a/src/utils/users.be.ts b/src/utils/users.be.ts index 334a5d8e..b50467fb 100644 --- a/src/utils/users.be.ts +++ b/src/utils/users.be.ts @@ -42,7 +42,7 @@ export async function getUserBalance(user: User) { const groups = await getGroupsForUser(user.id); const participants = uniq(groups.flatMap((x) => x.participants)); - if (user.type === "corporate") return participants.length + codes.length; + if (user.type === "corporate") return participants.length + codes.filter((x) => !participants.includes(x.userId || "")).length; const participantUsers = await Promise.all(participants.map(getUser)); const corporateUsers = participantUsers.filter((x) => x.type === "corporate") as CorporateUser[]; @@ -50,6 +50,6 @@ export async function getUserBalance(user: User) { return ( corporateUsers.reduce((acc, curr) => acc + curr.corporateInformation?.companyInformation?.userAmount || 0, 0) + corporateUsers.length + - codes.length + codes.filter((x) => !participants.includes(x.userId || "") && !corporateUsers.map((u) => u.id).includes(x.userId || "")).length ); }