import Prisma from "@prisma/client"; const prisma = new Prisma.PrismaClient(); export async function getTimetable(req, res) { if (!req.query.class) { res.status(400).send({ success: false, error: "missing_parameter", message: "No class parameter provided", }); return; } const requestedClass = req.query.class.toLowerCase(); const timetable = await prisma.timetable.findFirst({ where: { class: requestedClass, }, orderBy: { updatedAt: "desc", }, }); if (!timetable) { res.status(400).send({ success: false, error: "no_timetable", message: "No timetable was found for this class", }); return; } res.send(timetable.data); } export async function getSubstitutions(req, res) { const requestedClass = (req.query.class || "").toLowerCase(); var from, to, date; if (req.query.from && req.query.to) { from = new Date(req.query.from).setUTCHours(0, 0, 0, 0); to = new Date(req.query.to).setUTCHours(0, 0, 0, 0); } else if (req.query.date) { date = new Date(req.query.date).setUTCHours(0, 0, 0, 0); } const prismaOptions = { where: { removed: false, }, orderBy: { lesson: "asc", }, }; if (requestedClass) { prismaOptions.where.class = { has: requestedClass }; } if (from && to) { prismaOptions.where.date = { gte: new Date(from), lte: new Date(to), }; } else if (date) { prismaOptions.where.date = new Date(date); } else { prismaOptions.where.date = { gte: new Date(new Date().setUTCHours(0, 0, 0, 0)), }; } const rawSubstitutions = await prisma.substitution.findMany(prismaOptions); const substitutions = rawSubstitutions.map((element) => { const substitution = { id: element.id, class: element.class, type: element.type, lesson: element.lesson, date: new Date(element.date).getTime(), notes: element.notes, change: {}, }; if (element.changedRoom) substitution.change.room = element.changedRoom; if (element.changedTeacher) substitution.change.teacher = element.changedTeacher; if (element.changedSubject) substitution.change.subject = element.changedSubject; return substitution; }); res.send(substitutions); } export async function getHistory(req, res) { const requestedClass = (req.query.class || "").toLowerCase(); var from, to, date; if (req.query.from && req.query.to) { from = new Date(req.query.from).setUTCHours(0, 0, 0, 0); to = new Date(req.query.to).setUTCHours(0, 0, 0, 0); } else if (req.query.date) { date = new Date(req.query.date).setUTCHours(0, 0, 0, 0); } const prismaOptions = { where: { substitution: {}, }, include: { substitution: true, }, orderBy: { createdAt: "desc", }, }; if (requestedClass) { prismaOptions.where.substitution.class = { has: requestedClass }; } if (from && to) { prismaOptions.where.substitution.date = { gte: new Date(from), lte: new Date(to), }; } else if (date) { prismaOptions.where.substitution.date = new Date(date); } else { prismaOptions.where.substitution.date = { gte: new Date(new Date().setUTCHours(0, 0, 0, 0)), }; } const rawChanges = await prisma.substitutionChange.findMany(prismaOptions); const changes = rawChanges.map((element) => { return { id: element.id, type: element.type, substitutionId: element.substitutionId, lesson: element.substitution.lesson, updatedAt: new Date(element.createdAt).getTime(), date: new Date(element.substitution.date).getTime(), change: element.changes, notes: element.notes, parseEventId: element.parseEventId, }; }); res.send(changes); } export async function getClasses(req, res) { const classes = await prisma.class.findMany({ select: { name: true, regex: false, }, orderBy: { name: "asc", }, }); const classList = classes.map((element) => element.name); res.send(classList); }