Files
Timetable-V2/server/api/admin.js
2023-08-25 14:42:38 +02:00

153 lines
3.0 KiB
JavaScript

import Prisma from "@prisma/client";
const prisma = new Prisma.PrismaClient();
export function registerAdmin(app) {
app.get("/api/admin/timetable", listTimetables);
app.post("/api/admin/timetable", createTimetable);
app.put("/api/admin/timetable", editTimetable);
app.delete("/api/admin/timetable", deleteTimetable);
app.get("/api/admin/key", listKeys);
app.post("/api/admin/key", createKey);
app.put("/api/admin/key", editKey);
app.delete("/api/admin/key", deleteKey);
}
function sendMissingArguments(res) {
res.status(400).send({
success: false,
error: "missing_arguments",
});
}
async function listTimetables(_, res) {
res.send(
await prisma.timetable.findMany({
select: {
id: true,
title: true,
class: true,
source: true,
trusted: true,
},
}),
);
}
async function createTimetable(req, res) {
let data = req.body;
if (!data.title || !data.data || !data.class) {
sendMissingArguments(res);
return;
}
const timetable = await prisma.timetable.create({
data: req.body,
});
res.status(201).send(timetable);
}
async function editTimetable(req, res) {
let id = parseInt(req.query.id);
if (!id) {
sendMissingArguments(res);
return;
}
try {
const timetable = await prisma.timetable.update({
where: {
id,
},
data: req.body,
});
res.status(201).send(timetable);
} catch (e) {
res.status(500).send(e);
}
}
async function deleteTimetable(req, res) {
if (!req.query.id) {
sendMissingArguments(res);
return;
}
try {
await prisma.timetable.delete({
where: {
id: parseInt(req.query.id),
},
});
res.status(200).send();
} catch (e) {
res.status(500).send(e);
}
}
async function listKeys(_, res) {
res.send(await prisma.key.findMany());
}
async function createKey(req, res) {
let data = req.body;
if (!data.key) {
sendMissingArguments(res);
return;
}
const existingKey = await prisma.key.findUnique({
where: {
key: data.key,
},
});
if (existingKey) {
res.status(400).send({
success: false,
error: "key_already_exists",
});
return;
}
const key = await prisma.key.create({
data: {
key: data.key,
permissions: data.permissions || [],
validUntil: data.validUntil,
notes: data.notes,
},
});
res.status(201).send(key);
}
async function editKey(req, res) {
if (!req.query.id) {
sendMissingArguments(res);
return;
}
try {
const timetable = await prisma.key.update({
where: {
key: req.query.id,
},
data: req.body,
});
res.status(201).send(timetable);
} catch (e) {
res.status(500).send(e);
}
}
async function deleteKey(req, res) {
if (!req.query.id) {
sendMissingArguments(res);
return;
}
try {
await prisma.key.delete({
where: {
key: req.query.id,
},
});
res.status(200).send();
} catch (e) {
res.status(500).send(e);
}
}