v2: отдельный модуль schema.js — автосоздание таблиц при старте

This commit is contained in:
2026-06-12 17:04:25 +04:00
parent e91f1b0ff3
commit 522d2adfda
2 changed files with 56 additions and 1 deletions
+1 -1
View File
@@ -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": {
+55
View File
@@ -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 };