-- Миграция: создание таблиц 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 'Лог всех анализов случаев для аудита и отладки';