Esempio n. 1
0
 public async Task <IEnumerable <GetGagDTO> > GetGags(int skip, int take, string userFilter, GagFilter filter = GagFilter.All, string slug = "")
 {
     return(await postService.GetGags(skip, take, userFilter, filter, slug));
 }
Esempio n. 2
0
        public async Task <IEnumerable <GetGagDTO> > GetGags(int skip, int take, string userFilter, GagFilter filter, string slug)
        {
            bool isAdminUser = ClaimsPrincipal.Current.Claims.Any(c => c.Value == "Admin") ||
                               ClaimsPrincipal.Current.Claims.Any(c => c.Value == "SuperAdmin");
            IQueryable <Post> gags = _repository.Queryable();

            gags = gags.Include(p => p.Images)
                   .Include(p => p.Videos)
                   .Include(p => p.Likes.Select(l => l.CreatedUser))
                   .Include(p => p.Comments)
                   .Include(p => p.Tags)
                   .Include(p => p.CreatedUser)
                   .Where(p => p.PostType == PostType.GAG && p.IsActived);

            if (!string.IsNullOrEmpty(userFilter))
            {
                User postUser = await _userManager.FindByNameAsync(userFilter);

                gags = gags.Where(p => p.CreatedUserId == postUser.Id);
            }

            if (filter == GagFilter.Tag)
            {
                gags = gags.Where(p => p.Tags.Count(t => t.Slug == slug) > 0 || string.IsNullOrEmpty(slug));
                var tagRepository = _repository.GetRepository <Tag>();
                var tag           = await tagRepository.Queryable().FirstOrDefaultAsync(t => t.Slug == slug);

                if (tag != null)
                {
                    tag.SearchCount++;
                }
                tagRepository.Update(tag);
                await _unitOfWork.SaveChangesAsync();
            }
            else if (filter == GagFilter.Search)
            {
                gags = gags.Where(p => p.Title.Contains(slug) || p.Description.Contains(slug) || p.Tags.Count(t => t.Slug.Contains(slug)) > 0 || string.IsNullOrEmpty(slug));
            }
            else
            {
                switch (filter)
                {
                case GagFilter.Image:
                    gags = gags.Where(p => p.Images.Count(i => i.ImageType == ImageType.Static) > 0);
                    break;

                case GagFilter.Gif:
                    gags = gags.Where(p => p.Images.Count(i => i.ImageType == ImageType.Gif) > 0);
                    break;

                case GagFilter.Video:
                    gags = gags.Where(p => p.Videos.Count() > 0);
                    break;

                default:
                    break;
                }

                if (!string.IsNullOrEmpty(slug))
                {
                    var indexOfSlug = _repository.Queryable().OrderByDescending(p => p.PublishedDate).Where(p => (p.IsActived == !isAdminUser) || isAdminUser).ToList().FindIndex(g => g.Slug == slug);
                    skip = indexOfSlug == -1 ? skip : indexOfSlug + skip;
                }
            }

            gags = gags.OrderByDescending(p => p.PublishedDate)
                   .Skip(skip)
                   .Take(take);

            var result = await gags.ToListAsync();

            return(result.Select(Mapper.Map <GetGagDTO>));
        }