144 lines
4.5 KiB
Plaintext
144 lines
4.5 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
directUrl = env("DIRECT_URL")
|
|
}
|
|
|
|
model Contact {
|
|
id Int @id @default(autoincrement())
|
|
nombre String
|
|
email String @unique
|
|
mensaje String
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@index([email, createdAt])
|
|
@@map("contact")
|
|
}
|
|
|
|
model Formulario {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
numero_voluntario Int @unique @default(autoincrement())
|
|
nombre String
|
|
segundo_nombre String?
|
|
apellido String
|
|
documento_nro String?
|
|
documento_tipo String?
|
|
correo String
|
|
fecha_nacimiento DateTime? @db.Date
|
|
nacionalidad String?
|
|
sexo String?
|
|
direccion String?
|
|
ciudad String?
|
|
estado String?
|
|
pais String?
|
|
codigo_postal String?
|
|
telefono String?
|
|
whatsapp String?
|
|
profesion String?
|
|
lugar_trabajo String?
|
|
nivel_academico String?
|
|
status String @default("pendiente")
|
|
form_version String?
|
|
email_sent_at DateTime? @db.Timestamptz
|
|
submitted_at DateTime @default(now()) @db.Timestamptz
|
|
updated_at DateTime @updatedAt @db.Timestamptz
|
|
|
|
respuestas Respuesta[]
|
|
|
|
@@index([correo])
|
|
@@index([status])
|
|
@@index([pais])
|
|
@@index([submitted_at])
|
|
@@index([nombre(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_nombre_trgm_idx")
|
|
@@index([apellido(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_apellido_trgm_idx")
|
|
@@index([correo(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_correo_trgm_idx")
|
|
@@index([telefono(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_telefono_trgm_idx")
|
|
@@index([whatsapp(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_whatsapp_trgm_idx")
|
|
@@index([documento_nro(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_documento_nro_trgm_idx")
|
|
@@index([ciudad(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_ciudad_trgm_idx")
|
|
@@index([estado(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_estado_trgm_idx")
|
|
@@index([profesion(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_profesion_trgm_idx")
|
|
@@index([nivel_academico(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_nivel_academico_trgm_idx")
|
|
@@index([nacionalidad(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_nacionalidad_trgm_idx")
|
|
@@map("formularios")
|
|
}
|
|
|
|
model Respuesta {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
formulario_id String @db.Uuid
|
|
key String
|
|
value String
|
|
seccion String @default("")
|
|
created_at DateTime @default(now()) @db.Timestamptz
|
|
|
|
formulario Formulario @relation(fields: [formulario_id], references: [id], onDelete: Cascade)
|
|
|
|
@@index([formulario_id])
|
|
@@index([key])
|
|
@@index([seccion])
|
|
@@index([value(ops: raw("gin_trgm_ops"))], type: Gin, map: "respuestas_value_trgm_idx")
|
|
@@map("respuestas")
|
|
}
|
|
|
|
model Seccion {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
title_key String
|
|
title String?
|
|
orden Int @default(0)
|
|
columns Int @default(1)
|
|
created_at DateTime @default(now()) @db.Timestamptz
|
|
|
|
campos Campo[]
|
|
|
|
@@index([orden])
|
|
@@map("secciones")
|
|
}
|
|
|
|
model Campo {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
key String @unique
|
|
label_key String
|
|
tipo String
|
|
seccion_id String? @db.Uuid
|
|
required Boolean @default(false)
|
|
orden Int @default(0)
|
|
options Json? @db.JsonB
|
|
source String?
|
|
created_at DateTime @default(now()) @db.Timestamptz
|
|
|
|
seccion Seccion? @relation(fields: [seccion_id], references: [id], onDelete: SetNull)
|
|
|
|
@@index([seccion_id])
|
|
@@index([tipo])
|
|
@@map("campos")
|
|
}
|
|
|
|
model FormVersion {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
version String
|
|
config Json @db.JsonB
|
|
active Boolean @default(false)
|
|
created_at DateTime @default(now()) @db.Timestamptz
|
|
|
|
@@map("form_versions")
|
|
}
|
|
|
|
model Admin {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
auth_user_id String @unique @db.Uuid
|
|
email String @unique
|
|
nombre String
|
|
rol String @default("coordinador")
|
|
activo Boolean @default(true)
|
|
ultimo_acceso DateTime? @db.Timestamptz
|
|
created_at DateTime @default(now()) @db.Timestamptz
|
|
|
|
@@index([email])
|
|
@@map("admins")
|
|
}
|