283 lines
7.1 KiB
Plaintext
283 lines
7.1 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
enum Papel {
|
|
CLIENTE
|
|
ADMIN
|
|
}
|
|
|
|
enum TipoPessoa {
|
|
PF
|
|
PJ
|
|
}
|
|
|
|
enum TipoPergunta {
|
|
TEXTAREA
|
|
RADIO
|
|
CHECKBOX
|
|
ANEXO
|
|
}
|
|
|
|
enum StatusBriefing {
|
|
RASCUNHO
|
|
ENVIADO
|
|
EM_ANALISE
|
|
CONCLUIDO
|
|
}
|
|
|
|
enum CanalNotificacao {
|
|
EMAIL
|
|
WHATSAPP
|
|
}
|
|
|
|
enum StatusNotificacao {
|
|
PENDENTE
|
|
ENVIADO
|
|
ERRO
|
|
}
|
|
|
|
enum StatusSolicitacaoExclusao {
|
|
PENDENTE
|
|
PROCESSADA
|
|
CANCELADA
|
|
}
|
|
|
|
model User {
|
|
id String @id @default(cuid())
|
|
email String @unique
|
|
senhaHash String
|
|
papel Papel @default(CLIENTE)
|
|
criadoEm DateTime @default(now())
|
|
atualizadoEm DateTime @updatedAt
|
|
cliente Cliente?
|
|
passwordResetTokens PasswordResetToken[]
|
|
auditorias AuditoriaAcesso[]
|
|
notasInternas NotaInterna[]
|
|
|
|
@@map("users")
|
|
}
|
|
|
|
model Cliente {
|
|
id String @id @default(cuid())
|
|
userId String @unique
|
|
nomeCompleto String
|
|
cpfCifrado String
|
|
cpfHash String @unique
|
|
whatsapp String
|
|
tipo TipoPessoa @default(PF)
|
|
razaoSocial String?
|
|
cnpj String?
|
|
cep String?
|
|
logradouro String?
|
|
numero String?
|
|
complemento String?
|
|
bairro String?
|
|
cidade String?
|
|
uf String?
|
|
lgpdAceiteEm DateTime
|
|
criadoEm DateTime @default(now())
|
|
atualizadoEm DateTime @updatedAt
|
|
user User @relation(fields: [userId], references: [id])
|
|
briefings Briefing[]
|
|
auditorias AuditoriaAcesso[]
|
|
solicitacoesExclusao SolicitacaoExclusao[]
|
|
|
|
@@index([tipo])
|
|
@@map("clientes")
|
|
}
|
|
|
|
model Secao {
|
|
id String @id @default(cuid())
|
|
ordem Int
|
|
titulo String
|
|
descricao String?
|
|
ativo Boolean @default(true)
|
|
criadoEm DateTime @default(now())
|
|
atualizadoEm DateTime @updatedAt
|
|
perguntas Pergunta[]
|
|
|
|
@@unique([ordem])
|
|
@@map("secoes")
|
|
}
|
|
|
|
model Pergunta {
|
|
id String @id @default(cuid())
|
|
secaoId String
|
|
ordem Int
|
|
rotulo String
|
|
dica String?
|
|
tipo TipoPergunta
|
|
opcoes Json
|
|
obrigatoria Boolean @default(false)
|
|
permiteComplemento Boolean @default(false)
|
|
ativo Boolean @default(true)
|
|
criadoEm DateTime @default(now())
|
|
atualizadoEm DateTime @updatedAt
|
|
secao Secao @relation(fields: [secaoId], references: [id])
|
|
ajuda Ajuda?
|
|
respostas Resposta[]
|
|
anexos Anexo[]
|
|
|
|
@@unique([secaoId, ordem])
|
|
@@index([tipo])
|
|
@@map("perguntas")
|
|
}
|
|
|
|
model Ajuda {
|
|
id String @id @default(cuid())
|
|
perguntaId String @unique
|
|
oQueResponder String
|
|
porQuePerguntamos String
|
|
miniExemplo String
|
|
criadoEm DateTime @default(now())
|
|
atualizadoEm DateTime @updatedAt
|
|
pergunta Pergunta @relation(fields: [perguntaId], references: [id])
|
|
|
|
@@map("ajudas")
|
|
}
|
|
|
|
model Briefing {
|
|
id String @id @default(cuid())
|
|
clienteId String
|
|
titulo String
|
|
status StatusBriefing @default(RASCUNHO)
|
|
confirmadoEm DateTime?
|
|
enviadoEm DateTime?
|
|
criadoEm DateTime @default(now())
|
|
atualizadoEm DateTime @updatedAt
|
|
cliente Cliente @relation(fields: [clienteId], references: [id])
|
|
respostas Resposta[]
|
|
anexos Anexo[]
|
|
notasInternas NotaInterna[]
|
|
notificacoes EnvioNotificacao[]
|
|
|
|
@@index([clienteId])
|
|
@@index([status])
|
|
@@map("briefings")
|
|
}
|
|
|
|
model Resposta {
|
|
id String @id @default(cuid())
|
|
briefingId String
|
|
perguntaId String
|
|
texto String?
|
|
complemento String?
|
|
selecionadas Json?
|
|
criadoEm DateTime @default(now())
|
|
atualizadoEm DateTime @updatedAt
|
|
briefing Briefing @relation(fields: [briefingId], references: [id], onDelete: Cascade)
|
|
pergunta Pergunta @relation(fields: [perguntaId], references: [id])
|
|
|
|
@@unique([briefingId, perguntaId])
|
|
@@index([perguntaId])
|
|
@@map("respostas")
|
|
}
|
|
|
|
model Anexo {
|
|
id String @id @default(cuid())
|
|
briefingId String
|
|
perguntaId String
|
|
nomeOriginal String
|
|
caminho String
|
|
mime String
|
|
tamanho Int
|
|
criadoEm DateTime @default(now())
|
|
briefing Briefing @relation(fields: [briefingId], references: [id], onDelete: Cascade)
|
|
pergunta Pergunta @relation(fields: [perguntaId], references: [id])
|
|
|
|
@@index([briefingId])
|
|
@@index([perguntaId])
|
|
@@map("anexos")
|
|
}
|
|
|
|
model PasswordResetToken {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
tokenHash String @unique
|
|
expiraEm DateTime
|
|
usadoEm DateTime?
|
|
criadoEm DateTime @default(now())
|
|
user User @relation(fields: [userId], references: [id])
|
|
|
|
@@index([userId])
|
|
@@index([expiraEm])
|
|
@@map("password_reset_tokens")
|
|
}
|
|
|
|
model Configuracao {
|
|
id String @id @default(cuid())
|
|
chave String @unique
|
|
valor Json
|
|
criadoEm DateTime @default(now())
|
|
atualizadoEm DateTime @updatedAt
|
|
|
|
@@map("configuracoes")
|
|
}
|
|
|
|
model AuditoriaAcesso {
|
|
id String @id @default(cuid())
|
|
adminId String
|
|
clienteId String
|
|
acao String
|
|
criadoEm DateTime @default(now())
|
|
admin User @relation(fields: [adminId], references: [id])
|
|
cliente Cliente @relation(fields: [clienteId], references: [id])
|
|
|
|
@@index([adminId])
|
|
@@index([clienteId])
|
|
@@map("auditorias_acesso")
|
|
}
|
|
|
|
model NotaInterna {
|
|
id String @id @default(cuid())
|
|
briefingId String
|
|
adminId String
|
|
texto String
|
|
criadoEm DateTime @default(now())
|
|
briefing Briefing @relation(fields: [briefingId], references: [id], onDelete: Cascade)
|
|
admin User @relation(fields: [adminId], references: [id])
|
|
|
|
@@index([briefingId])
|
|
@@index([adminId])
|
|
@@map("notas_internas")
|
|
}
|
|
|
|
model EnvioNotificacao {
|
|
id String @id @default(cuid())
|
|
briefingId String
|
|
canal CanalNotificacao
|
|
destino String
|
|
assunto String?
|
|
status StatusNotificacao @default(PENDENTE)
|
|
erro String?
|
|
tentativas Int @default(0)
|
|
criadoEm DateTime @default(now())
|
|
atualizadoEm DateTime @updatedAt
|
|
enviadoEm DateTime?
|
|
briefing Briefing @relation(fields: [briefingId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([briefingId])
|
|
@@index([status])
|
|
@@map("envios_notificacao")
|
|
}
|
|
|
|
model SolicitacaoExclusao {
|
|
id String @id @default(cuid())
|
|
clienteId String
|
|
motivo String?
|
|
status StatusSolicitacaoExclusao @default(PENDENTE)
|
|
criadoEm DateTime @default(now())
|
|
processadoEm DateTime?
|
|
cliente Cliente @relation(fields: [clienteId], references: [id])
|
|
|
|
@@index([clienteId])
|
|
@@index([status])
|
|
@@map("solicitacoes_exclusao")
|
|
}
|