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.
This commit is contained in:
2025-11-04 14:37:28 -03:00
parent d0692c3608
commit fbec5c46c2
10 changed files with 1250 additions and 587 deletions

View File

@@ -3,7 +3,7 @@ import { v } from "convex/values";
import { Id, Doc } from "./_generated/dataModel";
/**
* Verificar duplicatas de matrícula
* Verificar duplicatas de matrícula (agora busca do funcionário associado)
*/
export const verificarDuplicatas = query({
args: {},
@@ -23,18 +23,27 @@ export const verificarDuplicatas = query({
handler: async (ctx) => {
const usuarios = await ctx.db.query("usuarios").collect();
// Agrupar por matrícula
const gruposPorMatricula = usuarios.reduce((acc, usuario) => {
if (!acc[usuario.matricula]) {
acc[usuario.matricula] = [];
// Agrupar por matrícula do funcionário associado
const gruposPorMatricula: Record<string, Array<{ _id: Id<"usuarios">; nome: string; email: string }>> = {};
for (const usuario of usuarios) {
let matricula: string | undefined = undefined;
if (usuario.funcionarioId) {
const funcionario = await ctx.db.get(usuario.funcionarioId);
matricula = funcionario?.matricula;
}
acc[usuario.matricula].push({
_id: usuario._id,
nome: usuario.nome,
email: usuario.email || "",
});
return acc;
}, {} as Record<string, Array<{ _id: Id<"usuarios">; nome: string; email: string }>>);
if (matricula) {
if (!gruposPorMatricula[matricula]) {
gruposPorMatricula[matricula] = [];
}
gruposPorMatricula[matricula].push({
_id: usuario._id,
nome: usuario.nome,
email: usuario.email || "",
});
}
}
// Filtrar apenas duplicatas
const duplicatas = Object.entries(gruposPorMatricula)
@@ -50,7 +59,7 @@ export const verificarDuplicatas = query({
});
/**
* Remover duplicatas mantendo apenas o mais recente
* Remover duplicatas mantendo apenas o mais recente (agora busca do funcionário associado)
*/
export const removerDuplicatas = internalMutation({
args: {},
@@ -61,14 +70,23 @@ export const removerDuplicatas = internalMutation({
handler: async (ctx) => {
const usuarios = await ctx.db.query("usuarios").collect();
// Agrupar por matrícula
const gruposPorMatricula = usuarios.reduce((acc, usuario) => {
if (!acc[usuario.matricula]) {
acc[usuario.matricula] = [];
// Agrupar por matrícula do funcionário associado
const gruposPorMatricula: Record<string, Doc<"usuarios">[]> = {};
for (const usuario of usuarios) {
let matricula: string | undefined = undefined;
if (usuario.funcionarioId) {
const funcionario = await ctx.db.get(usuario.funcionarioId);
matricula = funcionario?.matricula;
}
acc[usuario.matricula].push(usuario);
return acc;
}, {} as Record<string, Doc<"usuarios">[]>);
if (matricula) {
if (!gruposPorMatricula[matricula]) {
gruposPorMatricula[matricula] = [];
}
gruposPorMatricula[matricula].push(usuario);
}
}
let removidos = 0;
const matriculasDuplicadas: string[] = [];