From fc5aa7ca090f21ca91f61d3bf58db59ff1c3cec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 1 Jul 2026 18:39:49 +0400 Subject: [PATCH] =?UTF-8?q?fix(audit):=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BE=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D0=BE=20=D0=B4=D0=B0=D1=82=D0=B5=20?= =?UTF-8?q?=E2=80=94=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8E=20=D0=92=D0=A1=D0=95=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - getAudit(): days=null → без фильтра WHERE по дате - days передаётся только если явно выбран фильтр 30/90/365 - admin-audit.ejs: кнопка «Всё» (активна по умолчанию), заголовок «(всё время)» v0.1.9 → v0.1.10 --- package.json | 2 +- v2/src/admin/index.js | 3 ++- v2/src/config/index.js | 2 +- v2/src/db/queries.js | 14 ++++++++------ views/v2/admin-audit.ejs | 5 ++++- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index f6f8c12..7640615 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipwhitelist", - "version": "0.1.9", + "version": "0.1.10", "description": "IP WhiteList microservice for cloud provider", "main": "server.js", "scripts": { diff --git a/v2/src/admin/index.js b/v2/src/admin/index.js index 27c6329..9176d5b 100644 --- a/v2/src/admin/index.js +++ b/v2/src/admin/index.js @@ -43,7 +43,8 @@ function createAdminRouter({ generateCsrfToken } = {}) { router.get('/audit', async (req, res) => { try { const companyId = req.query.companyId ? parseInt(req.query.companyId) : null; - const days = Math.min(Math.max(parseInt(req.query.days) || 365, 1), 365); + // days=null → все записи (без фильтра по дате) + const days = req.query.days ? Math.min(Math.max(parseInt(req.query.days), 1), 365) : null; const page = Math.max(parseInt(req.query.page) || 1, 1); const perPage = 100; const result = await q.getAudit({ companyId, days, page, limit: perPage }); diff --git a/v2/src/config/index.js b/v2/src/config/index.js index 62e8183..47b3f14 100644 --- a/v2/src/config/index.js +++ b/v2/src/config/index.js @@ -8,7 +8,7 @@ // ═══════════════════════════════════════════════════════════════════════════════ module.exports = { - version: '0.1.9', + version: '0.1.10', // ── IAM ────────────────────────────────────────────────────────────────── iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user', diff --git a/v2/src/db/queries.js b/v2/src/db/queries.js index dabc32c..05c4d1e 100644 --- a/v2/src/db/queries.js +++ b/v2/src/db/queries.js @@ -266,15 +266,15 @@ async function logAudit(userEmail, companyId, action, oldValue, newValue, entryI } /** - * Журнал операций с фильтром по дате и пагинацией. + * Журнал операций с пагинацией и опциональным фильтром по дате. * @param {Object} opts * @param {number|null} opts.companyId — фильтр по компании (null = все) - * @param {number} opts.days — глубина в днях (по умолчанию 365) + * @param {number|null} opts.days — глубина в днях (null = без ограничения) * @param {number} opts.page — страница (с 1) * @param {number} opts.limit — записей на странице * @returns {{ rows: Array, total: number }} */ -async function getAudit({ companyId = null, days = 365, page = 1, limit = 100 } = {}) { +async function getAudit({ companyId = null, days = null, page = 1, limit = 100 } = {}) { const offset = (page - 1) * limit; const params = []; @@ -283,9 +283,11 @@ async function getAudit({ companyId = null, days = 365, page = 1, limit = 100 } where += ' WHERE a.company_id = $' + (params.length + 1); params.push(companyId); } - const dayParam = '$' + (params.length + 1); - where += (where ? ' AND' : ' WHERE') + ' a.created_at > NOW() - (' + dayParam + ' || \' days\')::INTERVAL'; - params.push(String(days)); + if (days) { + const dayParam = '$' + (params.length + 1); + where += (where ? ' AND' : ' WHERE') + ' a.created_at > NOW() - (' + dayParam + ' || \' days\')::INTERVAL'; + params.push(String(days)); + } const limitIdx = params.length + 1; const offsetIdx = params.length + 2; diff --git a/views/v2/admin-audit.ejs b/views/v2/admin-audit.ejs index 5e44e67..0472de0 100644 --- a/views/v2/admin-audit.ejs +++ b/views/v2/admin-audit.ejs @@ -76,9 +76,12 @@
Журнал операций - (<%= total %> записей за <%= days %> дн.) + (<%= total %> записей<%= days ? ' за ' + days + ' дн.' : ' (всё время)' %>) + Всё <% [30, 90, 365].forEach(function(d) { %>