using SIGCM2.Application.Abstractions; using SIGCM2.Application.Abstractions.Persistence; using SIGCM2.Application.Roles.Dtos; using SIGCM2.Domain.Exceptions; namespace SIGCM2.Application.Roles.Deactivate; public sealed class DeactivateRolCommandHandler : ICommandHandler { private readonly IRolRepository _repository; public DeactivateRolCommandHandler(IRolRepository repository) { _repository = repository; } public async Task Handle(DeactivateRolCommand command) { var existing = await _repository.GetByCodigoAsync(command.Codigo) ?? throw new RolNotFoundException(command.Codigo); // Guard: block soft-delete when active usuarios reference this rol. if (await _repository.HasActiveUsuariosAsync(command.Codigo)) throw new RolInUseException(command.Codigo); var updated = await _repository.UpdateAsync( existing.Codigo, existing.Nombre, existing.Descripcion, activo: false); if (!updated) throw new RolNotFoundException(command.Codigo); var rol = await _repository.GetByCodigoAsync(command.Codigo) ?? throw new RolNotFoundException(command.Codigo); return new RolDto(rol.Id, rol.Codigo, rol.Nombre, rol.Descripcion, rol.Activo, rol.FechaCreacion, rol.FechaModificacion); } }