153 lines
3.0 KiB
JavaScript
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);
|
|
}
|
|
}
|