Updated the exams to work based on entities

This commit is contained in:
Tiago Ribeiro
2024-12-30 18:48:27 +00:00
parent f64b50df9e
commit 502cc64f99
3 changed files with 21 additions and 20 deletions

View File

@@ -9,6 +9,7 @@ import { Db, ObjectId } from "mongodb";
import client from "@/lib/mongodb";
import { MODULE_ARRAY } from "./moduleUtils";
import { mapBy } from ".";
import { getUser } from "./users.be";
const db = client.db(process.env.MONGODB_DB);
@@ -76,7 +77,7 @@ export const getExams = async (
})) as Exam[],
).filter((x) => !x.private);
let exams: Exam[] = await filterByOwners(shuffledPublicExams, userId);
let exams: Exam[] = await filterByEntities(shuffledPublicExams, userId);
exams = filterByVariant(exams, variant);
exams = filterByInstructorGender(exams, instructorGender);
exams = await filterByDifficulty(db, exams, module, userId);
@@ -109,16 +110,17 @@ const filterByVariant = (exams: Exam[], variant?: Variant) => {
return filtered.length > 0 ? filtered : exams;
};
const filterByOwners = async (exams: Exam[], userID?: string) => {
if (!userID) return exams.filter((x) => !x.owners || x.owners.length === 0);
const filterByEntities = async (exams: Exam[], userID?: string) => {
if (!userID) return exams.filter((x) => !x.entities || x.entities.length === 0);
const user = await getUser(userID)
return await Promise.all(
exams.filter(async (x) => {
if (!x.owners) return true;
if (x.owners.length === 0) return true;
if (x.owners.includes(userID)) return true;
if (!x.entities) return true;
if (x.entities.length === 0) return true;
const corporate = await getUserCorporate(userID);
return !corporate ? false : x.owners.includes(corporate.id);
return mapBy(user?.entities || [], 'id').some(e => x.entities!.includes(e))
}),
);
};