using AutoMapper; 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; public GetAllUsersQueryHandlers(ILogger logger, IMapper mapper) { 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 user ..."); try { var users = new List(); users.Add(new (){Id = new Guid(), Name = "John", Email = "john.done@dilig.net"}); // Demonstration purpose // var users = await repository.GetAllUsersByFilterAsync(command.Filter); var usersDto = mapper.Map, IEnumerable>(users); var data = new QueryResults { Items = usersDto, TotalItems = users.Count }; return new Result> { Data = data }; } catch (Exception ex) { return new Result> { IsSuccess = false, Error = "Faild to fetch data from DB." }; } } } }