175 lines
4.7 KiB
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;
|