using AutoMapper; using BlackRock.Reporting.API.Core; using BlackRock.Reporting.API.Models; using MediatR; namespace BlackRock.Reporting.API.Mediator { public class GetUsersQuery : IRequest> { public Guid Id { get; } public GetUsersQuery(Guid id) { this.Id = id; } } public class GetUsersQueryHandlers : IRequestHandler> { private readonly ILogger logger; private readonly IMapper mapper; private readonly IUsersRepository repository; private readonly IUnitOfWork unitOfWork; public GetUsersQueryHandlers(ILogger logger, IMapper mapper, IUsersRepository repository, IUnitOfWork unitOfWork) { this.unitOfWork = unitOfWork; this.repository = repository; this.mapper = mapper; this.logger = logger; } public async Task> Handle(GetUsersQuery command, CancellationToken cancellationToken) { if (command.Id == Guid.Empty) throw new ArgumentException($"Parameter {nameof(command.Id)} must not be null or empty"); logger.LogInformation("Getting user ..."); try { var user = await repository.GetByIdAsync(command.Id); var userDto = mapper.Map(user); logger.LogInformation($"The user with id {user.Id} has been founded successfully"); return new Result { Data = userDto }; } catch (Exception ex) { return new Result { IsSuccess = false, Error = "Faild to fetch data from DB." }; } } } }