71 lines
1.9 KiB
JavaScript
71 lines
1.9 KiB
JavaScript
import { DBAccess } from '../db/index.js';
|
|
import { Router } from 'express';
|
|
const router = Router();
|
|
|
|
router.use(function (req, res, next) {
|
|
console.dir(req.session);
|
|
if (req.session.login) {
|
|
next();
|
|
} else {
|
|
throw new Error("Необходима авторизация");
|
|
}
|
|
});
|
|
|
|
router.get('/', function (req, res, next) {
|
|
res.render("userspace/index", {
|
|
title: "Голосование", user: {
|
|
login: req.session.login,
|
|
full_name: req.session.full_name,
|
|
vgroup_id: parseInt(req.session.vgroup_id),
|
|
}
|
|
});
|
|
});
|
|
|
|
router.post("/vote", async function (req, res, next) {
|
|
const bData = req.body || [];
|
|
try {
|
|
const userVotedTihsMonth = await DBAccess.didUserBotedThisMonth(req.session.userid);
|
|
if (userVotedTihsMonth) {
|
|
throw new Error("Вы уже голосовали в этом месяце");
|
|
}
|
|
|
|
if (bData.length === 0) {
|
|
throw new Error("Нет данных для голосования");
|
|
} else {
|
|
const data = (req.body || []).reduce((acc, item) => {
|
|
acc[item.dbmap] = item.value;
|
|
return acc;
|
|
}, {});
|
|
|
|
data.voter_id = parseInt(req.session.userid);
|
|
const vote = DBAccess.createVote(data);
|
|
if (vote) {
|
|
res.json({ status: "ok" });
|
|
} else {
|
|
throw new Error("Ошибка голосования");
|
|
}
|
|
}
|
|
} catch (e) {
|
|
res.json({ status: "error", message: e.message });
|
|
}
|
|
});
|
|
|
|
router.get("/votes", async function (req, res, next) {
|
|
const userVotes = await DBAccess.getVotesByVoterId(parseInt(req.session.userid));
|
|
res.render("userspace/votes", {
|
|
title: "История",
|
|
user: {
|
|
login: req.session.login,
|
|
full_name: req.session.full_name,
|
|
vgroup_id: parseInt(req.session.vgroup_id),
|
|
},
|
|
votes: userVotes.map(v => {
|
|
return {
|
|
...v,
|
|
date: new Date(v.vote_date).toLocaleString("ru-RU"),
|
|
}
|
|
})
|
|
});
|
|
});
|
|
|
|
export default router;
|