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; }