import { internalMutation } from "./_generated/server"; import { v } from "convex/values"; import { hashPassword } from "./auth/utils"; // Dados exportados do Convex Cloud const simbolosData = [ { descricao: "Cargo de Direção e Assessoramento Superior - 5", nome: "DAS-5", repValor: "4747.84", tipo: "cargo_comissionado" as const, valor: "5934.80", vencValor: "1186.96", }, { descricao: "Cargo de Direção e Assessoramento Superior - 3", nome: "DAS-3", repValor: "6273.92", tipo: "cargo_comissionado" as const, valor: "7842.40", vencValor: "1568.48", }, { descricao: "Cargo de Direção e Assessoramento Superior -2", nome: "DAS - 2", repValor: "7460.87", tipo: "cargo_comissionado" as const, valor: "9326.09", vencValor: "1865.22", }, { descricao: "Cargo de Apoio e Assessoramento - 1", nome: "CAA-1", repValor: "4120.43", tipo: "cargo_comissionado" as const, valor: "5150.54", vencValor: "1030.11", }, { descricao: "Função Gratificada de Direção e Assessoramento", nome: "FDA", repValor: "", tipo: "funcao_gratificada" as const, valor: "7460.87", vencValor: "", }, { descricao: "Função Gratificada de Supervisão - 3", nome: "CAA - 3", repValor: "2204.36", tipo: "cargo_comissionado" as const, valor: "2755.45", vencValor: "551.09", }, { descricao: "Função Gratificada de Direção e Assessoramento -1", nome: "FDA-1", repValor: "", tipo: "funcao_gratificada" as const, valor: "6273.92", vencValor: "", }, { descricao: "Função Gratificada de Direção e Assessoramento -2", nome: "FDA -2", repValor: "", tipo: "funcao_gratificada" as const, valor: "5765.22", vencValor: "", }, { descricao: "Função Gratificada de Direção e Assessoramento - 3", nome: "FDA - 3", repValor: "", tipo: "funcao_gratificada" as const, valor: "4747.83", vencValor: "", }, { descricao: "Função Gratificada de Direção e Assessoramento - 4", nome: "FDA - 4", repValor: "", tipo: "funcao_gratificada" as const, valor: "3391.31", vencValor: "", }, { descricao: "Função Gratificada de Supervisão - 1", nome: "FGS -1 ", repValor: "", tipo: "funcao_gratificada" as const, valor: "1532.08", vencValor: "", }, { descricao: "Função Gratificada de Supervisão - 2", nome: "FGS - 2", repValor: "", tipo: "funcao_gratificada" as const, valor: "934.74", vencValor: "", }, { descricao: "Função Gratificada de Supervisão - 2", nome: "CAA - 2", repValor: "3391.31", tipo: "cargo_comissionado" as const, valor: "4239.14", vencValor: "847.83", }, ]; const funcionariosData = [ { admissaoData: "01/01/2000", cep: "50740500", cidade: "Recife", cpf: "04281554645", email: "kilder@kilder.com.br", endereco: "Rua Bernardino Alves Maia, Várzea", matricula: "4585", nascimento: "01/01/2000", nome: "Madson Kilder", rg: "123456122", simboloNome: "DAS-3", // Será convertido para ID simboloTipo: "cargo_comissionado" as const, telefone: "8101234564", uf: "PE", }, { admissaoData: "01/01/2000", cep: "50740400", cidade: "Recife", cpf: "05129038401", email: "princesalves@gmail.com", endereco: "Rua Deputado Cunha Rabelo, Várzea", matricula: "123456", nascimento: "05/01/1985", nome: "Princes Alves rocha wanderley", rg: "639541200", simboloNome: "FDA-1", // Será convertido para ID simboloTipo: "funcao_gratificada" as const, telefone: "81123456455", uf: "PE", }, { admissaoData: "01/10/2025", cep: "50740400", cidade: "Recife", cpf: "06102637496", email: "deyvison.wanderley@gmail.com", endereco: "Rua Deputado Cunha Rabelo, Várzea", matricula: "256220", nascimento: "16/03/1985", nome: "Deyvison de França Wanderley", rg: "6347974", simboloNome: "CAA-1", // Será convertido para ID simboloTipo: "cargo_comissionado" as const, telefone: "81994235551", uf: "PE", }, ]; const solicitacoesAcessoData = [ { dataResposta: 1761445098933, dataSolicitacao: 1761445038329, email: "severino@gmail.com", matricula: "3231", nome: "Severino Gates", observacoes: "Aprovação realizada por Deyvison", status: "aprovado" as const, telefone: "(81) 9942-3551", }, { dataSolicitacao: 1761445187258, email: "michaeljackson@gmail.com", matricula: "123321", nome: "Michael Jackson", status: "pendente" as const, telefone: "(81) 99423-5551", }, ]; /** * Seed inicial do banco de dados com os dados exportados do Convex Cloud */ export const seedDatabase = internalMutation({ args: {}, returns: v.null(), handler: async (ctx) => { console.log("🌱 Iniciando seed do banco de dados..."); // 1. Criar Roles console.log("🔐 Criando roles..."); const roleAdmin = await ctx.db.insert("roles", { nome: "admin", descricao: "Administrador do Sistema", nivel: 0, }); console.log(" ✅ Role criada: admin"); const roleTI = await ctx.db.insert("roles", { nome: "ti", descricao: "Tecnologia da Informação", nivel: 1, setor: "ti", }); console.log(" ✅ Role criada: ti"); const roleUsuarioAvancado = await ctx.db.insert("roles", { nome: "usuario_avancado", descricao: "Usuário Avançado", nivel: 2, }); console.log(" ✅ Role criada: usuario_avancado"); const roleUsuario = await ctx.db.insert("roles", { nome: "usuario", descricao: "Usuário Comum", nivel: 3, }); console.log(" ✅ Role criada: usuario"); // 2. Criar usuário admin inicial console.log("👤 Criando usuário admin..."); const senhaAdmin = await hashPassword("Admin@123"); await ctx.db.insert("usuarios", { matricula: "0000", senhaHash: senhaAdmin, nome: "Administrador", email: "admin@sgse.pe.gov.br", roleId: roleAdmin as any, ativo: true, primeiroAcesso: false, criadoEm: Date.now(), atualizadoEm: Date.now(), }); console.log(" ✅ Usuário admin criado (matrícula: 0000, senha: Admin@123)"); // 3. Inserir símbolos console.log("📝 Inserindo símbolos..."); const simbolosMap = new Map(); for (const simbolo of simbolosData) { const id = await ctx.db.insert("simbolos", { descricao: simbolo.descricao, nome: simbolo.nome, repValor: simbolo.repValor, tipo: simbolo.tipo, valor: simbolo.valor, vencValor: simbolo.vencValor, }); simbolosMap.set(simbolo.nome, id); console.log(` ✅ Símbolo criado: ${simbolo.nome}`); } // 4. Inserir funcionários console.log("👥 Inserindo funcionários..."); const funcionariosMap = new Map(); for (const funcionario of funcionariosData) { const simboloId = simbolosMap.get(funcionario.simboloNome); if (!simboloId) { console.error(` ❌ Símbolo não encontrado: ${funcionario.simboloNome}`); continue; } const funcId = await ctx.db.insert("funcionarios", { admissaoData: funcionario.admissaoData, cep: funcionario.cep, cidade: funcionario.cidade, cpf: funcionario.cpf, email: funcionario.email, endereco: funcionario.endereco, matricula: funcionario.matricula, nascimento: funcionario.nascimento, nome: funcionario.nome, rg: funcionario.rg, simboloId: simboloId as any, simboloTipo: funcionario.simboloTipo, telefone: funcionario.telefone, uf: funcionario.uf, }); funcionariosMap.set(funcionario.matricula, funcId); console.log(` ✅ Funcionário criado: ${funcionario.nome}`); } // 5. Criar usuários para os funcionários console.log("👤 Criando usuários para funcionários..."); for (const funcionario of funcionariosData) { const funcId = funcionariosMap.get(funcionario.matricula); if (!funcId) continue; const senhaInicial = await hashPassword("Mudar@123"); await ctx.db.insert("usuarios", { matricula: funcionario.matricula, senhaHash: senhaInicial, nome: funcionario.nome, email: funcionario.email, funcionarioId: funcId as any, roleId: roleUsuario as any, ativo: true, primeiroAcesso: true, criadoEm: Date.now(), atualizadoEm: Date.now(), }); console.log(` ✅ Usuário criado: ${funcionario.nome} (senha: Mudar@123)`); } // 6. Inserir solicitações de acesso console.log("📋 Inserindo solicitações de acesso..."); for (const solicitacao of solicitacoesAcessoData) { await ctx.db.insert("solicitacoesAcesso", { dataResposta: solicitacao.dataResposta, dataSolicitacao: solicitacao.dataSolicitacao, email: solicitacao.email, matricula: solicitacao.matricula, nome: solicitacao.nome, observacoes: solicitacao.observacoes, status: solicitacao.status, telefone: solicitacao.telefone, }); console.log(` ✅ Solicitação criada: ${solicitacao.nome}`); } console.log("✨ Seed concluído com sucesso!"); console.log(""); console.log("🔑 CREDENCIAIS DE ACESSO:"); console.log(" Admin: matrícula 0000, senha Admin@123"); console.log(" Funcionários: usar matrícula, senha Mudar@123"); return null; }, }); /** * Limpar todos os dados do banco */ export const clearDatabase = internalMutation({ args: {}, returns: v.null(), handler: async (ctx) => { console.log("🗑️ Limpando banco de dados..."); // Limpar logs de acesso const logs = await ctx.db.query("logsAcesso").collect(); for (const log of logs) { await ctx.db.delete(log._id); } console.log(` ✅ ${logs.length} logs de acesso removidos`); // Limpar sessões const sessoes = await ctx.db.query("sessoes").collect(); for (const sessao of sessoes) { await ctx.db.delete(sessao._id); } console.log(` ✅ ${sessoes.length} sessões removidas`); // Limpar usuários const usuarios = await ctx.db.query("usuarios").collect(); for (const usuario of usuarios) { await ctx.db.delete(usuario._id); } console.log(` ✅ ${usuarios.length} usuários removidos`); // Limpar funcionários const funcionarios = await ctx.db.query("funcionarios").collect(); for (const funcionario of funcionarios) { await ctx.db.delete(funcionario._id); } console.log(` ✅ ${funcionarios.length} funcionários removidos`); // Limpar símbolos const simbolos = await ctx.db.query("simbolos").collect(); for (const simbolo of simbolos) { await ctx.db.delete(simbolo._id); } console.log(` ✅ ${simbolos.length} símbolos removidos`); // Limpar solicitações de acesso const solicitacoes = await ctx.db.query("solicitacoesAcesso").collect(); for (const solicitacao of solicitacoes) { await ctx.db.delete(solicitacao._id); } console.log(` ✅ ${solicitacoes.length} solicitações removidas`); // Limpar menu-permissões const menuPermissoes = await ctx.db.query("menuPermissoes").collect(); for (const mp of menuPermissoes) { await ctx.db.delete(mp._id); } console.log(` ✅ ${menuPermissoes.length} menu-permissões removidas`); // Limpar menu-permissões personalizadas const menuPermissoesPersonalizadas = await ctx.db.query("menuPermissoesPersonalizadas").collect(); for (const mpp of menuPermissoesPersonalizadas) { await ctx.db.delete(mpp._id); } console.log(` ✅ ${menuPermissoesPersonalizadas.length} menu-permissões personalizadas removidas`); // Limpar role-permissões const rolePermissoes = await ctx.db.query("rolePermissoes").collect(); for (const rp of rolePermissoes) { await ctx.db.delete(rp._id); } console.log(` ✅ ${rolePermissoes.length} role-permissões removidas`); // Limpar permissões const permissoes = await ctx.db.query("permissoes").collect(); for (const permissao of permissoes) { await ctx.db.delete(permissao._id); } console.log(` ✅ ${permissoes.length} permissões removidas`); // Limpar roles const roles = await ctx.db.query("roles").collect(); for (const role of roles) { await ctx.db.delete(role._id); } console.log(` ✅ ${roles.length} roles removidas`); console.log("✨ Banco de dados limpo!"); return null; }, });