146 lines
4.9 KiB
JavaScript
146 lines
4.9 KiB
JavaScript
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;
|