import { DBAccess } from "../db/index.js"; import { Router } from "express"; const router = Router(); router.use(function (req, res, next) { if (req.session.isAdmin) { next(); } else { throw new Error("Вы не являетесь администраторром"); } }); router.get("/", async function (req, res, next) { res.render("admin/index", { title: "Администратор" }); }); router.get("/voters", async function (req, res, next) { const voters = await DBAccess.getVoters(); res.json(voters); }); router.get("/voters/:id/promote/:vgid", async function (req, res, next) { const isAcceptJson = req.accepts("json"); const { id, vgid } = req.params; try { if (id == req.session.userid) { throw new Error("Нельзя изменить свою группу"); } await DBAccess.promoteVoter(id, vgid, req.session.vgroup_id == vgid); if (isAcceptJson) { res.json({ status: "ok" }); } else { res.redirect("/admin"); } } catch (e) { if (isAcceptJson) { res.json({ status: "error", error: e.message }); } else { res.render("admin/index", { title: "Администратор", flashes: ["Ошибка изменения группы", e.message] }); } } }); router.post("/voters/create", async function (req, res, next) { const { login, password, full_name } = req.body; try { await DBAccess.createVoter(login, password, full_name, false); res.redirect("/admin"); } catch (e) { res.render("admin/index", { title: "Администратор", flashes: ["Ошибка создания пользователя", e.message] }); } }); router.get("/voters/:id/delete", async function (req, res, next) { const isAcceptJson = req.accepts("json"); const { id } = req.params; try { if (id == req.session.userid) { throw new Error("Нельзя удалить самого себя"); } await DBAccess.deleteVoter(id); if (isAcceptJson) { res.json({ status: "ok" }); } else { res.redirect("/admin"); } } catch (e) { if (isAcceptJson) { res.json({ status: "error", error: e.message }); } else { res.render("admin/index", { title: "Администратор", flashes: ["Ошибка удаления пользователя", e.message] }); } } }); router.get("/vgroups", async function (req, res, next) { const vgroups = await DBAccess.getVgroups(); res.json(vgroups); }); router.post("/vgroups/create", async function (req, res, next) { const { name, description } = req.body; if (name.length < 3) { res.render("admin/index", { title: "Администратор", flashes: ["Минимальная длина названия группы - три символа"] }); } else { const vgroup = await DBAccess.createVgroup(name, description || ""); if (vgroup) { res.redirect("/admin"); } else { res.render("admin/index", { title: "Администратор", flashes: ["Ошибка создания группы"] }); } } }); router.get("/vgroups/:id/delete", async function (req, res, next) { const isAcceptJson = req.accepts("json"); const { id } = req.params; try { if (id == req.session.vgroup_id) { throw new Error("Нельзя удалить свою группу"); } await DBAccess.deleteVgroup(id); if (isAcceptJson) { res.json({ status: "ok" }); } else { res.redirect("/admin"); } } catch (e) { if (isAcceptJson) { res.json({ status: "error", error: e.message }); } else { res.render("admin/index", { title: "Администратор", flashes: ["Ошибка удаления группы", e.message] }); } } }); router.get("/votes", async function (req, res, next) { const votes = await DBAccess.getVotes(); res.json(votes); }); router.get("/votes/groupped", async function (req, res, next) { const grouppedVotes = await DBAccess.getGrouppedVotes(); res.json(grouppedVotes); }); router.get("/votes/:id/delete", async function (req, res, next) { const isAcceptJson = req.accepts("json"); const { id } = req.params; try { await DBAccess.deleteVote(id); if (isAcceptJson) { res.json({ status: "ok" }); } else { res.redirect("/admin"); } } catch (e) { if (isAcceptJson) { res.json({ status: "error", error: e.message }); } else { res.render("admin/index", { title: "Администратор", flashes: ["Ошибка удаления голоса", e.message] }); } } }); export default router;