feat: enhance employee management UI with state management, responsive chart dimensions, and duplicate symbol removal functionality in backend
This commit is contained in:
@@ -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 };
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user