cdrdpyj/prisma/migrations/20260803032753_add_form_models/migration.sql

175 lines
4.7 KiB
SQL

/*
Warnings:
- You are about to drop the `Contact` table. If the table is not empty, all the data it contains will be lost.
*/
-- DropTable
DROP TABLE "Contact";
-- CreateTable
CREATE TABLE "contact" (
"id" SERIAL NOT NULL,
"nombre" TEXT NOT NULL,
"email" TEXT NOT NULL,
"mensaje" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "contact_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "formularios" (
"id" UUID NOT NULL,
"numero_voluntario" SERIAL NOT NULL,
"nombre" TEXT NOT NULL,
"segundo_nombre" TEXT,
"apellido" TEXT NOT NULL,
"documento_nro" TEXT,
"documento_tipo" TEXT,
"correo" TEXT NOT NULL,
"fecha_nacimiento" DATE,
"nacionalidad" TEXT,
"sexo" TEXT,
"direccion" TEXT,
"ciudad" TEXT,
"estado" TEXT,
"pais" TEXT,
"codigo_postal" TEXT,
"telefono" TEXT,
"whatsapp" TEXT,
"profesion" TEXT,
"lugar_trabajo" TEXT,
"nivel_academico" TEXT,
"status" TEXT NOT NULL DEFAULT 'pendiente',
"form_version" TEXT,
"email_sent_at" TIMESTAMPTZ,
"submitted_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL,
CONSTRAINT "formularios_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "respuestas" (
"id" UUID NOT NULL,
"formulario_id" UUID NOT NULL,
"key" TEXT NOT NULL,
"value" TEXT NOT NULL,
"seccion" TEXT NOT NULL DEFAULT '',
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "respuestas_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "secciones" (
"id" UUID NOT NULL,
"title_key" TEXT NOT NULL,
"title" TEXT,
"orden" INTEGER NOT NULL DEFAULT 0,
"columns" INTEGER NOT NULL DEFAULT 1,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "secciones_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "campos" (
"id" UUID NOT NULL,
"key" TEXT NOT NULL,
"label_key" TEXT NOT NULL,
"tipo" TEXT NOT NULL,
"seccion_id" UUID,
"required" BOOLEAN NOT NULL DEFAULT false,
"orden" INTEGER NOT NULL DEFAULT 0,
"options" JSONB,
"source" TEXT,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "campos_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "form_versions" (
"id" UUID NOT NULL,
"version" TEXT NOT NULL,
"config" JSONB NOT NULL,
"active" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "form_versions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "admins" (
"id" UUID NOT NULL,
"auth_user_id" UUID NOT NULL,
"email" TEXT NOT NULL,
"nombre" TEXT NOT NULL,
"rol" TEXT NOT NULL DEFAULT 'coordinador',
"activo" BOOLEAN NOT NULL DEFAULT true,
"ultimo_acceso" TIMESTAMPTZ,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "admins_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "contact_email_key" ON "contact"("email");
-- CreateIndex
CREATE INDEX "contact_email_createdAt_idx" ON "contact"("email", "createdAt");
-- CreateIndex
CREATE UNIQUE INDEX "formularios_numero_voluntario_key" ON "formularios"("numero_voluntario");
-- CreateIndex
CREATE INDEX "formularios_correo_idx" ON "formularios"("correo");
-- CreateIndex
CREATE INDEX "formularios_status_idx" ON "formularios"("status");
-- CreateIndex
CREATE INDEX "formularios_pais_idx" ON "formularios"("pais");
-- CreateIndex
CREATE INDEX "formularios_submitted_at_idx" ON "formularios"("submitted_at");
-- CreateIndex
CREATE INDEX "respuestas_formulario_id_idx" ON "respuestas"("formulario_id");
-- CreateIndex
CREATE INDEX "respuestas_key_idx" ON "respuestas"("key");
-- CreateIndex
CREATE INDEX "respuestas_seccion_idx" ON "respuestas"("seccion");
-- CreateIndex
CREATE INDEX "secciones_orden_idx" ON "secciones"("orden");
-- CreateIndex
CREATE UNIQUE INDEX "campos_key_key" ON "campos"("key");
-- CreateIndex
CREATE INDEX "campos_seccion_id_idx" ON "campos"("seccion_id");
-- CreateIndex
CREATE INDEX "campos_tipo_idx" ON "campos"("tipo");
-- CreateIndex
CREATE UNIQUE INDEX "admins_auth_user_id_key" ON "admins"("auth_user_id");
-- CreateIndex
CREATE UNIQUE INDEX "admins_email_key" ON "admins"("email");
-- CreateIndex
CREATE INDEX "admins_email_idx" ON "admins"("email");
-- AddForeignKey
ALTER TABLE "respuestas" ADD CONSTRAINT "respuestas_formulario_id_fkey" FOREIGN KEY ("formulario_id") REFERENCES "formularios"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "campos" ADD CONSTRAINT "campos_seccion_id_fkey" FOREIGN KEY ("seccion_id") REFERENCES "secciones"("id") ON DELETE SET NULL ON UPDATE CASCADE;