trading-platform-database-v2/ddl/schemas/audit/tables/01-audit_logs.sql
rckrdmrd 45e77e9a9c feat: Initial commit - Database schemas and scripts
DDL schemas for Trading Platform:
- User management
- Authentication
- Payments
- Education
- ML predictions
- Trading data

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 04:30:23 -06:00

55 lines
2.1 KiB
SQL

-- ============================================================================
-- AUDIT SCHEMA - Tabla: audit_logs
-- ============================================================================
-- Tabla principal de auditoría general
-- ============================================================================
CREATE TABLE IF NOT EXISTS audit.audit_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Información del evento
event_type audit.audit_event_type NOT NULL,
event_status audit.event_status NOT NULL DEFAULT 'success',
severity audit.event_severity NOT NULL DEFAULT 'info',
-- Quién realizó la acción
user_id UUID REFERENCES auth.users(id) ON DELETE SET NULL,
session_id UUID,
ip_address INET,
user_agent TEXT,
-- Qué se modificó
resource_type audit.resource_type NOT NULL,
resource_id UUID,
resource_name VARCHAR(255),
-- Detalles del cambio
action VARCHAR(100) NOT NULL,
description TEXT,
old_values JSONB,
new_values JSONB,
metadata JSONB DEFAULT '{}',
-- Contexto
request_id UUID,
correlation_id UUID,
service_name VARCHAR(50),
-- Timestamps
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Índices para consultas frecuentes
CREATE INDEX idx_audit_logs_user_id ON audit.audit_logs(user_id);
CREATE INDEX idx_audit_logs_resource ON audit.audit_logs(resource_type, resource_id);
CREATE INDEX idx_audit_logs_event_type ON audit.audit_logs(event_type);
CREATE INDEX idx_audit_logs_created_at ON audit.audit_logs(created_at DESC);
CREATE INDEX idx_audit_logs_severity ON audit.audit_logs(severity) WHERE severity IN ('error', 'critical');
CREATE INDEX idx_audit_logs_correlation ON audit.audit_logs(correlation_id) WHERE correlation_id IS NOT NULL;
-- Índice GIN para búsqueda en JSONB
CREATE INDEX idx_audit_logs_metadata ON audit.audit_logs USING GIN (metadata);
COMMENT ON TABLE audit.audit_logs IS 'Log general de auditoría para todas las acciones del sistema';
COMMENT ON COLUMN audit.audit_logs.correlation_id IS 'ID para correlacionar eventos relacionados en una misma operación';