ENCOA-130: Add owners to exams

This commit is contained in:
Tiago Ribeiro
2024-09-03 16:31:29 +01:00
parent 0f38e01283
commit 7cd18b07bb
6 changed files with 113 additions and 13 deletions

View File

@@ -3,6 +3,8 @@ import {shuffle} from "lodash";
import {Difficulty, Exam, InstructorGender, SpeakingExam, Variant, WritingExam} from "@/interfaces/exam";
import {DeveloperUser, Stat, StudentUser, User} from "@/interfaces/user";
import {Module} from "@/interfaces";
import {getCorporateUser} from "@/resources/user";
import {getUserCorporate} from "./groups.be";
export const getExams = async (
db: Firestore,
@@ -28,7 +30,8 @@ export const getExams = async (
})),
) as Exam[];
let exams: Exam[] = filterByVariant(allExams, variant);
let exams: Exam[] = await filterByOwners(allExams, userId);
exams = filterByVariant(exams, variant);
exams = filterByInstructorGender(exams, instructorGender);
exams = await filterByDifficulty(db, exams, module, userId);
exams = await filterByPreference(db, exams, module, userId);
@@ -60,6 +63,20 @@ 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);
return 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;
const corporate = await getUserCorporate(userID);
return !corporate ? false : x.owners.includes(corporate.id);
}),
);
};
const filterByDifficulty = async (db: Firestore, exams: Exam[], module: Module, userID?: string) => {
if (!userID) return exams;
const userRef = await getDoc(doc(db, "users", userID));