58 lines
2.6 KiB
PL/PgSQL
58 lines
2.6 KiB
PL/PgSQL
-- Migration para sistema de captura web de provas
|
|
-- NÃO RESETAR O BANCO DE DADOS - apenas adicionar nova tabela
|
|
|
|
-- Criar tabela para sessões de captura web
|
|
CREATE TABLE IF NOT EXISTS "web_proof_sessions" (
|
|
"id" TEXT NOT NULL,
|
|
"sessionId" TEXT NOT NULL UNIQUE,
|
|
"targetUrl" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'PENDENTE',
|
|
"metadata" JSONB,
|
|
"environment" JSONB,
|
|
"screenshots" TEXT[],
|
|
"sessionHash" TEXT,
|
|
"contentHash" TEXT,
|
|
"pageHash" TEXT,
|
|
"reportPath" TEXT,
|
|
"networkData" JSONB,
|
|
"trustedTimestamp" TEXT,
|
|
"error" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"processedAt" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "web_proof_sessions_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- Criar índices para otimização de consultas
|
|
CREATE INDEX IF NOT EXISTS "web_proof_sessions_sessionId_idx" ON "web_proof_sessions"("sessionId");
|
|
CREATE INDEX IF NOT EXISTS "web_proof_sessions_status_idx" ON "web_proof_sessions"("status");
|
|
CREATE INDEX IF NOT EXISTS "web_proof_sessions_createdAt_idx" ON "web_proof_sessions"("createdAt");
|
|
CREATE INDEX IF NOT EXISTS "web_proof_sessions_contentHash_idx" ON "web_proof_sessions"("contentHash");
|
|
|
|
-- Adicionar trigger para atualizar updatedAt automaticamente
|
|
CREATE OR REPLACE FUNCTION update_web_proof_sessions_updated_at()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW."updatedAt" = CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$ language 'plpgsql';
|
|
|
|
CREATE TRIGGER update_web_proof_sessions_updated_at
|
|
BEFORE UPDATE ON "web_proof_sessions"
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_web_proof_sessions_updated_at();
|
|
|
|
-- Adicionar comentários para documentação
|
|
COMMENT ON TABLE "web_proof_sessions" IS 'Tabela para armazenar sessões de captura de provas web forenses';
|
|
COMMENT ON COLUMN "web_proof_sessions"."sessionId" IS 'Identificador único da sessão de captura';
|
|
COMMENT ON COLUMN "web_proof_sessions"."targetUrl" IS 'URL alvo que foi capturada';
|
|
COMMENT ON COLUMN "web_proof_sessions"."metadata" IS 'Metadados técnicos coletados durante a captura';
|
|
COMMENT ON COLUMN "web_proof_sessions"."environment" IS 'Informações do ambiente isolado de captura';
|
|
COMMENT ON COLUMN "web_proof_sessions"."sessionHash" IS 'Hash SHA-256 da sessão para verificação de integridade';
|
|
COMMENT ON COLUMN "web_proof_sessions"."contentHash" IS 'Hash SHA-256 do conteúdo capturado';
|
|
COMMENT ON COLUMN "web_proof_sessions"."pageHash" IS 'Hash SHA-512 da página específica';
|
|
COMMENT ON COLUMN "web_proof_sessions"."trustedTimestamp" IS 'Timestamp de autoridade certificadora confiável';
|