86 lines
4.0 KiB
JavaScript
86 lines
4.0 KiB
JavaScript
// ═══════════════════════════════════════════════════════════════════════════════
|
|
// V2 — Фронтенд пользователя (Express + EJS)
|
|
//
|
|
// ЭТО: Express-роутер, рендерит EJS-шаблоны.
|
|
// НЕ: работа с БД (только через crud/).
|
|
//
|
|
// ШАБЛОН: views/v2/user.ejs — данные: entries, limit, used, companies,
|
|
// activeClientId, user, includeDeleted, version.
|
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
const express = require('express');
|
|
const crud = require('../crud');
|
|
const config = require('../config');
|
|
|
|
function createUserRouter() {
|
|
const router = express.Router();
|
|
|
|
// ── GET / — список записей + форма ──────────────────────────────────
|
|
router.get('/', async (req, res) => {
|
|
try {
|
|
const clId = req.clientId;
|
|
const allCompanies = req.profiles.length > 0
|
|
? req.profiles
|
|
: [{ client_id: clId, company_name: req.companyName || clId }];
|
|
|
|
const includeDeleted = req.query.deleted === '1';
|
|
const { entries, used, limit } = await crud.list(clId, includeDeleted);
|
|
|
|
// Переключение компании
|
|
if (req.query.switchTo && allCompanies.find(c => c.client_id === req.query.switchTo)) {
|
|
req.session.user.activeClientId = req.query.switchTo;
|
|
return res.redirect('/v2/app');
|
|
}
|
|
|
|
res.render('v2/user', {
|
|
entries, limit, used,
|
|
companies: allCompanies,
|
|
activeClientId: clId,
|
|
user: req.user || {},
|
|
includeDeleted,
|
|
version: config.version,
|
|
canAdmin: req.canAdmin || false,
|
|
adminMode: req.adminMode || false,
|
|
});
|
|
} catch (e) {
|
|
res.status(500).send('<h2>Ошибка</h2><pre>' + e.message + '</pre><a href="/v2/app">Назад</a>');
|
|
}
|
|
});
|
|
|
|
// ── POST /add ───────────────────────────────────────────────────────
|
|
router.post('/add', async (req, res) => {
|
|
try {
|
|
const result = await crud.add(req.clientId, req.body.cidr || '', req.body.comment || '', req.email, req.impersonatedBy);
|
|
const msg = result.wasNormalized ? 'Добавлено (адрес нормализован)' : 'Добавлено';
|
|
res.redirect('/v2/app?msg=' + encodeURIComponent(msg));
|
|
} catch (e) {
|
|
res.redirect('/v2/app?error=' + encodeURIComponent(e.message));
|
|
}
|
|
});
|
|
|
|
// ── POST /edit/:id ──────────────────────────────────────────────────
|
|
router.post('/edit/:id', async (req, res) => {
|
|
try {
|
|
const result = await crud.edit(parseInt(req.params.id), req.clientId, req.body.cidr || '', req.body.comment || '', req.email, req.impersonatedBy);
|
|
const msg = result.wasNormalized ? 'Изменено (адрес нормализован)' : 'Изменено';
|
|
res.redirect('/v2/app?msg=' + encodeURIComponent(msg));
|
|
} catch (e) {
|
|
res.redirect('/v2/app?error=' + encodeURIComponent(e.message));
|
|
}
|
|
});
|
|
|
|
// ── POST /delete/:id ────────────────────────────────────────────────
|
|
router.post('/delete/:id', async (req, res) => {
|
|
try {
|
|
await crud.remove(parseInt(req.params.id), req.clientId, req.email, req.impersonatedBy);
|
|
res.redirect('/v2/app?msg=Удалено');
|
|
} catch (e) {
|
|
res.redirect('/v2/app?error=' + encodeURIComponent(e.message));
|
|
}
|
|
});
|
|
|
|
return router;
|
|
}
|
|
|
|
module.exports = { createUserRouter };
|