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:
@@ -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[] = [];
|
||||
|
||||
Reference in New Issue
Block a user