Пример #1
0
        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));
        }
Пример #2
0
 public Task <IActionResult> GetPageAsync(
     [FromServices] GetCarPageCommand command,
     [FromQuery] PageOptions pageOptions,
     CancellationToken cancellationToken) => command.ExecuteAsync(pageOptions, cancellationToken);