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