84 lines
2.5 KiB
SQL
84 lines
2.5 KiB
SQL
-- Criar enum TipoParticipacao se não existir
|
|
DO $$ BEGIN
|
|
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'tipoparticipacao') THEN
|
|
CREATE TYPE "TipoParticipacao" AS ENUM (
|
|
'AUTOR',
|
|
'REU',
|
|
'TERCEIRO_INTERESSADO'
|
|
);
|
|
END IF;
|
|
END $$;
|
|
|
|
-- Criar tabela de partes_processo mantendo dados existentes
|
|
CREATE TABLE IF NOT EXISTS "partes_processo" (
|
|
"id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"processoId" UUID NOT NULL,
|
|
"clienteId" UUID,
|
|
"tipo" "TipoParticipacao" NOT NULL,
|
|
"nome" VARCHAR(200) NOT NULL,
|
|
"cpfCnpj" VARCHAR(18),
|
|
"principal" BOOLEAN NOT NULL DEFAULT false,
|
|
"observacoes" TEXT,
|
|
"dataCriacao" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "fk_partes_processo_processo"
|
|
FOREIGN KEY ("processoId")
|
|
REFERENCES "processos"("id")
|
|
ON DELETE CASCADE,
|
|
CONSTRAINT "fk_partes_processo_cliente"
|
|
FOREIGN KEY ("clienteId")
|
|
REFERENCES "clientes"("id")
|
|
ON DELETE SET NULL
|
|
);
|
|
|
|
-- Criar índices para melhor performance
|
|
CREATE INDEX IF NOT EXISTS "idx_partes_processo_processo" ON "partes_processo"("processoId");
|
|
CREATE INDEX IF NOT EXISTS "idx_partes_processo_cliente" ON "partes_processo"("clienteId");
|
|
|
|
-- Migrar dados existentes para a nova estrutura
|
|
INSERT INTO "partes_processo" (
|
|
"processoId",
|
|
"clienteId",
|
|
"tipo",
|
|
"nome",
|
|
"principal"
|
|
)
|
|
SELECT
|
|
p.id as "processoId",
|
|
p."clienteId",
|
|
p."tipoParteCliente"::TipoParticipacao as "tipo",
|
|
c.nome as "nome",
|
|
true as "principal"
|
|
FROM "processos" p
|
|
JOIN "clientes" c ON p."clienteId" = c.id
|
|
WHERE NOT EXISTS (
|
|
SELECT 1 FROM "partes_processo" pp
|
|
WHERE pp."processoId" = p.id AND pp."clienteId" = p."clienteId"
|
|
);
|
|
|
|
-- Adicionar partes contraparte
|
|
INSERT INTO "partes_processo" (
|
|
"processoId",
|
|
"tipo",
|
|
"nome",
|
|
"principal"
|
|
)
|
|
SELECT
|
|
p.id as "processoId",
|
|
CASE
|
|
WHEN p."tipoParteCliente" = 'AUTOR' THEN 'REU'::TipoParticipacao
|
|
ELSE 'AUTOR'::TipoParticipacao
|
|
END as "tipo",
|
|
p."nomeContraparte" as "nome",
|
|
false as "principal"
|
|
FROM "processos" p
|
|
WHERE p."nomeContraparte" IS NOT NULL
|
|
AND NOT EXISTS (
|
|
SELECT 1 FROM "partes_processo" pp
|
|
WHERE pp."processoId" = p.id AND pp.nome = p."nomeContraparte"
|
|
);
|
|
|
|
-- Não remover colunas antigas ainda para manter compatibilidade
|
|
-- Em uma futura migração, após garantir que tudo está funcionando,
|
|
-- podemos remover as colunas redundantes
|