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

87 lines
3.2 KiB
SQL

-- CreateEnum
CREATE TYPE IF NOT EXISTS "StatusTarefa" AS ENUM ('PENDENTE', 'EM_ANDAMENTO', 'CONCLUIDA', 'CANCELADA');
CREATE TYPE IF NOT EXISTS "PrioridadeTarefa" AS ENUM ('BAIXA', 'MEDIA', 'ALTA', 'URGENTE');
-- Tarefas first (parent table)
CREATE TABLE IF NOT EXISTS "tarefas" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"titulo" TEXT NOT NULL,
"descricao" TEXT,
"status" "StatusTarefa" NOT NULL,
"prioridade" "PrioridadeTarefa" NOT NULL,
"dataInicio" TIMESTAMP(3) NOT NULL,
"dataVencimento" TIMESTAMP(3) NOT NULL,
"progresso" INTEGER NOT NULL DEFAULT 0,
"responsavelId" UUID NOT NULL,
"criadoPorId" UUID NOT NULL,
"processoId" UUID,
"clienteId" UUID,
"etiquetas" TEXT[],
"criadoEm" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"atualizadoEm" TIMESTAMP(3) NOT NULL,
CONSTRAINT "tarefas_pkey" PRIMARY KEY ("id"),
CONSTRAINT "tarefas_responsavelId_fkey"
FOREIGN KEY ("responsavelId") REFERENCES "usuarios"("id"),
CONSTRAINT "tarefas_criadoPorId_fkey"
FOREIGN KEY ("criadoPorId") REFERENCES "usuarios"("id"),
CONSTRAINT "tarefas_clienteId_fkey"
FOREIGN KEY ("clienteId") REFERENCES "clientes"("id")
);
-- Then child tables
CREATE TABLE IF NOT EXISTS "subtarefas" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"titulo" TEXT NOT NULL,
"concluida" BOOLEAN NOT NULL DEFAULT false,
"tarefaId" UUID NOT NULL,
CONSTRAINT "subtarefas_pkey" PRIMARY KEY ("id"),
CONSTRAINT "subtarefas_tarefaId_fkey"
FOREIGN KEY ("tarefaId") REFERENCES "tarefas"("id") ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS "comentarios" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"texto" TEXT NOT NULL,
"criadoPorId" UUID NOT NULL,
"tarefaId" UUID NOT NULL,
"criadoEm" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "comentarios_pkey" PRIMARY KEY ("id"),
CONSTRAINT "comentarios_criadoPorId_fkey"
FOREIGN KEY ("criadoPorId") REFERENCES "usuarios"("id"),
CONSTRAINT "comentarios_tarefaId_fkey"
FOREIGN KEY ("tarefaId") REFERENCES "tarefas"("id") ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS "anexos" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"nome" TEXT NOT NULL,
"url" TEXT NOT NULL,
"tipo" TEXT NOT NULL,
"tamanho" INTEGER NOT NULL,
"tarefaId" UUID NOT NULL,
"criadoEm" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "anexos_pkey" PRIMARY KEY ("id"),
CONSTRAINT "anexos_tarefaId_fkey"
FOREIGN KEY ("tarefaId") REFERENCES "tarefas"("id") ON DELETE CASCADE
);
-- Add foreign key for processos after it exists
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_name = 'processos'
) THEN
ALTER TABLE "tarefas"
ADD CONSTRAINT "tarefas_processoId_fkey"
FOREIGN KEY ("processoId")
REFERENCES "processos"("id");
END IF;
END $$;
-- Indexes
CREATE INDEX IF NOT EXISTS "tarefas_responsavelId_idx" ON "tarefas"("responsavelId");
CREATE INDEX IF NOT EXISTS "tarefas_criadoPorId_idx" ON "tarefas"("criadoPorId");
CREATE INDEX IF NOT EXISTS "tarefas_processoId_idx" ON "tarefas"("processoId");
CREATE INDEX IF NOT EXISTS "tarefas_clienteId_idx" ON "tarefas"("clienteId");