-- 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