Ejemplo n.º 1
0
        public async Task <PagedResponse <FoundAuthorDTO> > Handle(SearchAuthorQuery request, CancellationToken cancellationToken)
        {
            AuthorSearchCondition searchCondition = new AuthorSearchCondition()
            {
                Name          = GetFilterValues(request.SearchCondition.Name),
                Surname       = GetFilterValues(request.SearchCondition.Surname),
                Patronymic    = GetFilterValues(request.SearchCondition.Patronymic),
                Page          = request.SearchCondition.Page,
                PageSize      = request.SearchCondition.PageSize,
                SortDirection = request.SearchCondition.SortDirection,
                SortProperty  = request.SearchCondition.SortProperty
            };

            var sortProperty = GetSortProperty(searchCondition.SortProperty);
            IReadOnlyCollection <Author> foundAuthor = await authorService.FindAsync(searchCondition, sortProperty);

            FoundAuthorDTO[] mappedAuthor = foundAuthor.Select(MapToFoundAuthorDTO).ToArray();
            var totalCount = await authorService.CountAsync(searchCondition);

            return(new PagedResponse <FoundAuthorDTO>
            {
                Items = mappedAuthor,
                TotalCount = totalCount
            });
        }
Ejemplo n.º 2
0
        public async Task <IReadOnlyCollection <Author> > FindAsync(AuthorSearchCondition searchCondition, string sortProperty)
        {
            IQueryable <Author> query = BuildFindQuery(searchCondition);

            query = searchCondition.ListSortDirection == ListSortDirection.Ascending
                ? query.OrderBy(sortProperty)
                : query.OrderByDescending(sortProperty);

            return(await query.Page(searchCondition.Page, searchCondition.PageSize).ToListAsync());
        }
Ejemplo n.º 3
0
        private IQueryable <Author> BuildFindQuery(AuthorSearchCondition searchCondition)
        {
            IQueryable <Author> query = dbContext.Authors;

            if (searchCondition.Name.Any())
            {
                foreach (var authorName in searchCondition.Name)
                {
                    var upperAuthorName = authorName.ToUpper().Trim();
                    query = query.Where(x =>
                                        x.Name != null && x.Name.ToUpper().Contains(upperAuthorName));
                }
            }


            if (searchCondition.Surname.Any())
            {
                foreach (var authorSurname in searchCondition.Surname)
                {
                    var upperAuthorSurname = authorSurname.ToUpper().Trim();
                    query = query.Where(x =>
                                        x.Surname != null && x.Surname.ToUpper().Contains(upperAuthorSurname));
                }
            }

            if (searchCondition.Patronymic.Any())
            {
                foreach (var authorPatronymic in searchCondition.Patronymic)
                {
                    var upperAuthorPatronymic = authorPatronymic.ToUpper().Trim();
                    query = query.Where(x =>
                                        x.Patronymic != null && x.Patronymic.ToUpper().Contains(upperAuthorPatronymic));
                }
            }

            return(query);
        }
 public async Task <IActionResult> SearchAuthor([FromBody] AuthorSearchCondition searchCondition, CancellationToken cancellationToken = default)
 {
     return(await ExecuteQueryAsync(new SearchAuthorQuery(searchCondition), cancellationToken : cancellationToken));
 }
Ejemplo n.º 5
0
        public async Task <long> CountAsync(AuthorSearchCondition searchCondition)
        {
            IQueryable <Author> query = BuildFindQuery(searchCondition);

            return(await query.LongCountAsync());
        }