Commit inicial - upload de todos os arquivos da pasta
This commit is contained in:
186
prisma/seed.ts
Normal file
186
prisma/seed.ts
Normal file
@@ -0,0 +1,186 @@
|
||||
import { ContractItemType, PrismaClient, Role } from '@prisma/client';
|
||||
import * as bcrypt from 'bcrypt';
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function seedAdmin(): Promise<void> {
|
||||
const passwordHash = await bcrypt.hash(process.env.PASS_ADMIN_USER || '', 10);
|
||||
|
||||
const admin = await prisma.user.upsert({
|
||||
where: { email: 'admin@iasis.com.br' },
|
||||
update: {},
|
||||
create: {
|
||||
name: 'Admin',
|
||||
email: 'admin@iasis.com.br',
|
||||
password: passwordHash,
|
||||
role: Role.ADMIN,
|
||||
mustChangePassword: false,
|
||||
},
|
||||
});
|
||||
|
||||
console.log(`Admin: ${admin.email} (${admin.id})`);
|
||||
}
|
||||
|
||||
async function seedSesMg(): Promise<void> {
|
||||
const clientData = {
|
||||
name: 'Secretaria de Estado de Saúde de Minas Gerais (SES-MG)',
|
||||
document: '18.715.516/0001-88',
|
||||
email: 'rafael.paiva@saude.mg.gov.br',
|
||||
phone: '(31) 39152-0221',
|
||||
contactName: 'Rafael Matos Paiva',
|
||||
description: 'Cliente SESMG',
|
||||
};
|
||||
|
||||
const existingClient = await prisma.client.findFirst({
|
||||
where: { document: clientData.document },
|
||||
});
|
||||
|
||||
const client = existingClient
|
||||
? await prisma.client.update({ where: { id: existingClient.id }, data: clientData })
|
||||
: await prisma.client.create({ data: clientData });
|
||||
|
||||
console.log(`Cliente: ${client.name} (${client.id})`);
|
||||
|
||||
const contractData = {
|
||||
clientId: client.id,
|
||||
name: 'Contrato SESMG',
|
||||
code: 'CTSES001',
|
||||
startDate: new Date('2026-04-01T00:00:00Z'),
|
||||
};
|
||||
|
||||
const existingContract = await prisma.contract.findFirst({
|
||||
where: { clientId: client.id, code: contractData.code },
|
||||
});
|
||||
|
||||
const contract = existingContract
|
||||
? await prisma.contract.update({ where: { id: existingContract.id }, data: contractData })
|
||||
: await prisma.contract.create({ data: contractData });
|
||||
|
||||
console.log(`Contrato: ${contract.code} (${contract.id})`);
|
||||
|
||||
const items = [
|
||||
{
|
||||
code: 'I-01',
|
||||
name: 'Licença SaaS',
|
||||
description: 'Licença SaaS',
|
||||
itemType: ContractItemType.SAAS_LICENSE,
|
||||
totalUst: 5,
|
||||
ustValue: 35000000,
|
||||
timeboxDescoberta: null,
|
||||
timeboxDesign: null,
|
||||
timeboxArquitetura: null,
|
||||
timeboxConstrucao: null,
|
||||
},
|
||||
{
|
||||
code: 'I-02',
|
||||
name: 'Desenvolvimento e implantação da tecnologia blockchain',
|
||||
description: 'Desenvolvimento e implantação da tecnologia blockchain',
|
||||
itemType: ContractItemType.UST,
|
||||
totalUst: 50400,
|
||||
ustValue: 533.33,
|
||||
timeboxDescoberta: 40,
|
||||
timeboxDesign: 40,
|
||||
timeboxArquitetura: 40,
|
||||
timeboxConstrucao: 40,
|
||||
},
|
||||
{
|
||||
code: 'I-03',
|
||||
name: 'Desenv/Manutenção (treinamento/consultoria pós-implantação)',
|
||||
description: 'Desenvolvimento e Manutenção (treinamento/consultoria pós-implantação)',
|
||||
itemType: ContractItemType.UST,
|
||||
totalUst: 4800,
|
||||
ustValue: 388.88,
|
||||
timeboxDescoberta: 40,
|
||||
timeboxDesign: 40,
|
||||
timeboxArquitetura: 40,
|
||||
timeboxConstrucao: 40,
|
||||
},
|
||||
{
|
||||
code: 'I-04',
|
||||
name: 'Desenvolvimento e Manutenção (manutenção, integrações e automações)',
|
||||
description: 'Desenvolvimento e Manutenção (manutenção, integrações e automações)',
|
||||
itemType: ContractItemType.UST,
|
||||
totalUst: 15120,
|
||||
ustValue: 533.33,
|
||||
timeboxDescoberta: 40,
|
||||
timeboxDesign: 40,
|
||||
timeboxArquitetura: 40,
|
||||
timeboxConstrucao: 80,
|
||||
},
|
||||
{
|
||||
code: 'I-05',
|
||||
name: 'Serviços Técnicos de Inteligência Artificial (IA)',
|
||||
description: 'Serviços Técnicos de Inteligência Artificial (IA)',
|
||||
itemType: ContractItemType.UST,
|
||||
totalUst: 30240,
|
||||
ustValue: 555.55,
|
||||
timeboxDescoberta: 40,
|
||||
timeboxDesign: 40,
|
||||
timeboxArquitetura: 40,
|
||||
timeboxConstrucao: 80,
|
||||
},
|
||||
];
|
||||
|
||||
for (const item of items) {
|
||||
const saved = await prisma.contractItem.upsert({
|
||||
where: { code_clientId: { code: item.code, clientId: client.id } },
|
||||
update: { ...item, clientId: client.id },
|
||||
create: { ...item, clientId: client.id },
|
||||
});
|
||||
console.log(` Item: ${saved.code} - ${saved.name}`);
|
||||
}
|
||||
|
||||
const projectData = {
|
||||
contractId: contract.id,
|
||||
name: 'ISIS Platform',
|
||||
code: 'ISIS-001',
|
||||
description: 'Plataforma de interoperabilidade ISIS',
|
||||
};
|
||||
|
||||
const existingProject = await prisma.project.findFirst({
|
||||
where: { contractId: contract.id, code: projectData.code },
|
||||
});
|
||||
|
||||
const project = existingProject
|
||||
? await prisma.project.update({ where: { id: existingProject.id }, data: projectData })
|
||||
: await prisma.project.create({ data: projectData });
|
||||
|
||||
console.log(`Projeto: ${project.code} (${project.id})`);
|
||||
|
||||
const profiles = [
|
||||
'Especialista de Inteligência (Cientista de Dados)',
|
||||
'Analista de Negócio/Processo',
|
||||
'Especialista de Negócio (Saúde)',
|
||||
'Especialista de Tecnologia / Arquiteto',
|
||||
'Gerente de Projeto',
|
||||
'Desenvolvedor / Engenheiro de Dados',
|
||||
'Especialista de Infraestrutura',
|
||||
'Scrum Master',
|
||||
];
|
||||
|
||||
for (const name of profiles) {
|
||||
const existing = await prisma.clientProfile.findFirst({
|
||||
where: { clientId: client.id, name },
|
||||
});
|
||||
const profile = existing
|
||||
? await prisma.clientProfile.update({ where: { id: existing.id }, data: { name } })
|
||||
: await prisma.clientProfile.create({ data: { name, clientId: client.id } });
|
||||
console.log(` Perfil: ${profile.name}`);
|
||||
}
|
||||
}
|
||||
|
||||
async function main(): Promise<void> {
|
||||
await seedAdmin();
|
||||
await seedSesMg();
|
||||
console.log('Seed concluído.');
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user