- Nueva estructura de carpetas según Skynet v7 - Añadidos schemas SQL completos - Documentación de entidades, componentes e integraciones - Modelo de seguridad actualizado - Infraestructura y operaciones reorganizadas
51 lines
2.1 KiB
SQL
51 lines
2.1 KiB
SQL
-- Inicialización de la base de datos para CLARA
|
|
-- Servicio inmutable de log de entrada
|
|
|
|
-- Tabla principal: clara_log
|
|
CREATE TABLE IF NOT EXISTS clara_log (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
h_instancia VARCHAR(64) NOT NULL,
|
|
h_entrada VARCHAR(64) NOT NULL,
|
|
contenedor JSONB NOT NULL,
|
|
r2_paths JSONB,
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
);
|
|
|
|
-- Índices para búsqueda eficiente
|
|
CREATE INDEX IF NOT EXISTS idx_clara_instancia ON clara_log(h_instancia);
|
|
CREATE INDEX IF NOT EXISTS idx_clara_entrada ON clara_log(h_entrada);
|
|
CREATE INDEX IF NOT EXISTS idx_clara_created ON clara_log(created_at DESC);
|
|
|
|
-- Índice para buscar por estado del contenedor
|
|
CREATE INDEX IF NOT EXISTS idx_clara_estado ON clara_log((contenedor->'estado'->>'actual'));
|
|
|
|
-- Índice para buscar por timestamp de captura
|
|
CREATE INDEX IF NOT EXISTS idx_clara_timestamp ON clara_log((contenedor->'origen'->>'timestamp_captura'));
|
|
|
|
-- Índice compuesto para búsquedas frecuentes
|
|
CREATE INDEX IF NOT EXISTS idx_clara_inst_entrada ON clara_log(h_instancia, h_entrada);
|
|
|
|
-- Vista para consultas comunes
|
|
CREATE OR REPLACE VIEW clara_summary AS
|
|
SELECT
|
|
id,
|
|
h_instancia,
|
|
h_entrada,
|
|
contenedor->>'id' as contenedor_id,
|
|
contenedor->'origen'->>'timestamp_captura' as timestamp_captura,
|
|
contenedor->'archivo'->>'tipo' as tipo_archivo,
|
|
contenedor->'archivo'->>'categoria' as categoria,
|
|
contenedor->'estado'->>'actual' as estado_actual,
|
|
jsonb_array_length(COALESCE(contenedor->'tags', '[]'::jsonb)) as num_tags,
|
|
created_at
|
|
FROM clara_log
|
|
ORDER BY id DESC;
|
|
|
|
-- Comentarios para documentación
|
|
COMMENT ON TABLE clara_log IS 'Log inmutable de contenedores recibidos de PACKET';
|
|
COMMENT ON COLUMN clara_log.h_instancia IS 'Hash de identificación de la instancia DECK';
|
|
COMMENT ON COLUMN clara_log.h_entrada IS 'Hash del archivo (sha256)';
|
|
COMMENT ON COLUMN clara_log.contenedor IS 'Contenedor completo según esquema de contratos-comunes';
|
|
COMMENT ON COLUMN clara_log.r2_paths IS 'Rutas de los archivos en Cloudflare R2';
|
|
COMMENT ON COLUMN clara_log.created_at IS 'Timestamp de recepción (inmutable)';
|