Files
advx/prisma/migrations/XXXXXXXXXXXXXX_add_partes_processo.sql
2025-04-10 23:07:21 -03:00

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