ENCOA-130: Add owners to exams
This commit is contained in:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user