diff --git a/src/pages/api/make_user.ts b/src/pages/api/make_user.ts index 062a543d..a1956f74 100644 --- a/src/pages/api/make_user.ts +++ b/src/pages/api/make_user.ts @@ -4,10 +4,12 @@ import {getFirestore, setDoc, doc, query, collection, where, getDocs, getDoc, de import {withIronSessionApiRoute} from "iron-session/next"; import {sessionOptions} from "@/lib/session"; import {v4} from "uuid"; -import {CorporateUser, Group} from "@/interfaces/user"; +import {CorporateUser, Group, Type} from "@/interfaces/user"; import {createUserWithEmailAndPassword, getAuth} from "firebase/auth"; import ShortUniqueId from "short-unique-id"; -import {getUserCorporate} from "@/utils/groups.be"; +import {getUserCorporate, getUserGroups} from "@/utils/groups.be"; +import {uniq} from "lodash"; +import {getUser} from "@/utils/users.be"; const DEFAULT_DESIRED_LEVELS = { reading: 9, @@ -28,6 +30,13 @@ const db = getFirestore(app); export default withIronSessionApiRoute(handler, sessionOptions); +const getUsersOfType = async (admin: string, type: Type) => { + const groups = await getUserGroups(admin); + const users = await Promise.all(uniq(groups.flatMap((x) => x.participants)).map(getUser)); + + return users.filter((x) => x.type === type).map((x) => x.id); +}; + async function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method === "POST") return post(req, res); @@ -106,11 +115,14 @@ async function post(req: NextApiRequest, res: NextApiResponse) { }); if (type === "corporate") { + const students = maker.type === "corporate" ? await getUsersOfType(maker.id, "student") : []; + const teachers = maker.type === "corporate" ? await getUsersOfType(maker.id, "teacher") : []; + const defaultTeachersGroup: Group = { admin: userId, id: v4(), name: "Teachers", - participants: [], + participants: teachers, disableEditing: true, }; @@ -118,21 +130,12 @@ async function post(req: NextApiRequest, res: NextApiResponse) { admin: userId, id: v4(), name: "Students", - participants: [], - disableEditing: true, - }; - - const defaultCorporateGroup: Group = { - admin: userId, - id: v4(), - name: "Corporate", - participants: [], + participants: students, disableEditing: true, }; await setDoc(doc(db, "groups", defaultTeachersGroup.id), defaultTeachersGroup); await setDoc(doc(db, "groups", defaultStudentsGroup.id), defaultStudentsGroup); - await setDoc(doc(db, "groups", defaultCorporateGroup.id), defaultCorporateGroup); } if (!!corporate) {