Ejemplo n.º 1
0
        public async Task <SearchResultsVm <BlogPostSrVm[]> > SearchBlogPostsAsync(BlogPostSc sc)
        {
            //Visitors can only view published blog posts
            if (_usersService.GetUser() == null)
            {
                sc.Status = EnBlogPostStatus.Published;
            }

            var specification = new BlogPostSpecification();

            specification.SetCriteria(sc);

            var itemsOnPage = await _blogPostsRepository.SearchAsync(specification);

            var totalItems = await _blogPostsRepository.CountAsync(specification);

            var results = new SearchResultsVm <BlogPostSrVm[]>(
                _mapper.Map <BlogPostSrVm[]>(itemsOnPage),
                totalItems,
                itemsOnPage.Count,
                sc.CurrentPage,
                sc.Take);

            return(results);
        }
Ejemplo n.º 2
0
        public void SetCriteria(BlogPostSc sc)
        {
            AddInclude(x => x.Author);

            if (!string.IsNullOrWhiteSpace(sc.Title))
            {
                Criteria.Add(x => x.Title.Contains(sc.Title));
            }

            if (!string.IsNullOrWhiteSpace(sc.AuthorLastname))
            {
                Criteria.Add(x => x.Author.LastName.Contains(sc.AuthorLastname));
            }

            #region PublishedAt

            if (sc.PublishedAtFrom.HasValue && sc.PublishedAtTo.HasValue)
            {
                Criteria.Add(x =>
                             x.PublishedAt.HasValue &&
                             x.PublishedAt.Value.Date >= sc.PublishedAtFrom.Value.Date &&
                             x.PublishedAt.Value.Date <= sc.PublishedAtTo.Value.Date);
            }

            if (sc.PublishedAtFrom.HasValue && !sc.PublishedAtTo.HasValue)
            {
                Criteria.Add(x => x.PublishedAt.HasValue &&
                             x.PublishedAt.Value.Date >= sc.PublishedAtFrom.Value.Date);
            }

            if (!sc.PublishedAtFrom.HasValue && sc.PublishedAtTo.HasValue)
            {
                Criteria.Add(x => x.PublishedAt.HasValue &&
                             x.PublishedAt.Value.Date <= sc.PublishedAtTo.Value.Date);
            }

            #endregion

            if (sc.Status.HasValue)
            {
                Criteria.Add(x => x.Status == sc.Status);
            }

            ApplyPagingAndOrder(sc);
        }