Ya perdí el hilo de los cambios pero ahi van.

This commit is contained in:
2025-05-23 15:47:39 -03:00
parent e7e185a9cb
commit 3c1fe15b1f
141 changed files with 9764 additions and 190 deletions

View File

@@ -1,4 +1,5 @@
using GestionIntegral.Api.Dtos.Usuarios;
using GestionIntegral.Api.Dtos.Usuarios.Auditoria;
using System.Collections.Generic;
using System.Threading.Tasks;
@@ -13,6 +14,7 @@ namespace GestionIntegral.Api.Services.Usuarios
Task<(bool Exito, string? Error)> SetPasswordAsync(int userId, SetPasswordRequestDto setPasswordDto, int idUsuarioModificador);
// Habilitar/Deshabilitar podría ser un método separado o parte de UpdateAsync
Task<(bool Exito, string? Error)> CambiarEstadoHabilitadoAsync(int userId, bool habilitar, int idUsuarioModificador);
Task<IEnumerable<UsuarioHistorialDto>> ObtenerHistorialPorUsuarioIdAsync(int idUsuarioAfectado, DateTime? fechaDesde, DateTime? fechaHasta);
Task<IEnumerable<UsuarioHistorialDto>> ObtenerTodoElHistorialAsync(DateTime? fechaDesde, DateTime? fechaHasta, int? idUsuarioModificoFilter, string? tipoModFilter);
}
}

View File

