refactor: enhance role management UI and integrate profile management features
- Introduced a modal for managing user profiles, allowing for the creation and editing of profiles with improved state management. - Updated the role filtering logic to enhance type safety and readability. - Refactored UI components for better user experience, including improved button states and loading indicators. - Removed outdated code related to permissions and streamlined the overall structure for maintainability.
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import { internalMutation } from "./_generated/server";
|
||||
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 = [
|
||||
@@ -246,203 +248,41 @@ export const seedDatabase = internalMutation({
|
||||
});
|
||||
console.log(" ✅ Role criada: financeiro");
|
||||
|
||||
const roleControladoria = await ctx.db.insert("roles", {
|
||||
nome: "controladoria",
|
||||
descricao: "Controladoria",
|
||||
nivel: 2,
|
||||
setor: "controladoria",
|
||||
customizado: false,
|
||||
editavel: false,
|
||||
});
|
||||
console.log(" ✅ Role criada: controladoria");
|
||||
|
||||
const roleLicitacoes = await ctx.db.insert("roles", {
|
||||
nome: "licitacoes",
|
||||
descricao: "Licitações",
|
||||
nivel: 2,
|
||||
setor: "licitacoes",
|
||||
customizado: false,
|
||||
editavel: false,
|
||||
});
|
||||
console.log(" ✅ Role criada: licitacoes");
|
||||
|
||||
const roleCompras = await ctx.db.insert("roles", {
|
||||
nome: "compras",
|
||||
descricao: "Compras",
|
||||
nivel: 2,
|
||||
setor: "compras",
|
||||
customizado: false,
|
||||
editavel: false,
|
||||
});
|
||||
console.log(" ✅ Role criada: compras");
|
||||
|
||||
const roleJuridico = await ctx.db.insert("roles", {
|
||||
nome: "juridico",
|
||||
descricao: "Jurídico",
|
||||
nivel: 2,
|
||||
setor: "juridico",
|
||||
customizado: false,
|
||||
editavel: false,
|
||||
});
|
||||
console.log(" ✅ Role criada: juridico");
|
||||
|
||||
const roleComunicacao = await ctx.db.insert("roles", {
|
||||
nome: "comunicacao",
|
||||
descricao: "Comunicação",
|
||||
nivel: 2,
|
||||
setor: "comunicacao",
|
||||
customizado: false,
|
||||
editavel: false,
|
||||
});
|
||||
console.log(" ✅ Role criada: comunicacao");
|
||||
|
||||
const roleProgramasEsportivos = await ctx.db.insert("roles", {
|
||||
nome: "programas_esportivos",
|
||||
descricao: "Programas Esportivos",
|
||||
nivel: 2,
|
||||
setor: "programas_esportivos",
|
||||
customizado: false,
|
||||
editavel: false,
|
||||
});
|
||||
console.log(" ✅ Role criada: programas_esportivos");
|
||||
|
||||
const roleSecretariaExecutiva = await ctx.db.insert("roles", {
|
||||
nome: "secretaria_executiva",
|
||||
descricao: "Secretaria Executiva",
|
||||
nivel: 2,
|
||||
setor: "secretaria_executiva",
|
||||
customizado: false,
|
||||
editavel: false,
|
||||
});
|
||||
console.log(" ✅ Role criada: secretaria_executiva");
|
||||
|
||||
const roleGestaoPessoas = await ctx.db.insert("roles", {
|
||||
nome: "gestao_pessoas",
|
||||
descricao: "Gestão de Pessoas",
|
||||
nivel: 2,
|
||||
setor: "gestao_pessoas",
|
||||
customizado: false,
|
||||
editavel: false,
|
||||
});
|
||||
console.log(" ✅ Role criada: gestao_pessoas");
|
||||
|
||||
const roleUsuario = await ctx.db.insert("roles", {
|
||||
nome: "usuario",
|
||||
descricao: "Usuário Comum",
|
||||
nivel: 10,
|
||||
descricao: "Usuário Padrão",
|
||||
nivel: 3,
|
||||
setor: undefined,
|
||||
customizado: false,
|
||||
editavel: false,
|
||||
});
|
||||
console.log(" ✅ Role criada: usuario");
|
||||
console.log(" ✅ Role criada: usuario (Nível 3 - Padrão)");
|
||||
|
||||
// 2. Criar usuários iniciais
|
||||
console.log("👤 Criando usuários iniciais...");
|
||||
|
||||
// TI Master
|
||||
const senhaTIMaster = await hashPassword("TI@123");
|
||||
const usuarioTIMasterId = await ctx.db.insert("usuarios", {
|
||||
matricula: "1000",
|
||||
senhaHash: senhaTIMaster,
|
||||
nome: "Gestor TI Master",
|
||||
email: "ti.master@sgse.pe.gov.br",
|
||||
setor: "ti",
|
||||
roleId: roleTIMaster as any,
|
||||
ativo: true,
|
||||
primeiroAcesso: false,
|
||||
criadoEm: Date.now(),
|
||||
atualizadoEm: Date.now(),
|
||||
});
|
||||
console.log(" ✅ TI Master criado (matrícula: 1000, senha: TI@123)");
|
||||
|
||||
// Admin (permissões configuráveis)
|
||||
const senhaAdmin = await hashPassword("Admin@123");
|
||||
const adminId = await ctx.db.insert("usuarios", {
|
||||
matricula: "0000",
|
||||
senhaHash: senhaAdmin,
|
||||
nome: "Administrador Geral",
|
||||
email: "admin@sgse.pe.gov.br",
|
||||
setor: "administrativo",
|
||||
roleId: roleAdmin as any,
|
||||
ativo: true,
|
||||
primeiroAcesso: false,
|
||||
criadoEm: Date.now(),
|
||||
atualizadoEm: Date.now(),
|
||||
});
|
||||
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...");
|
||||
const CATALOGO_RECURSOS = [
|
||||
{ recurso: "dashboard", acoes: ["ver"] },
|
||||
{
|
||||
recurso: "funcionarios",
|
||||
acoes: ["ver", "listar", "criar", "editar", "excluir"],
|
||||
},
|
||||
{
|
||||
recurso: "simbolos",
|
||||
acoes: ["ver", "listar", "criar", "editar", "excluir"],
|
||||
},
|
||||
{
|
||||
recurso: "usuarios",
|
||||
acoes: ["ver", "listar", "criar", "editar", "excluir"],
|
||||
},
|
||||
{
|
||||
recurso: "perfis",
|
||||
acoes: ["ver", "listar", "criar", "editar", "excluir"],
|
||||
},
|
||||
] as const;
|
||||
|
||||
const permissaoKeyToId = new Map<string, string>();
|
||||
for (const item of CATALOGO_RECURSOS) {
|
||||
for (const acao of item.acoes) {
|
||||
const nome = `${item.recurso}.${acao}`;
|
||||
const id = await ctx.db.insert("permissoes", {
|
||||
nome,
|
||||
descricao: `Permite ${acao} em ${item.recurso}`,
|
||||
recurso: item.recurso,
|
||||
acao,
|
||||
});
|
||||
permissaoKeyToId.set(nome, id);
|
||||
}
|
||||
}
|
||||
console.log(` ✅ ${permissaoKeyToId.size} permissões criadas`);
|
||||
|
||||
// Conceder todas permissões a Admin e TI
|
||||
const rolesParaConceder = [roleAdmin, roleTIUsuario, roleTIMaster];
|
||||
for (const roleId of rolesParaConceder) {
|
||||
for (const [, permId] of permissaoKeyToId) {
|
||||
await ctx.db.insert("rolePermissoes", {
|
||||
roleId: roleId as any,
|
||||
permissaoId: permId as any,
|
||||
});
|
||||
}
|
||||
}
|
||||
console.log(" ✅ Todas as permissões concedidas a Admin e TI");
|
||||
|
||||
// 3. Inserir símbolos
|
||||
console.log("📝 Inserindo símbolos...");
|
||||
const simbolosMap = new Map<string, string>();
|
||||
// 2. Criar Símbolos (Cargos)
|
||||
console.log("💰 Criando símbolos...");
|
||||
const simbolosMap = new Map<string, Id<"simbolos">>();
|
||||
|
||||
for (const simbolo of simbolosData) {
|
||||
const id = await ctx.db.insert("simbolos", {
|
||||
descricao: simbolo.descricao,
|
||||
const simboloId = await ctx.db.insert("simbolos", {
|
||||
nome: simbolo.nome,
|
||||
repValor: simbolo.repValor,
|
||||
descricao: simbolo.descricao,
|
||||
tipo: simbolo.tipo,
|
||||
valor: simbolo.valor,
|
||||
vencValor: simbolo.vencValor,
|
||||
repValor: simbolo.repValor || "",
|
||||
vencValor: simbolo.vencValor || "",
|
||||
});
|
||||
simbolosMap.set(simbolo.nome, id);
|
||||
simbolosMap.set(simbolo.nome, simboloId);
|
||||
console.log(` ✅ Símbolo criado: ${simbolo.nome}`);
|
||||
}
|
||||
|
||||
// 4. Inserir funcionários
|
||||
console.log("👥 Inserindo funcionários...");
|
||||
const funcionariosMap = new Map<string, string>();
|
||||
// 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.error(
|
||||
console.log(
|
||||
` ❌ Símbolo não encontrado: ${funcionario.simboloNome}`
|
||||
);
|
||||
continue;
|
||||
@@ -459,7 +299,7 @@ export const seedDatabase = internalMutation({
|
||||
nascimento: funcionario.nascimento,
|
||||
nome: funcionario.nome,
|
||||
rg: funcionario.rg,
|
||||
simboloId: simboloId as any,
|
||||
simboloId: simboloId as Id<"simbolos">,
|
||||
simboloTipo: funcionario.simboloTipo,
|
||||
telefone: funcionario.telefone,
|
||||
uf: funcionario.uf,
|
||||
@@ -480,8 +320,8 @@ export const seedDatabase = internalMutation({
|
||||
senhaHash: senhaInicial,
|
||||
nome: funcionario.nome,
|
||||
email: funcionario.email,
|
||||
funcionarioId: funcId as any,
|
||||
roleId: roleUsuario as any,
|
||||
funcionarioId: funcId as Id<"funcionarios">,
|
||||
roleId: roleUsuario,
|
||||
ativo: true,
|
||||
primeiroAcesso: true,
|
||||
criadoEm: Date.now(),
|
||||
@@ -522,80 +362,28 @@ export const seedDatabase = internalMutation({
|
||||
}
|
||||
|
||||
await ctx.db.insert("solicitacoesAcesso", dadosSolicitacao);
|
||||
console.log(` ✅ Solicitação criada: ${solicitacao.nome}`);
|
||||
console.log(
|
||||
` ✅ Solicitação criada: ${solicitacao.nome} (${solicitacao.status})`
|
||||
);
|
||||
}
|
||||
|
||||
// 7. Criar templates de mensagens padrão
|
||||
console.log("📧 Criando templates de mensagens padrão...");
|
||||
const templatesPadrao = [
|
||||
{
|
||||
codigo: "USUARIO_BLOQUEADO",
|
||||
nome: "Usuário Bloqueado",
|
||||
titulo: "Sua conta foi bloqueada",
|
||||
corpo:
|
||||
"Sua conta no SGSE foi bloqueada.\\n\\nMotivo: {{motivo}}\\n\\nPara mais informações, entre em contato com a TI.",
|
||||
variaveis: ["motivo"],
|
||||
},
|
||||
{
|
||||
codigo: "USUARIO_DESBLOQUEADO",
|
||||
nome: "Usuário Desbloqueado",
|
||||
titulo: "Sua conta foi desbloqueada",
|
||||
corpo:
|
||||
"Sua conta no SGSE foi desbloqueada e você já pode acessar o sistema normalmente.",
|
||||
variaveis: [],
|
||||
},
|
||||
{
|
||||
codigo: "SENHA_RESETADA",
|
||||
nome: "Senha Resetada",
|
||||
titulo: "Sua senha foi resetada",
|
||||
corpo:
|
||||
"Sua senha foi resetada pela equipe de TI.\\n\\nNova senha temporária: {{senha}}\\n\\nPor favor, altere sua senha no próximo login.",
|
||||
variaveis: ["senha"],
|
||||
},
|
||||
{
|
||||
codigo: "PERMISSAO_ALTERADA",
|
||||
nome: "Permissão Alterada",
|
||||
titulo: "Suas permissões foram atualizadas",
|
||||
corpo:
|
||||
"Suas permissões de acesso ao sistema foram atualizadas.\\n\\nPara verificar suas novas permissões, acesse o menu de perfil.",
|
||||
variaveis: [],
|
||||
},
|
||||
{
|
||||
codigo: "AVISO_GERAL",
|
||||
nome: "Aviso Geral",
|
||||
titulo: "{{titulo}}",
|
||||
corpo: "{{mensagem}}",
|
||||
variaveis: ["titulo", "mensagem"],
|
||||
},
|
||||
{
|
||||
codigo: "BEM_VINDO",
|
||||
nome: "Boas-vindas",
|
||||
titulo: "Bem-vindo ao SGSE",
|
||||
corpo:
|
||||
"Olá {{nome}},\\n\\nSeja bem-vindo ao Sistema de Gestão da Secretaria de Esportes!\\n\\nSuas credenciais de acesso:\\nMatrícula: {{matricula}}\\nSenha temporária: {{senha}}\\n\\nPor favor, altere sua senha no primeiro acesso.\\n\\nEquipe de TI",
|
||||
variaveis: ["nome", "matricula", "senha"],
|
||||
},
|
||||
];
|
||||
console.log("✨ Seed do banco de dados concluído com sucesso!");
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
for (const template of templatesPadrao) {
|
||||
await ctx.db.insert("templatesMensagens", {
|
||||
codigo: template.codigo,
|
||||
nome: template.nome,
|
||||
tipo: "sistema" as const,
|
||||
titulo: template.titulo,
|
||||
corpo: template.corpo,
|
||||
variaveis: template.variaveis,
|
||||
criadoEm: Date.now(),
|
||||
});
|
||||
console.log(` ✅ Template criado: ${template.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(" TI: matrícula 1000, senha TI@123");
|
||||
console.log(" Funcionários: usar matrícula, senha Mudar@123");
|
||||
/**
|
||||
* 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;
|
||||
},
|
||||
});
|
||||
@@ -738,16 +526,7 @@ export const clearDatabase = internalMutation({
|
||||
);
|
||||
|
||||
// 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")
|
||||
@@ -809,23 +588,9 @@ export const clearDatabase = internalMutation({
|
||||
console.log(` ✅ ${sessoes.length} sessões removidas`);
|
||||
|
||||
// 14. 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`
|
||||
);
|
||||
|
||||
|
||||
// 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) {
|
||||
@@ -890,3 +655,301 @@ export const clearDatabase = internalMutation({
|
||||
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,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user