Exemplo n.º 1
0
        public PostSearchResult Search(PostSearchOptions postSearchOptions)
        {
            IQueryable <Post> query;

            if (postSearchOptions.Data == null)
            {
                query = Repository
                        .Get();
            }
            else
            {
                string dataToLower = postSearchOptions.Data.ToLower();
                query = Repository
                        .Get(e => e.Title.ToLower().Contains(dataToLower) || e.Description.ToLower().Contains(dataToLower) ||
                             e.Article.Content.ToLower().Contains(dataToLower));
            }

            if (postSearchOptions.SearchType == SearchType.Recommended)
            {
                var recommendedPostsIds = _recommenderService.GetRecommendedPostsIds(query, postSearchOptions.UserId);
                query = query.Where(p => recommendedPostsIds.Contains(p.Id));
            }

            int            count = query.Count();
            List <PostDto> posts = query
                                   .Skip(postSearchOptions.PageIndex * postSearchOptions.PageSize)
                                   .Take(postSearchOptions.PageSize)
                                   .Select(e => new PostDto
            {
                Id              = e.Id,
                Title           = e.Title,
                Description     = e.Description,
                PostedOn        = e.PostedOn,
                GlobalRateValue = e.Rates.Any() ? e.Rates.Average(r => r.Value) : 0,
                UserRate        = e.Rates
                                  .Where(r => r.UserId == postSearchOptions.UserId)
                                  .Select(r => new RateDto
                {
                    Id     = r.Id,
                    Value  = r.Value,
                    PostId = r.PostId,
                    UserId = r.UserId
                })
                                  .SingleOrDefault()
            })
                                   .ToList();

            PostSearchResult model = new PostSearchResult
            {
                Posts = posts,
                Count = count
            };

            return(model);
        }
Exemplo n.º 2
0
 public IActionResult Search([FromQuery] PostSearchOptions postSearch)
 {
     return(Ok(((IPostService)_service).Search(postSearch)));
 }