42 lines
2.0 KiB
SQL
42 lines
2.0 KiB
SQL
-- Миграция: создание таблиц users и analysis_log
|
|
-- Дата: 2026-05-04
|
|
|
|
-- Таблица пользователей для аутентификации
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
username VARCHAR(100) UNIQUE NOT NULL,
|
|
email VARCHAR(255) UNIQUE NOT NULL,
|
|
hashed_password VARCHAR(255) NOT NULL,
|
|
full_name VARCHAR(255),
|
|
role VARCHAR(20) NOT NULL DEFAULT 'operator', -- operator/field/admin
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
last_login TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_users_username ON users (username);
|
|
CREATE INDEX IF NOT EXISTS idx_users_email ON users (email);
|
|
CREATE INDEX IF NOT EXISTS idx_users_role ON users (role);
|
|
|
|
-- Таблица логов анализа
|
|
CREATE TABLE IF NOT EXISTS analysis_log (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
case_id UUID NOT NULL REFERENCES cases(id) ON DELETE CASCADE,
|
|
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
analysis_type VARCHAR(50) NOT NULL, -- scoring/claude/geo/psychotype
|
|
input_data JSONB,
|
|
output_data JSONB,
|
|
execution_time FLOAT, -- в секундах
|
|
status VARCHAR(20) DEFAULT 'success', -- success/error/partial
|
|
error_message TEXT,
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_analysis_log_case_id ON analysis_log (case_id);
|
|
CREATE INDEX IF NOT EXISTS idx_analysis_log_user_id ON analysis_log (user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_analysis_log_created_at ON analysis_log (created_at);
|
|
CREATE INDEX IF NOT EXISTS idx_analysis_log_type ON analysis_log (analysis_type);
|
|
|
|
COMMENT ON TABLE users IS 'Пользователи системы с ролями operator/field/admin';
|
|
COMMENT ON TABLE analysis_log IS 'Лог всех анализов случаев для аудита и отладки';
|