@@ -1,6 +1,7 @@
using GestionIntegral.Api.Data;
using GestionIntegral.Api.Data.Repositories.Usuarios;
using GestionIntegral.Api.Dtos.Usuarios;
using GestionIntegral.Api.Dtos.Usuarios.Auditoria;
using GestionIntegral.Api.Models.Usuarios; // Para Usuario
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
@@ -79,7 +80,7 @@ namespace GestionIntegral.Api.Services.Usuarios
{
return (null, "El perfil seleccionado no es válido.");
}
if(createDto.User.Equals(createDto.Password, System.StringComparison.OrdinalIgnoreCase))
if (createDto.User.Equals(createDto.Password, System.StringComparison.OrdinalIgnoreCase))
{
return (null, "La contraseña no puede ser igual al nombre de usuario.");
}
@@ -112,11 +113,18 @@ namespace GestionIntegral.Api.Services.Usuarios
transaction.Commit();
// Construir el DTO para la respuesta
var dto = new UsuarioDto {
Id = usuarioCreado.Id, User = usuarioCreado.User, Habilitada = usuarioCreado.Habilitada, SupAdmin = usuarioCreado.SupAdmin,
Nombre = usuarioCreado.Nombre, Apellido = usuarioCreado.Apellido, IdPerfil = usuarioCreado.IdPerfil,
var dto = new UsuarioDto
{
Id = usuarioCreado.Id,
User = usuarioCreado.User,
Habilitada = usuarioCreado.Habilitada,
SupAdmin = usuarioCreado.SupAdmin,
Nombre = usuarioCreado.Nombre,
Apellido = usuarioCreado.Apellido,
IdPerfil = usuarioCreado.IdPerfil,
NombrePerfil = perfilSeleccionado.NombrePerfil, // Usamos el nombre del perfil ya obtenido
DebeCambiarClave = usuarioCreado.DebeCambiarClave, VerLog = usuarioCreado.VerLog
DebeCambiarClave = usuarioCreado.DebeCambiarClave,
VerLog = usuarioCreado.VerLog
};
_logger.LogInformation("Usuario ID {UsuarioId} creado por Usuario ID {CreadorId}.", usuarioCreado.Id, idUsuarioCreador);
return (dto, null);
@@ -160,8 +168,9 @@ namespace GestionIntegral.Api.Services.Usuarios
_logger.LogInformation("Usuario ID {UsuarioId} actualizado por Usuario ID {ModificadorId}.", id, idUsuarioModificador);
return (true, null);
}
catch (KeyNotFoundException) {
try { transaction.Rollback(); } catch { /* Log */ }
catch (KeyNotFoundException)
{
try { transaction.Rollback(); } catch { /* Log */ }
return (false, "Usuario no encontrado durante la actualización.");
}
catch (Exception ex)
@@ -176,9 +185,9 @@ namespace GestionIntegral.Api.Services.Usuarios
var usuario = await _usuarioRepository.GetByIdAsync(userId);
if (usuario == null) return (false, "Usuario no encontrado.");
if(usuario.User.Equals(setPasswordDto.NewPassword, System.StringComparison.OrdinalIgnoreCase))
if (usuario.User.Equals(setPasswordDto.NewPassword, System.StringComparison.OrdinalIgnoreCase))
{
return (false, "La nueva contraseña no puede ser igual al nombre de usuario.");
return (false, "La nueva contraseña no puede ser igual al nombre de usuario.");
}
(string hash, string salt) = _passwordHasher.HashPassword(setPasswordDto.NewPassword);
@@ -189,14 +198,15 @@ namespace GestionIntegral.Api.Services.Usuarios
try
{
var success = await _usuarioRepository.SetPasswordAsync(userId, hash, salt, setPasswordDto.ForceChangeOnNextLogin, idUsuarioModificador, transaction);
if(!success) throw new DataException("Error al actualizar la contraseña en el repositorio.");
if (!success) throw new DataException("Error al actualizar la contraseña en el repositorio.");
transaction.Commit();
_logger.LogInformation("Contraseña establecida para Usuario ID {TargetUserId} por Usuario ID {AdminUserId}.", userId, idUsuarioModificador);
return (true, null);
}
catch (KeyNotFoundException) {
try { transaction.Rollback(); } catch { /* Log */ }
catch (KeyNotFoundException)
{
try { transaction.Rollback(); } catch { /* Log */ }
return (false, "Usuario no encontrado durante el cambio de contraseña.");
}
catch (Exception ex)
@@ -207,7 +217,7 @@ namespace GestionIntegral.Api.Services.Usuarios
}
}
public async Task<(bool Exito, string? Error)> CambiarEstadoHabilitadoAsync(int userId, bool habilitar, int idUsuarioModificador)
public async Task<(bool Exito, string? Error)> CambiarEstadoHabilitadoAsync(int userId, bool habilitar, int idUsuarioModificador)
{
var usuario = await _usuarioRepository.GetByIdAsync(userId);
if (usuario == null) return (false, "Usuario no encontrado.");
@@ -225,22 +235,34 @@ namespace GestionIntegral.Api.Services.Usuarios
try
{
var actualizado = await _usuarioRepository.UpdateAsync(usuario, idUsuarioModificador, transaction);
if (!actualizado) throw new DataException("Error al cambiar estado de habilitación del usuario en el repositorio.");
if (!actualizado) throw new DataException("Error al cambiar estado de habilitación del usuario en el repositorio.");
transaction.Commit();
_logger.LogInformation("Estado de habilitación cambiado a {Estado} para Usuario ID {TargetUserId} por Usuario ID {AdminUserId}.", habilitar, userId, idUsuarioModificador);
return (true, null);
}
catch (KeyNotFoundException) {
try { transaction.Rollback(); } catch { /* Log */ }
catch (KeyNotFoundException)
{
try { transaction.Rollback(); } catch { /* Log */ }
return (false, "Usuario no encontrado durante el cambio de estado.");
}
catch (Exception ex)
{
try { transaction.Rollback(); } catch { /* Log */ }
try { transaction.Rollback(); } catch { /* Log */ }
_logger.LogError(ex, "Error al cambiar estado de habilitación para Usuario ID {TargetUserId}.", userId);
return (false, $"Error interno al cambiar estado de habilitación: {ex.Message}");
}
}
public async Task<IEnumerable<UsuarioHistorialDto>> ObtenerHistorialPorUsuarioIdAsync(int idUsuarioAfectado, DateTime? fechaDesde, DateTime? fechaHasta)
{
// Aquí podrías añadir validaciones extra si fuera necesario antes de llamar al repo
return await _usuarioRepository.GetHistorialByUsuarioIdAsync(idUsuarioAfectado, fechaDesde, fechaHasta);
}
public async Task<IEnumerable<UsuarioHistorialDto>> ObtenerTodoElHistorialAsync(DateTime? fechaDesde, DateTime? fechaHasta, int? idUsuarioModificoFilter, string? tipoModFilter)
{
// Aquí podrías añadir validaciones extra
return await _usuarioRepository.GetAllHistorialAsync(fechaDesde, fechaHasta, idUsuarioModificoFilter, tipoModFilter);
}
}
}