You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GetUserQuery.cs 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using AutoMapper;
  2. using BlackRock.Reporting.API.Mediator.UserMediator.Dto;
  3. using BlackRock.Reporting.API.Mediator.UserMediator.Model;
  4. using BlackRock.Reporting.API.Core.Models;
  5. using MediatR;
  6. using BlackRock.Reporting.API.Core.Interfaces;
  7. namespace BlackRock.Reporting.API.Mediator.UserMediator.Queries
  8. {
  9. public class GetUserQuery : IRequest<Result<UserDto>>
  10. {
  11. public int Id { get; set; }
  12. }
  13. public class GetUserQueryHandlers : IRequestHandler<GetUserQuery, Result<UserDto>>
  14. {
  15. private readonly ILogger<GetUserQueryHandlers> logger;
  16. private readonly IMapper mapper;
  17. private readonly IUsersRepository repository;
  18. private readonly IUnitOfWork unitOfWork;
  19. public GetUserQueryHandlers(ILogger<GetUserQueryHandlers> logger, IMapper mapper, IUsersRepository repository, IUnitOfWork unitOfWork)
  20. {
  21. this.unitOfWork = unitOfWork;
  22. this.repository = repository;
  23. this.mapper = mapper;
  24. this.logger = logger;
  25. }
  26. public async Task<Result<UserDto>> Handle(GetUserQuery command, CancellationToken cancellationToken)
  27. {
  28. if (command.Id <= 0)
  29. throw new ArgumentException($"Parameter {nameof(command.Id)} must not be grater than 0");
  30. logger.LogInformation("Getting user ...");
  31. try
  32. {
  33. var user = await repository.GetByIdAsync(command.Id);
  34. var userDto = mapper.Map<User, UserDto>(user);
  35. logger.LogInformation($"The user with id {user.Id} has been founded successfully");
  36. return new Result<UserDto> { Data = userDto };
  37. }
  38. catch (Exception ex)
  39. {
  40. return new Result<UserDto> { IsSuccess = false, Error = "Faild to fetch data from DB." };
  41. }
  42. }
  43. }
  44. }