feat: enhance employee management UI with state management, responsive chart dimensions, and duplicate symbol removal functionality in backend

This commit is contained in:
2025-10-28 11:58:45 -03:00
parent ee2c9c3ae0
commit d41a7cea1b
4 changed files with 186 additions and 41 deletions

View File

@@ -137,4 +137,52 @@ export const update = mutation({
});
return null;
},
});
/**
* Remove símbolos duplicados, mantendo apenas a primeira ocorrência de cada símbolo
*/
export const removerDuplicados = mutation({
args: {},
returns: v.object({
removidos: v.number(),
mantidos: v.number(),
}),
handler: async (ctx) => {
const todosSimbolos = await ctx.db.query("simbolos").collect();
// Agrupar símbolos por nome
const simbolosPorNome = new Map<string, typeof todosSimbolos>();
for (const simbolo of todosSimbolos) {
const key = simbolo.nome.trim().toLowerCase();
if (!simbolosPorNome.has(key)) {
simbolosPorNome.set(key, []);
}
simbolosPorNome.get(key)!.push(simbolo);
}
let removidos = 0;
let mantidos = 0;
// Para cada grupo de símbolos com o mesmo nome
for (const [nome, simbolos] of simbolosPorNome) {
// Ordenar por _creationTime (mais antigo primeiro)
simbolos.sort((a, b) => a._creationTime - b._creationTime);
// Manter o primeiro (mais antigo) e remover os demais
const [primeiro, ...duplicados] = simbolos;
mantidos++;
// Remover duplicados
for (const duplicado of duplicados) {
await ctx.db.delete(duplicado._id);
removidos++;
}
}
console.log(`✅ Remoção concluída: ${mantidos} símbolos mantidos, ${removidos} duplicados removidos`);
return { removidos, mantidos };
},
});