refactor: remove unused authentication files and dependencies; update package.json to streamline dependencies and improve project structure

This commit is contained in:
2025-10-29 18:57:05 -03:00
parent f219340cd8
commit 1058375a90
29 changed files with 1426 additions and 1542 deletions

View File

@@ -1,12 +1,15 @@
import { v } from "convex/values";
import { mutation, query } from "./_generated/server";
import { registrarAtividade } from "./logsAtividades";
import { api } from "./_generated/api";
import { Id } from "./_generated/dataModel";
/**
* Listar todos os perfis customizados
*/
export const listarPerfisCustomizados = query({
args: {},
returns: v.array(v.any()),
handler: async (ctx) => {
const perfis = await ctx.db.query("perfisCustomizados").collect();
@@ -15,7 +18,7 @@ export const listarPerfisCustomizados = query({
perfis.map(async (perfil) => {
const role = await ctx.db.get(perfil.roleId);
const criador = await ctx.db.get(perfil.criadoPor);
// Contar usuários usando este perfil
const usuarios = await ctx.db
.query("usuarios")
@@ -42,6 +45,16 @@ export const obterPerfilComPermissoes = query({
args: {
perfilId: v.id("perfisCustomizados"),
},
returns: v.union(
v.object({
perfil: v.any(),
role: v.any(),
permissoes: v.array(v.any()),
menuPermissoes: v.array(v.any()),
usuarios: v.array(v.any()),
}),
v.null()
),
handler: async (ctx, args) => {
const perfil = await ctx.db.get(args.perfilId);
if (!perfil) {
@@ -99,20 +112,31 @@ export const criarPerfilCustomizado = mutation({
criadoPorId: v.id("usuarios"),
},
returns: v.union(
v.object({ sucesso: v.literal(true), perfilId: v.id("perfisCustomizados") }),
v.object({
sucesso: v.literal(true),
perfilId: v.id("perfisCustomizados"),
}),
v.object({ sucesso: v.literal(false), erro: v.string() })
),
handler: async (ctx, args) => {
// Validar nível (deve ser >= 3)
if (args.nivel < 3) {
return { sucesso: false as const, erro: "Perfis customizados devem ter nível >= 3" };
return {
sucesso: false as const,
erro: "Perfis customizados devem ter nível >= 3",
};
}
// Verificar se nome já existe
const roles = await ctx.db.query("roles").collect();
const nomeExiste = roles.some((r) => r.nome.toLowerCase() === args.nome.toLowerCase());
const nomeExiste = roles.some(
(r) => r.nome.toLowerCase() === args.nome.toLowerCase()
);
if (nomeExiste) {
return { sucesso: false as const, erro: "Já existe um perfil com este nome" };
return {
sucesso: false as const,
erro: "Já existe um perfil com este nome",
};
}
// Criar role correspondente
@@ -130,7 +154,7 @@ export const criarPerfilCustomizado = mutation({
// Copiar permissões gerais
const permissoesClonar = await ctx.db
.query("rolePermissoes")
.withIndex("by_role", (q) => q.eq("roleId", args.clonarDeRoleId))
.withIndex("by_role", (q) => q.eq("roleId", args.clonarDeRoleId!))
.collect();
for (const perm of permissoesClonar) {
@@ -143,7 +167,7 @@ export const criarPerfilCustomizado = mutation({
// Copiar permissões de menu
const menuPermsClonar = await ctx.db
.query("menuPermissoes")
.withIndex("by_role", (q) => q.eq("roleId", args.clonarDeRoleId))
.withIndex("by_role", (q) => q.eq("roleId", args.clonarDeRoleId!))
.collect();
for (const menuPerm of menuPermsClonar) {
@@ -321,7 +345,10 @@ export const clonarPerfil = mutation({
criadoPorId: v.id("usuarios"),
},
returns: v.union(
v.object({ sucesso: v.literal(true), perfilId: v.id("perfisCustomizados") }),
v.object({
sucesso: v.literal(true),
perfilId: v.id("perfisCustomizados"),
}),
v.object({ sucesso: v.literal(false), erro: v.string() })
),
handler: async (ctx, args) => {
@@ -330,17 +357,80 @@ export const clonarPerfil = mutation({
return { sucesso: false as const, erro: "Perfil origem não encontrado" };
}
// Criar novo perfil clonando o original
const resultado = await criarPerfilCustomizado(ctx, {
// Verificar se nome já existe
const roles = await ctx.db.query("roles").collect();
const nomeExiste = roles.some(
(r) => r.nome.toLowerCase() === args.novoNome.toLowerCase()
);
if (nomeExiste) {
return {
sucesso: false as const,
erro: "Já existe um perfil com este nome",
};
}
// Criar role correspondente
const roleId = await ctx.db.insert("roles", {
nome: args.novoNome.toLowerCase().replace(/\s+/g, "_"),
descricao: args.novaDescricao,
nivel: perfilOrigem.nivel,
customizado: true,
criadoPor: args.criadoPorId,
editavel: true,
});
// Copiar permissões gerais do perfil de origem
const permissoesClonar = await ctx.db
.query("rolePermissoes")
.withIndex("by_role", (q) => q.eq("roleId", perfilOrigem.roleId))
.collect();
for (const perm of permissoesClonar) {
await ctx.db.insert("rolePermissoes", {
roleId,
permissaoId: perm.permissaoId,
});
}
// Copiar permissões de menu
const menuPermsClonar = await ctx.db
.query("menuPermissoes")
.withIndex("by_role", (q) => q.eq("roleId", perfilOrigem.roleId))
.collect();
for (const menuPerm of menuPermsClonar) {
await ctx.db.insert("menuPermissoes", {
roleId,
menuPath: menuPerm.menuPath,
podeAcessar: menuPerm.podeAcessar,
podeConsultar: menuPerm.podeConsultar,
podeGravar: menuPerm.podeGravar,
});
}
// Criar perfil customizado
const perfilId = await ctx.db.insert("perfisCustomizados", {
nome: args.novoNome,
descricao: args.novaDescricao,
nivel: perfilOrigem.nivel,
clonarDeRoleId: perfilOrigem.roleId,
criadoPorId: args.criadoPorId,
roleId,
criadoPor: args.criadoPorId,
criadoEm: Date.now(),
atualizadoEm: Date.now(),
});
return resultado;
// Log de atividade
await registrarAtividade(
ctx as any,
args.criadoPorId,
"criar",
"perfis",
JSON.stringify({
perfilId,
nome: args.novoNome,
nivel: perfilOrigem.nivel,
}),
perfilId
);
return { sucesso: true as const, perfilId };
},
});