Initial SeConectai briefing system
This commit is contained in:
@@ -0,0 +1,282 @@
|
||||
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")
|
||||
}
|
||||
Reference in New Issue
Block a user