// ═══════════════════════════════════════════════════════════════════════════════ // V2 — Админка (Express + EJS) // // ЭТО: Express-роутер для админа, рендерит EJS-шаблоны. // НЕ: доступно обычным юзерам (middleware: req.isAdmin). // // ШАБЛОНЫ: // views/admin.ejs — дашборд (companies, user, version) // views/admin-audit.ejs — аудит (audit, company, version) // views/admin-entries.ejs — записи (entries, company, used, limit, ...) // ═══════════════════════════════════════════════════════════════════════════════ const express = require('express'); const q = require('../db/queries'); const crud = require('../crud'); const config = require('../config'); function createAdminRouter() { const router = express.Router(); router.use((req, res, next) => { if (!req.isAdmin) return res.redirect('/app'); next(); }); // ── GET / — дашборд ───────────────────────────────────────────────── router.get('/', async (req, res) => { try { const companies = await q.getAllCompanies(); res.render('v2/admin', { companies, user: req.user || {}, version: config.version }); } catch (e) { res.status(500).send('

Ошибка

' + e.message + '
'); } }); // ── GET /audit ────────────────────────────────────────────────────── router.get('/audit', async (req, res) => { try { const companyId = req.query.companyId ? parseInt(req.query.companyId) : null; const audit = await q.getAudit(companyId); const company = companyId ? await q.getCompanyById(companyId) : null; res.render('v2/admin-audit', { audit, company, version: config.version }); } catch (e) { res.status(500).send('

Ошибка

' + e.message + '
'); } }); // ── POST /limit ───────────────────────────────────────────────────── router.post('/limit', async (req, res) => { try { const companyId = parseInt(req.body.companyId); const newLimit = parseInt(req.body.limit); if (!companyId || !newLimit || newLimit < 1) throw new Error('Неверные параметры'); await q.setLimit(companyId, newLimit); res.redirect('/admin?msg=' + encodeURIComponent('Лимит установлен: ' + newLimit)); } catch (e) { res.redirect('/admin?error=' + encodeURIComponent(e.message)); } }); // ── GET /entries ──────────────────────────────────────────────────── router.get('/entries', async (req, res) => { try { const companyId = parseInt(req.query.companyId); const company = companyId ? await q.getCompanyById(companyId) : null; if (!company) return res.redirect('/admin'); const includeDeleted = req.query.deleted === '1'; const { entries, used, limit } = await crud.list(company.client_id, includeDeleted); res.render('v2/admin-entries', { entries, company, used, limit, includeDeleted, version: config.version }); } catch (e) { res.status(500).send('

Ошибка

' + e.message + '
'); } }); return router; } module.exports = { createAdminRouter };