import { internalMutation, mutation, query } from "./_generated/server"; import { internal } from "./_generated/api"; import { v } from "convex/values"; import { hashPassword } from "./auth/utils"; import { Id } from "./_generated/dataModel"; // 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 (Perfis de Acesso) console.log("🔐 Criando roles..."); // TI_MASTER - Nível 0 - Acesso total irrestrito const roleTIMaster = await ctx.db.insert("roles", { nome: "ti_master", descricao: "TI Master", nivel: 0, setor: "ti", customizado: false, editavel: false, }); console.log(" ✅ Role criada: ti_master (Nível 0 - Acesso Total)"); // ADMIN - Nível 2 - Permissões configuráveis const roleAdmin = await ctx.db.insert("roles", { nome: "admin", descricao: "Administrador Geral", nivel: 2, setor: "administrativo", customizado: false, editavel: true, // Permissões configuráveis }); console.log(" ✅ Role criada: admin (Nível 2 - Configurável)"); // TI_USUARIO - Nível 2 - Suporte técnico const roleTIUsuario = await ctx.db.insert("roles", { nome: "ti_usuario", descricao: "TI Usuário", nivel: 2, setor: "ti", customizado: false, editavel: true, }); console.log(" ✅ Role criada: ti_usuario (Nível 2 - Suporte)"); const roleRH = await ctx.db.insert("roles", { nome: "rh", descricao: "Recursos Humanos", nivel: 2, setor: "recursos_humanos", customizado: false, editavel: false, }); console.log(" ✅ Role criada: rh"); const roleFinanceiro = await ctx.db.insert("roles", { nome: "financeiro", descricao: "Financeiro", nivel: 2, setor: "financeiro", customizado: false, editavel: false, }); console.log(" ✅ Role criada: financeiro"); const roleUsuario = await ctx.db.insert("roles", { nome: "usuario", descricao: "Usuário Padrão", nivel: 3, setor: undefined, customizado: false, editavel: false, }); console.log(" ✅ Role criada: usuario (Nível 3 - Padrão)"); // 2. Criar Símbolos (Cargos) console.log("💰 Criando símbolos..."); const simbolosMap = new Map>(); for (const simbolo of simbolosData) { const simboloId = await ctx.db.insert("simbolos", { nome: simbolo.nome, descricao: simbolo.descricao, tipo: simbolo.tipo, valor: simbolo.valor, repValor: simbolo.repValor || "", vencValor: simbolo.vencValor || "", }); simbolosMap.set(simbolo.nome, simboloId); console.log(` ✅ Símbolo criado: ${simbolo.nome}`); } // 3. Criar Funcionários console.log("👥 Criando funcionários..."); const funcionariosMap = new Map>(); for (const funcionario of funcionariosData) { const simboloId = simbolosMap.get(funcionario.simboloNome); if (!simboloId) { console.log( ` ❌ 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 Id<"simbolos">, 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 Id<"funcionarios">, roleId: roleUsuario, 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) { const dadosSolicitacao: { nome: string; matricula: string; email: string; telefone: string; status: "pendente" | "aprovado" | "rejeitado"; dataSolicitacao: number; dataResposta?: number; observacoes?: string; } = { nome: solicitacao.nome, 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} (${solicitacao.status})` ); } console.log("✨ Seed do banco de dados concluído com sucesso!"); return null; } }); /** * Mutation pública para popular o banco de dados com os dados de seed * Permite executar via CLI: `npx convex run seed:popularBanco` */ export const popularBanco = mutation({ args: {}, returns: v.null(), handler: async (ctx) => { console.log("🌱 Executando popularBanco (wrapper público para seedDatabase)..."); // Chama a internalMutation para reaproveitar a lógica de seed await ctx.runMutation(internal.seed.seedDatabase, {}); console.log("✅ Seed concluído pelo wrapper público"); 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 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(` ✅ ${logsAcesso.length} logs de acesso removidos`); 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 // 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`); // 14. Menu-permissões personalizadas // 15. Menu-permissões // 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`); // 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`); // 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`); // 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; }, }); /** * Mutation pública para limpar o banco de dados (para uso via CLI) * ATENÇÃO: Esta função deleta TODOS os dados do banco! */ export const limparBanco = mutation({ args: {}, returns: v.null(), handler: async (ctx) => { // Executa diretamente a limpeza (mesmo código da internalMutation) console.log("🗑️ Limpando banco de dados..."); // 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(` ✅ ${logsAcesso.length} logs de acesso removidos`); 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 (já está no código da internalMutation mas vazio) // 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`); // 14. Menu-permissões personalizadas (já está no código da internalMutation mas vazio) // 15. Menu-permissões (já está no código da internalMutation mas vazio) // 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`); // 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`); // 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`); // 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; }, }); /** * Query para verificar quantos registros existem no banco */ export const verificarBanco = query({ args: {}, returns: v.object({ usuarios: v.number(), funcionarios: v.number(), roles: v.number(), simbolos: v.number(), total: v.number(), }), handler: async (ctx) => { const usuarios = await ctx.db.query("usuarios").collect(); const funcionarios = await ctx.db.query("funcionarios").collect(); const roles = await ctx.db.query("roles").collect(); const simbolos = await ctx.db.query("simbolos").collect(); return { usuarios: usuarios.length, funcionarios: funcionarios.length, roles: roles.length, simbolos: simbolos.length, total: usuarios.length + funcionarios.length + roles.length + simbolos.length, }; }, });