Ya perdí el hilo de los cambios pero ahi van.
This commit is contained in:
		| @@ -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); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user