From 875b2ef2015f3abbd8c1c1a2e3c444261cb49c53 Mon Sep 17 00:00:00 2001 From: killer-cf Date: Fri, 31 Oct 2025 10:14:09 -0300 Subject: [PATCH] refactor: update user seeding logic and enhance database cleanup process - Modified user seeding logic to use a variable for the TI Master user ID and updated the admin user matricula. - Improved the database cleanup function by adding detailed logging and restructuring the deletion process for various entities, ensuring a more organized and comprehensive cleanup. --- bun.lock | 2 +- packages/backend/convex/seed.ts | 325 ++++++++++++++++++++++++++------ 2 files changed, 270 insertions(+), 57 deletions(-) diff --git a/bun.lock b/bun.lock index 192099c..21e4aab 100644 --- a/bun.lock +++ b/bun.lock @@ -61,7 +61,6 @@ "version": "1.0.0", "dependencies": { "@dicebear/avataaars": "^9.2.4", - "@types/nodemailer": "^7.0.3", "convex": "catalog:", "nodemailer": "^7.0.10", }, @@ -70,6 +69,7 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/node": "^24.3.0", + "@types/nodemailer": "^7.0.3", "@types/pako": "^2.0.4", "@types/raf": "^3.4.3", "@types/trusted-types": "^2.0.7", diff --git a/packages/backend/convex/seed.ts b/packages/backend/convex/seed.ts index 29ec545..6c3745d 100644 --- a/packages/backend/convex/seed.ts +++ b/packages/backend/convex/seed.ts @@ -340,7 +340,7 @@ export const seedDatabase = internalMutation({ // TI Master const senhaTIMaster = await hashPassword("TI@123"); - await ctx.db.insert("usuarios", { + const usuarioTIMasterId = await ctx.db.insert("usuarios", { matricula: "1000", senhaHash: senhaTIMaster, nome: "Gestor TI Master", @@ -357,7 +357,7 @@ export const seedDatabase = internalMutation({ // Admin (permissões configuráveis) const senhaAdmin = await hashPassword("Admin@123"); const adminId = await ctx.db.insert("usuarios", { - matricula: "2000", + matricula: "0000", senhaHash: senhaAdmin, nome: "Administrador Geral", email: "admin@sgse.pe.gov.br", @@ -368,7 +368,7 @@ export const seedDatabase = internalMutation({ criadoEm: Date.now(), atualizadoEm: Date.now(), }); - console.log(" ✅ Admin criado (matrícula: 2000, senha: Admin@123)"); + console.log(" ✅ Admin criado (matrícula: 0000, senha: Admin@123)"); // 2.1 Criar catálogo de permissões por ação e conceder a Admin/TI console.log("🔐 Criando permissões por ação..."); @@ -495,16 +495,33 @@ export const seedDatabase = internalMutation({ // 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, + const dadosSolicitacao: { + nome: string; + matricula: string; + email: string; + telefone: string; + status: "pendente" | "aprovado" | "rejeitado"; + dataSolicitacao: number; + dataResposta?: number; + observacoes?: string; + } = { nome: solicitacao.nome, - observacoes: solicitacao.observacoes, - status: solicitacao.status, + matricula: solicitacao.matricula, + email: solicitacao.email, telefone: solicitacao.telefone, - }); + status: solicitacao.status, + dataSolicitacao: solicitacao.dataSolicitacao, + }; + + if (solicitacao.dataResposta) { + dadosSolicitacao.dataResposta = solicitacao.dataResposta; + } + + if (solicitacao.observacoes) { + dadosSolicitacao.observacoes = solicitacao.observacoes; + } + + await ctx.db.insert("solicitacoesAcesso", dadosSolicitacao); console.log(` ✅ Solicitação criada: ${solicitacao.nome}`); } @@ -592,56 +609,206 @@ export const clearDatabase = internalMutation({ 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) { + // Limpar em ordem (respeitando dependências) + + // 1. Tabelas de logs e auditoria + const logsAcesso = await ctx.db.query("logsAcesso").collect(); + for (const log of logsAcesso) { await ctx.db.delete(log._id); } - console.log(` ✅ ${logs.length} logs de acesso removidos`); + console.log(` ✅ ${logsAcesso.length} logs de acesso removidos`); - // Limpar sessões + const logsLogin = await ctx.db.query("logsLogin").collect(); + for (const log of logsLogin) { + await ctx.db.delete(log._id); + } + console.log(` ✅ ${logsLogin.length} logs de login removidos`); + + const logsAtividades = await ctx.db.query("logsAtividades").collect(); + for (const log of logsAtividades) { + await ctx.db.delete(log._id); + } + console.log(` ✅ ${logsAtividades.length} logs de atividades removidos`); + + // 2. Sistema de chat + const leituras = await ctx.db.query("leituras").collect(); + for (const leitura of leituras) { + await ctx.db.delete(leitura._id); + } + console.log(` ✅ ${leituras.length} leituras removidas`); + + const mensagens = await ctx.db.query("mensagens").collect(); + for (const mensagem of mensagens) { + await ctx.db.delete(mensagem._id); + } + console.log(` ✅ ${mensagens.length} mensagens removidas`); + + const digitando = await ctx.db.query("digitando").collect(); + for (const d of digitando) { + await ctx.db.delete(d._id); + } + console.log(` ✅ ${digitando.length} registros de digitando removidos`); + + const conversas = await ctx.db.query("conversas").collect(); + for (const conversa of conversas) { + await ctx.db.delete(conversa._id); + } + console.log(` ✅ ${conversas.length} conversas removidas`); + + // 3. Notificações + const notificacoes = await ctx.db.query("notificacoes").collect(); + for (const notificacao of notificacoes) { + await ctx.db.delete(notificacao._id); + } + console.log(` ✅ ${notificacoes.length} notificações removidas`); + + const notificacoesEmail = await ctx.db.query("notificacoesEmail").collect(); + for (const email of notificacoesEmail) { + await ctx.db.delete(email._id); + } + console.log( + ` ✅ ${notificacoesEmail.length} notificações de email removidas` + ); + + const notificacoesFerias = await ctx.db + .query("notificacoesFerias") + .collect(); + for (const notif of notificacoesFerias) { + await ctx.db.delete(notif._id); + } + console.log( + ` ✅ ${notificacoesFerias.length} notificações de férias removidas` + ); + + // 4. Férias e períodos aquisitivos + const solicitacoesFerias = await ctx.db + .query("solicitacoesFerias") + .collect(); + for (const solicitacao of solicitacoesFerias) { + await ctx.db.delete(solicitacao._id); + } + console.log( + ` ✅ ${solicitacoesFerias.length} solicitações de férias removidas` + ); + + const periodosAquisitivos = await ctx.db + .query("periodosAquisitivos") + .collect(); + for (const periodo of periodosAquisitivos) { + await ctx.db.delete(periodo._id); + } + console.log( + ` ✅ ${periodosAquisitivos.length} períodos aquisitivos removidos` + ); + + // 5. Atestados + const atestados = await ctx.db.query("atestados").collect(); + for (const atestado of atestados) { + await ctx.db.delete(atestado._id); + } + console.log(` ✅ ${atestados.length} atestados removidos`); + + // 6. Times e membros + const timesMembros = await ctx.db.query("timesMembros").collect(); + for (const membro of timesMembros) { + await ctx.db.delete(membro._id); + } + console.log(` ✅ ${timesMembros.length} membros de times removidos`); + + const times = await ctx.db.query("times").collect(); + for (const time of times) { + await ctx.db.delete(time._id); + } + console.log(` ✅ ${times.length} times removidos`); + + // 7. Cursos + const cursos = await ctx.db.query("cursos").collect(); + for (const curso of cursos) { + await ctx.db.delete(curso._id); + } + console.log(` ✅ ${cursos.length} cursos removidos`); + + // 8. Bloqueios de usuários + const bloqueiosUsuarios = await ctx.db.query("bloqueiosUsuarios").collect(); + for (const bloqueio of bloqueiosUsuarios) { + await ctx.db.delete(bloqueio._id); + } + console.log( + ` ✅ ${bloqueiosUsuarios.length} bloqueios de usuários removidos` + ); + + // 9. Perfis customizados + const perfisCustomizados = await ctx.db + .query("perfisCustomizados") + .collect(); + for (const perfil of perfisCustomizados) { + await ctx.db.delete(perfil._id); + } + console.log( + ` ✅ ${perfisCustomizados.length} perfis customizados removidos` + ); + + // 10. Templates de mensagens + const templatesMensagens = await ctx.db + .query("templatesMensagens") + .collect(); + for (const template of templatesMensagens) { + await ctx.db.delete(template._id); + } + console.log( + ` ✅ ${templatesMensagens.length} templates de mensagens removidos` + ); + + // 11. Configurações + const configuracaoEmail = await ctx.db.query("configuracaoEmail").collect(); + for (const config of configuracaoEmail) { + await ctx.db.delete(config._id); + } + console.log( + ` ✅ ${configuracaoEmail.length} configurações de email removidas` + ); + + const configuracaoAcesso = await ctx.db + .query("configuracaoAcesso") + .collect(); + for (const config of configuracaoAcesso) { + await ctx.db.delete(config._id); + } + console.log( + ` ✅ ${configuracaoAcesso.length} configurações de acesso removidas` + ); + + // 12. Monitoramento + const alertHistory = await ctx.db.query("alertHistory").collect(); + for (const alert of alertHistory) { + await ctx.db.delete(alert._id); + } + console.log(` ✅ ${alertHistory.length} histórico de alertas removido`); + + const alertConfigurations = await ctx.db + .query("alertConfigurations") + .collect(); + for (const alert of alertConfigurations) { + await ctx.db.delete(alert._id); + } + console.log( + ` ✅ ${alertConfigurations.length} configurações de alertas removidas` + ); + + const systemMetrics = await ctx.db.query("systemMetrics").collect(); + for (const metric of systemMetrics) { + await ctx.db.delete(metric._id); + } + console.log(` ✅ ${systemMetrics.length} métricas do sistema removidas`); + + // 13. 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 + // 14. Menu-permissões personalizadas const menuPermissoesPersonalizadas = await ctx.db .query("menuPermissoesPersonalizadas") .collect(); @@ -652,28 +819,74 @@ export const clearDatabase = internalMutation({ ` ✅ ${menuPermissoesPersonalizadas.length} menu-permissões personalizadas removidas` ); - // Limpar role-permissões + // 15. 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`); + + // 16. 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 + // 17. 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 + // 18. Usuários (deve vir antes de roles se houver referência) + 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`); + + // 19. 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`); + + // 20. Solicitações de acesso + const solicitacoesAcesso = await ctx.db + .query("solicitacoesAcesso") + .collect(); + for (const solicitacao of solicitacoesAcesso) { + await ctx.db.delete(solicitacao._id); + } + console.log( + ` ✅ ${solicitacoesAcesso.length} solicitações de acesso removidas` + ); + + // 21. 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`); + + // 22. Roles (deve vir por último se outras tabelas referenciam) 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!"); + // 23. Todos (tabela de exemplo) + const todos = await ctx.db.query("todos").collect(); + for (const todo of todos) { + await ctx.db.delete(todo._id); + } + console.log(` ✅ ${todos.length} todos removidos`); + + console.log("✨ Banco de dados completamente limpo!"); return null; }, });