public PagedList <BookDto> GetBooks(BookQueryFilter filters) { filters.PageNumber = filters.PageNumber == 0 ? _paginationOptions.DefaultPageNumber : filters.PageNumber; filters.PageSize = filters.PageSize == 0 ? _paginationOptions.DefaultPageSize : filters.PageSize; var books = _unitOfWork.BookRepository.GetAllBooks(); if (filters.IsInDrawer == true) { books = _unitOfWork.BookRepository.GetAllBooksInDrawer(); } if (filters.Barcode != null) { books = _unitOfWork.BookRepository.GetBookByListId(filters.Barcode); foreach (var book in books) { var returnDetail = _unitOfWork.ReturnDetailRepository.GetCustomerByBookId(book.Id); if (returnDetail == null) { book.IsAvailable = true; } else { var customer = _unitOfWork.CustomerRepository.GetById(returnDetail.CustomerId); book.CustomerId = customer.Id; book.CustomerName = customer.Name; book.CustomerImage = customer.Image; } } } if (filters.IsInDrawer == false) { books = _unitOfWork.BookRepository.GetAllBooksNotInDrawer(); } if (filters.BookGroupId != null) { books = books.Where(x => x.BookGroupId == filters.BookGroupId); } if (filters.BookName != null) { books = books.Where(x => x.BookName.ToLower().Contains(filters.BookName.ToLower())); } if (filters.DrawerId != null) { books = _unitOfWork.BookRepository.GetBookByDrawer(filters.DrawerId); } var pagedBooks = PagedList <BookDto> .Create(books, filters.PageNumber, filters.PageSize); return(pagedBooks); }
public IActionResult GetBooks([FromQuery] BookQueryFilter filters) { var request = _httpContextAccessor.HttpContext.Request; var books = _bookService.GetBooks(filters); //string str = request.QueryString.ToString(); //string stringBeforeChar = str.Substring(0, str.IndexOf("&")); var booksDtos = _mapper.Map <IEnumerable <BookDto> >(books); //if (stringBeforeChar.Length < 0) //{ // var nextPage = books.CurrentPage >= 1 && books.CurrentPage < books.TotalCount // ? _uriService.GetPageUri(books.CurrentPage + 1, books.PageSize, _uriService.GetBookPaginationUri(filters, Url.RouteUrl(nameof(GetBooks))).ToString()) // : null; // var previousPage = books.CurrentPage - 1 >= 1 && books.CurrentPage < books.TotalCount // ? _uriService.GetPageUri(books.CurrentPage - 1, books.PageSize, _uriService.GetBookPaginationUri(filters, Url.RouteUrl(nameof(GetBooks))).ToString()) // : null; //} //else //{ // var nextPage = books.CurrentPage >= 1 && books.CurrentPage < books.TotalCount // ? _uriService.GetPageUri(books.CurrentPage + 1, books.PageSize, _uriService.GetBookPaginationUri(filters, Url.RouteUrl(nameof(GetBooks))).ToString() + stringBeforeChar) // : null; // var previousPage = books.CurrentPage - 1 >= 1 && books.CurrentPage < books.TotalCount // ? _uriService.GetPageUri(books.CurrentPage - 1, books.PageSize, _uriService.GetBookPaginationUri(filters, Url.RouteUrl(nameof(GetBooks))).ToString() + stringBeforeChar) // : null; //} var metadata = new Metadata { TotalCount = books.TotalCount, PageSize = books.PageSize, CurrentPage = books.CurrentPage, TotalPages = books.TotalPages, HasNextPage = books.HasNextPage, HasPreviousPage = books.HasPreviousPage }; var response = new ApiResponse <IEnumerable <BookDto> >(booksDtos) { Meta = metadata }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(metadata)); return(Ok(response)); }
public Uri GetBookPaginationUri(BookQueryFilter filter, string actionUrl) { string baseUrl = $"{_baseUri}{actionUrl}"; return(new Uri(baseUrl)); }