ENCOA-175: When a Corporate Create another Corporate, the created corporate should have access to the same students and teachers as the creator
This commit is contained in:
@@ -4,10 +4,12 @@ import {getFirestore, setDoc, doc, query, collection, where, getDocs, getDoc, de
|
|||||||
import {withIronSessionApiRoute} from "iron-session/next";
|
import {withIronSessionApiRoute} from "iron-session/next";
|
||||||
import {sessionOptions} from "@/lib/session";
|
import {sessionOptions} from "@/lib/session";
|
||||||
import {v4} from "uuid";
|
import {v4} from "uuid";
|
||||||
import {CorporateUser, Group} from "@/interfaces/user";
|
import {CorporateUser, Group, Type} from "@/interfaces/user";
|
||||||
import {createUserWithEmailAndPassword, getAuth} from "firebase/auth";
|
import {createUserWithEmailAndPassword, getAuth} from "firebase/auth";
|
||||||
import ShortUniqueId from "short-unique-id";
|
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 = {
|
const DEFAULT_DESIRED_LEVELS = {
|
||||||
reading: 9,
|
reading: 9,
|
||||||
@@ -28,6 +30,13 @@ const db = getFirestore(app);
|
|||||||
|
|
||||||
export default withIronSessionApiRoute(handler, sessionOptions);
|
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) {
|
async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
if (req.method === "POST") return post(req, res);
|
if (req.method === "POST") return post(req, res);
|
||||||
|
|
||||||
@@ -106,11 +115,14 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (type === "corporate") {
|
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 = {
|
const defaultTeachersGroup: Group = {
|
||||||
admin: userId,
|
admin: userId,
|
||||||
id: v4(),
|
id: v4(),
|
||||||
name: "Teachers",
|
name: "Teachers",
|
||||||
participants: [],
|
participants: teachers,
|
||||||
disableEditing: true,
|
disableEditing: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -118,21 +130,12 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
|
|||||||
admin: userId,
|
admin: userId,
|
||||||
id: v4(),
|
id: v4(),
|
||||||
name: "Students",
|
name: "Students",
|
||||||
participants: [],
|
participants: students,
|
||||||
disableEditing: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
const defaultCorporateGroup: Group = {
|
|
||||||
admin: userId,
|
|
||||||
id: v4(),
|
|
||||||
name: "Corporate",
|
|
||||||
participants: [],
|
|
||||||
disableEditing: true,
|
disableEditing: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
await setDoc(doc(db, "groups", defaultTeachersGroup.id), defaultTeachersGroup);
|
await setDoc(doc(db, "groups", defaultTeachersGroup.id), defaultTeachersGroup);
|
||||||
await setDoc(doc(db, "groups", defaultStudentsGroup.id), defaultStudentsGroup);
|
await setDoc(doc(db, "groups", defaultStudentsGroup.id), defaultStudentsGroup);
|
||||||
await setDoc(doc(db, "groups", defaultCorporateGroup.id), defaultCorporateGroup);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!!corporate) {
|
if (!!corporate) {
|
||||||
|
|||||||
Reference in New Issue
Block a user