public async Task <ICommandResult <PaginatedResult <Car> > > Handle(GetCarPageCommand command, CancellationToken cancellationToken) { int? first = command.First; int? last = command.Last; DateTimeOffset?createdAfter = command.CreatedAfter; DateTimeOffset?createdBefore = command.CreatedBefore; first = !first.HasValue && !last.HasValue ? _generalOptions.DefaultPaginationPageSize : first; Task <List <Car> > getCarsTask = GetCarsAsync(first, last, createdAfter, createdBefore, cancellationToken); Task <bool> getHasNextPageTask = GetHasNextPageAsync(first, createdAfter, createdBefore, cancellationToken); Task <bool> getHasPreviousPageTask = GetHasPreviousPageAsync(last, createdAfter, createdBefore, cancellationToken); Task <int> totalCountTask = _carRepository.GetTotalCountAsync(cancellationToken); await Task.WhenAll(getCarsTask, getHasNextPageTask, getHasPreviousPageTask, totalCountTask).ConfigureAwait(false); List <Car> cars = await getCarsTask.ConfigureAwait(false); bool hasNextPage = await getHasNextPageTask.ConfigureAwait(false); bool hasPreviousPage = await getHasPreviousPageTask.ConfigureAwait(false); int totalCount = await totalCountTask.ConfigureAwait(false); if (cars == null) { return(new CommandResult <PaginatedResult <Car> >(CommandStatus.NotFound, null)); } PaginatedResult <Car> result = new PaginatedResult <Car>( hasNextPage, hasPreviousPage, totalCount, cars ); return(new CommandResult <PaginatedResult <Car> >(CommandStatus.Ok, result)); }
public Task <IActionResult> GetPageAsync( [FromServices] GetCarPageCommand command, [FromQuery] PageOptions pageOptions, CancellationToken cancellationToken) => command.ExecuteAsync(pageOptions, cancellationToken);