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)); }
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>)); }