Files
sgse-app/packages/backend/convex/seed.ts
killer-cf fbec5c46c2 feat: enhance user management with matricula retrieval and validation
- Updated user-related queries and mutations to retrieve the matricula from associated funcionario records, improving data accuracy.
- Refactored user creation and listing functionalities to ensure matricula is correctly handled and displayed.
- Enhanced error handling and validation for user operations, ensuring a more robust user management experience.
- Improved the overall structure of user-related code for better maintainability and clarity.
2025-11-04 14:37:28 -03:00

955 lines
29 KiB
TypeScript

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<string, Id<"simbolos">>();
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<string, Id<"funcionarios">>();
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", {
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,
};
},
});