using AutoMapper; using BlackRock.Reporting.API.Core; using BlackRock.Reporting.API.Models; using MediatR; namespace BlackRock.Reporting.API.Mediator { public class QueryResults { public int TotalItems { get; set; } public IEnumerable Items { get; set; } } public class UserQuery { public string SortBy { get; set; } public bool IsSortAscending { get; set; } public int Page { get; set; } public int PageSize { get; set; } } public class GetAllUsersQuery : IRequest>> { public UserQuery Filter { get; } public GetAllUsersQuery(UserQuery filter) { this.Filter = filter; } } public class GetAllUsersQueryHandlers : IRequestHandler>> { private readonly ILogger logger; private readonly IMapper mapper; private readonly IUnitOfWork unitOfWork; private readonly IUsersRepository repository; public GetAllUsersQueryHandlers(ILogger logger, IMapper mapper, IUsersRepository repository, IUnitOfWork unitOfWork) { this.repository = repository; this.unitOfWork = unitOfWork; this.mapper = mapper; this.logger = logger; } public async Task>> Handle(GetAllUsersQuery command, CancellationToken cancellationToken) { if (command.Filter == null) throw new ArgumentNullException($"Parameter {nameof(command.Filter)} must not be null"); logger.LogInformation("Getting users ..."); try { var users = await repository.GetAllAsync(); var usersDto = mapper.Map, IEnumerable>(users); var data = new QueryResults { Items = usersDto, TotalItems = usersDto.Count() }; logger.LogInformation($"The Users has been founded successfully"); return new Result> { Data = data }; } catch (Exception ex) { return new Result> { IsSuccess = false, Error = "Faild to fetch data from DB." }; } } } }