示例#1
0
        public async Task <IActionResult> GetBooks([FromQuery] GetBookCollectionHttpRequest?getBookCollectionHttpRequest)
        {
            QueryBookCommand queryBookCommand = new QueryBookCommand
            {
                PartialBookName   = getBookCollectionHttpRequest?.PartialBookName,
                PartialAuthorName = getBookCollectionHttpRequest?.PartialAuthorName,
                Limit             = getBookCollectionHttpRequest?.Limit ?? 20,
                Offset            = getBookCollectionHttpRequest?.Offset ?? 0
            };
            PaginatedCollection <BookResponse> paginatedCollection = await _executionContext.ExecuteAsync(queryBookCommand, CancellationToken.None);

            return(StatusCode((int)HttpStatusCode.OK, paginatedCollection));
        }
        public async Task<PaginatedCollection<BookResponse>> Handle(QueryBookCommand request, CancellationToken cancellationToken)
        {
            IExpressionSpecification<Book> specification = new BookIsRemoved().Not();

            if (!string.IsNullOrEmpty(request.PartialBookName))
            {
                specification = specification.And(new BookNameContains(request.PartialBookName));
            }

            if (!string.IsNullOrEmpty(request.PartialAuthorName))
            {
                specification = specification.And(new AuthorNameContains(request.PartialAuthorName));
            }

            IBookRepository bookRepository = _productDbContext.BookRepository;
            PaginatedCollection<Book> paginatedCollection = await bookRepository.GetAsync(specification, request.Offset, request.Limit, cancellationToken);

            PaginatedCollection<BookResponse> result = new PaginatedCollection<BookResponse>(paginatedCollection.TotalCount,
                                                                                             paginatedCollection.Data.Select(p => new BookResponse(p.Id, p.BookName, p.AuthorName)));
            return result;
        }