Initial SeConectai briefing system
This commit is contained in:
+154
@@ -0,0 +1,154 @@
|
||||
import { PrismaClient, TipoPergunta } from "@prisma/client";
|
||||
import argon2 from "argon2";
|
||||
import briefingSeed from "./briefing-seed.json";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
type SeedPergunta = {
|
||||
ordem: number;
|
||||
rotulo: string;
|
||||
dica?: string;
|
||||
tipo: keyof typeof TipoPergunta;
|
||||
opcoes: string[];
|
||||
permiteComplemento?: boolean;
|
||||
obrigatoria?: boolean;
|
||||
ajuda: {
|
||||
oQueResponder: string;
|
||||
porQuePerguntamos: string;
|
||||
miniExemplo: string;
|
||||
};
|
||||
};
|
||||
|
||||
type SeedSecao = {
|
||||
ordem: number;
|
||||
titulo: string;
|
||||
descricao?: string;
|
||||
perguntas: SeedPergunta[];
|
||||
};
|
||||
|
||||
async function seedConfiguracoes() {
|
||||
const meta = briefingSeed.meta;
|
||||
|
||||
await prisma.configuracao.upsert({
|
||||
where: { chave: "comoPreencher" },
|
||||
update: { valor: meta.comoPreencher },
|
||||
create: { chave: "comoPreencher", valor: meta.comoPreencher }
|
||||
});
|
||||
|
||||
await prisma.configuracao.upsert({
|
||||
where: { chave: "avisoSenhas" },
|
||||
update: { valor: meta.avisoSenhas },
|
||||
create: { chave: "avisoSenhas", valor: meta.avisoSenhas }
|
||||
});
|
||||
|
||||
await prisma.configuracao.upsert({
|
||||
where: { chave: "confirmacaoCliente" },
|
||||
update: { valor: meta.confirmacaoCliente },
|
||||
create: { chave: "confirmacaoCliente", valor: meta.confirmacaoCliente }
|
||||
});
|
||||
}
|
||||
|
||||
async function seedBriefing() {
|
||||
for (const secaoSeed of briefingSeed.secoes as SeedSecao[]) {
|
||||
const secao = await prisma.secao.upsert({
|
||||
where: { ordem: secaoSeed.ordem },
|
||||
update: {
|
||||
titulo: secaoSeed.titulo,
|
||||
descricao: secaoSeed.descricao ?? null,
|
||||
ativo: true
|
||||
},
|
||||
create: {
|
||||
ordem: secaoSeed.ordem,
|
||||
titulo: secaoSeed.titulo,
|
||||
descricao: secaoSeed.descricao ?? null,
|
||||
ativo: true
|
||||
}
|
||||
});
|
||||
|
||||
for (const perguntaSeed of secaoSeed.perguntas) {
|
||||
const pergunta = await prisma.pergunta.upsert({
|
||||
where: {
|
||||
secaoId_ordem: {
|
||||
secaoId: secao.id,
|
||||
ordem: perguntaSeed.ordem
|
||||
}
|
||||
},
|
||||
update: {
|
||||
rotulo: perguntaSeed.rotulo,
|
||||
dica: perguntaSeed.dica ?? null,
|
||||
tipo: perguntaSeed.tipo,
|
||||
opcoes: perguntaSeed.opcoes,
|
||||
obrigatoria: perguntaSeed.obrigatoria ?? false,
|
||||
permiteComplemento: perguntaSeed.permiteComplemento ?? false,
|
||||
ativo: true
|
||||
},
|
||||
create: {
|
||||
secaoId: secao.id,
|
||||
ordem: perguntaSeed.ordem,
|
||||
rotulo: perguntaSeed.rotulo,
|
||||
dica: perguntaSeed.dica ?? null,
|
||||
tipo: perguntaSeed.tipo,
|
||||
opcoes: perguntaSeed.opcoes,
|
||||
obrigatoria: perguntaSeed.obrigatoria ?? false,
|
||||
permiteComplemento: perguntaSeed.permiteComplemento ?? false,
|
||||
ativo: true
|
||||
}
|
||||
});
|
||||
|
||||
await prisma.ajuda.upsert({
|
||||
where: { perguntaId: pergunta.id },
|
||||
update: {
|
||||
oQueResponder: perguntaSeed.ajuda.oQueResponder,
|
||||
porQuePerguntamos: perguntaSeed.ajuda.porQuePerguntamos,
|
||||
miniExemplo: perguntaSeed.ajuda.miniExemplo
|
||||
},
|
||||
create: {
|
||||
perguntaId: pergunta.id,
|
||||
oQueResponder: perguntaSeed.ajuda.oQueResponder,
|
||||
porQuePerguntamos: perguntaSeed.ajuda.porQuePerguntamos,
|
||||
miniExemplo: perguntaSeed.ajuda.miniExemplo
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function seedAdmin() {
|
||||
const email = process.env.ADMIN_EMAIL?.trim().toLowerCase();
|
||||
const password = process.env.ADMIN_INITIAL_PASSWORD;
|
||||
|
||||
if (!email || !password) {
|
||||
return;
|
||||
}
|
||||
|
||||
const existingAdmin = await prisma.user.findUnique({
|
||||
where: { email }
|
||||
});
|
||||
|
||||
if (existingAdmin) {
|
||||
return;
|
||||
}
|
||||
|
||||
await prisma.user.create({
|
||||
data: {
|
||||
email,
|
||||
senhaHash: await argon2.hash(password),
|
||||
papel: "ADMIN"
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function main() {
|
||||
await seedConfiguracoes();
|
||||
await seedBriefing();
|
||||
await seedAdmin();
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((error) => {
|
||||
process.stderr.write(`Seed falhou: ${error instanceof Error ? error.message : "erro desconhecido"}\n`);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
Reference in New Issue
Block a user