From 522d2adfda6e060407e1b24c33f279ce263864d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 12 Jun 2026 17:04:25 +0400 Subject: [PATCH] =?UTF-8?q?v2:=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20sch?= =?UTF-8?q?ema.js=20=E2=80=94=20=D0=B0=D0=B2=D1=82=D0=BE=D1=81=D0=BE=D0=B7?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8?= =?UTF-8?q?=D1=86=20=D0=BF=D1=80=D0=B8=20=D1=81=D1=82=D0=B0=D1=80=D1=82?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- v2/src/db/schema.js | 55 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 v2/src/db/schema.js diff --git a/package.json b/package.json index 06a8fc8..7917a35 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipwhitelist", - "version": "0.5.67", + "version": "0.5.68", "description": "IP WhiteList microservice for cloud provider", "main": "server.js", "scripts": { diff --git a/v2/src/db/schema.js b/v2/src/db/schema.js new file mode 100644 index 0000000..4eda247 --- /dev/null +++ b/v2/src/db/schema.js @@ -0,0 +1,55 @@ +// ═══════════════════════════════════════════════════════════════════════════════ +// V2 — автосоздание таблиц при старте +// Вызывается ОДИН раз: ensureSchema(pool) +// ═══════════════════════════════════════════════════════════════════════════════ + +async function ensureSchema(pool) { + await pool.query(` + CREATE TABLE IF NOT EXISTS v2_companies ( + id SERIAL PRIMARY KEY, + client_id VARCHAR(64) UNIQUE NOT NULL, + name VARCHAR(255), + custom_limit INTEGER DEFAULT NULL CHECK (custom_limit IS NULL OR custom_limit >= 0), + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + ); + + CREATE TABLE IF NOT EXISTS v2_entries ( + id SERIAL PRIMARY KEY, + company_id INTEGER NOT NULL REFERENCES v2_companies(id) ON DELETE RESTRICT, + value_cidr VARCHAR(18) NOT NULL CHECK (value_cidr LIKE '%/%'), + comment VARCHAR(255), + created_by VARCHAR(255) NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_by VARCHAR(255), + updated_at TIMESTAMPTZ, + deleted_by VARCHAR(255), + deleted_at TIMESTAMPTZ + ); + + CREATE UNIQUE INDEX IF NOT EXISTS uq_v2_entries_active_cidr + ON v2_entries(company_id, value_cidr) WHERE deleted_at IS NULL; + + CREATE INDEX IF NOT EXISTS idx_v2_entries_active + ON v2_entries(company_id, created_at DESC) WHERE deleted_at IS NULL; + + CREATE TABLE IF NOT EXISTS v2_audit ( + id SERIAL PRIMARY KEY, + user_email VARCHAR(255) NOT NULL, + company_id INTEGER NOT NULL, + action VARCHAR(32) NOT NULL CHECK (action IN ('CREATE','UPDATE','DELETE')), + old_value TEXT, + new_value TEXT, + entry_id INTEGER, + impersonated_by VARCHAR(255) DEFAULT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + ); + + CREATE INDEX IF NOT EXISTS idx_v2_audit_company_time + ON v2_audit(company_id, created_at DESC); + `); + + console.log('[v2:db] Schema ensured'); +} + +module.exports = { ensureSchema };