import { getGraduationDb } from "./database-ENV.ts"; import { Graduation, GraduationChange } from "./graduation-common.ts"; import type { Student } from "./student-common.ts"; const _graduationChangesPromise = (async function () { let universalChanges = new Map(); let studentChanges = new Map(); const db = await getGraduationDb(); let entries = await db.fetchEntries(); for (const e of entries) { const gradChange = GraduationChange.fromDBEntry(e); const changes = gradChange.studentId > 0 ? studentChanges : universalChanges; if (!changes.has(gradChange.studentId)) { changes.set(gradChange.studentId, [gradChange]); } else { changes.get(gradChange.studentId).push(gradChange); } } return [studentChanges, universalChanges]; })(); export async function fetchGraduationChanges() { return await _graduationChangesPromise; } const graduations: Map = new Map(); export async function fetchGraduation(student: Student): Promise { if (!graduations.has(student.id)) { const [studentChanges, universalChanges] = await _graduationChangesPromise; const specificChanges = studentChanges.get(student.id) ?? []; const graduation = Graduation.from( student, specificChanges.concat(Array.from(universalChanges.values()).flat()), ); graduations.set(student.id, graduation); return graduation; } return graduations.get(student.id)!; } export { LEVEL_NAMES, GraduationChange, Graduation, submitGraduationChange, deleteGraduationChange, } from "./graduation-common.ts";