Exemplo n.º 1
0
 public IActionResult GetBooksList(BookFilterViewModel viewModel)
 {
     try
     {
         return(Ok(_contract.GetBooksList(viewModel)));
     }
     catch (Exception ex)
     {
         return(InternalServerError(ex.Message));
     }
 }
Exemplo n.º 2
0
        public async Task <ActionResult <BookFilterViewModel> > Index([FromQuery] int?pageNumber, int?genreId, int?pageSize)
        {
            var bookParams = new BookParams
            {
                PageNumber = pageNumber ?? 1,
                PageSize   = pageSize ?? Convert.ToInt32(_config.GetValue <string>("BookPagination:PageSize")),
                GenreId    = genreId ?? 0
            };

            var bookFilterViewModel = new BookFilterViewModel
            {
                Books  = await _unitOfWork.Books.GetBooksWithGenresAsync(bookParams),
                Genres = _unitOfWork.Genres.GetAll()
            };

            return(View(bookFilterViewModel));
        }
        private string BuildWhereClause(BookFilterViewModel viewModel)
        {
            var whereClauseBuilder = new StringBuilder();

            if (!string.IsNullOrEmpty(viewModel.Category))
            {
                whereClauseBuilder.Append($@" Book_Category.category_title = '{viewModel.Category}'");
            }
            if (!string.IsNullOrEmpty(viewModel.Author))
            {
                if (!string.IsNullOrEmpty(whereClauseBuilder.ToString()))
                {
                    whereClauseBuilder.Append(" AND ");
                }
                whereClauseBuilder.Append($@"Author.lastname LIKE '%{viewModel.Author}%'");
            }
            return(whereClauseBuilder.ToString());
        }
        internal List <BookDTO> GetBooksList(BookFilterViewModel viewModel)
        {
            var whereClauseBuilder = BuildWhereClause(viewModel);

            if (!string.IsNullOrEmpty(whereClauseBuilder))
            {
                whereClauseBuilder = $" WHERE {whereClauseBuilder}";
            }
            string         query = $@"SELECT * 
                            FROM Book
                            JOIN Book_Category USING(category_id)
                            JOIN Author USING(author_id)
                            {whereClauseBuilder}";
            List <BookDTO> dtos;

            using (var dataSource = DataSource)
            {
                dataSource.Open();
                var queryResult = QueryDataSource(query, dataSource);
                dtos = _adapter.ToBookDTOList(queryResult);
                dataSource.Close();
            }
            return(dtos);
        }