Beispiel #1
0
        public PostHeaderListVM Search(ClaimsPrincipal contextUser, HeaderSearchVM searchModel)
        {
            var user = _userService.GetUserWithRoles(contextUser);

            var model = new PostHeaderListVM();

            var query = _headerRepository.Where(x => x.Title.Contains(searchModel.SearchText) && !user.BlockedUserIds.Contains(x.UserId), new List <string> {
                "Category", "Posts", "User"
            });

            if (searchModel.StartDate.HasValue)
            {
                query = query.Where(x => x.CreateDate >= searchModel.StartDate.Value);
            }

            if (searchModel.EndDate.HasValue)
            {
                query = query.Where(x => x.CreateDate <= searchModel.EndDate.Value);
            }

            if (searchModel.InvertOrder)
            {
                query = query.OrderByDescending(x => x.Title);
            }
            else
            {
                query = query.OrderBy(x => x.Title);
            }

            if (!user.IsAdmin)
            {
                query = query.OrderByDescending(x => x.IsAdminOnly == false);
            }

            query.ToList().ForEach(x =>
            {
                var header = new PostHeaderVM()
                {
                    HeaderCode   = x.IdCode,
                    CategoryCode = x.Category.IdCode,
                    ClickCount   = x.ClickCount,
                    HeaderTitle  = x.Title,
                    UserId       = x.UserId,
                    Username     = x.User.UserName,
                    HeaderDate   = x.UpdateDate ?? x.CreateDate
                };

                model.Headers.Add(header);
            });

            return(model);
        }
Beispiel #2
0
        //ToDo: OK! categortId 'categoryId' olarak değiştirelim.
        public PostHeaderListVM GetPopularHeaders(ClaimsPrincipal contextUser, string categoryCode = "")
        {
            var user = _userService.GetUserWithRoles(contextUser);

            var model = new PostHeaderListVM();

            var category = _categoryRepository.Get(x => x.IdCode == categoryCode);

            if (category == null)
            {
                category = _categoryRepository.GetAll().First();
            }

            var categoryId  = category.Id;
            var headerQuery = _headerRepository.Where(x => x.CategoryId == categoryId && !user.BlockedUserIds.Contains(x.UserId), new List <string> {
                "Category", "User", "Posts"
            });

            if (!user.IsAdmin)
            {
                headerQuery = headerQuery.Where(x => x.IsAdminOnly == false);
            }

            headerQuery
            .Take(8)
            .ToList()
            .ForEach(x =>
            {
                var header = new PostHeaderVM()
                {
                    CategoryCode = x.Category.IdCode,
                    HeaderCode   = x.IdCode,
                    HeaderTitle  = x.Title,
                    UserId       = x.UserId,
                    Username     = x.User.UserName,
                    ClickCount   = x.ClickCount,
                    HeaderDate   = x.UpdateDate ?? x.CreateDate
                };

                var post = x.Posts.Where(x => !user.BlockedUserIds.Contains(x.UserId))
                           .OrderByDescending(y => _postService.GetPostRating(y.Id))
                           .FirstOrDefault();

                if (post != null)
                {
                    var postVM = new PostVM()
                    {
                        PostId       = post.Id,
                        UserId       = post.UserId,
                        Username     = post.User?.UserName ?? _userService.GetUserById(post.UserId).UserName,
                        Content      = post.Content,
                        PostDate     = post.UpdateDate ?? post.CreateDate,
                        LikeCount    = _postService.GetLikeCount(post.Id),
                        DislikeCount = _postService.GetDislikeCount(post.Id)
                    };

                    if (user.Id > 0)
                    {
                        var rating = _postRatingRepository.Get(x => x.UserId == user.Id && x.PostId == post.Id);

                        if (rating != null)
                        {
                            postVM.LikeState = rating.IsLiked ? Common.Enums.PostLikeState.Liked : Common.Enums.PostLikeState.Disliked;
                        }
                    }

                    header.Posts.Add(postVM);
                }
                ;

                model.Headers.Add(header);
            });

            return(model);
        }
Beispiel #3
0
        //ToDo: OK! PageNumber 'pageNumber' olarak değiştirelim.
        public PostHeaderListVM GetHeaderPosts(ClaimsPrincipal contextUser, string headerCode, string categoryCode, int pageNumber = 1)
        {
            var user = _userService.GetUserWithRoles(contextUser);

            var model = new PostHeaderListVM();

            var headerEntity = _headerRepository.Where(x => x.IdCode == headerCode && !user.BlockedUserIds.Contains(x.UserId), new List <string> {
                "Category", "User", "Posts"
            }).FirstOrDefault();

            var header = new PostHeaderVM();

            ApiResultVM apiModel = null;

            if (headerEntity == null)
            {
                model = GetPopularHeaders(contextUser);
                return(model);
            }
            else
            {
                if (headerEntity.IsAdminOnly && !user.IsAdmin) // Admin check
                {
                    model = GetPopularHeaders(contextUser);
                    return(model);
                }

                var title    = headerEntity.Title;
                var isBook   = title.EndsWith("(Kitap)");
                var isAuthor = title.EndsWith("(Yazar)");

                if (isBook || isAuthor)
                {
                    title = title.Remove(title.Length - 7);
                    if (isBook)
                    {
                        apiModel = _openLibraryApiService.Search(title, Common.Enums.ApiSearchTypeEnum.Title);
                    }
                    else if (isAuthor)
                    {
                        apiModel = _openLibraryApiService.Search(title, Common.Enums.ApiSearchTypeEnum.Author);
                    }
                }
            }

            headerEntity.ClickCount++;

            header.CategoryCode = headerEntity.Category.IdCode;
            header.HeaderCode   = headerEntity.IdCode;
            header.HeaderTitle  = headerEntity.Title;
            header.UserId       = headerEntity.UserId;
            header.Username     = headerEntity.User.UserName;
            header.ClickCount   = headerEntity.ClickCount;
            header.HeaderDate   = headerEntity.UpdateDate ?? headerEntity.CreateDate;

            //ToDo: OK! Sadece count çekeceksen where sorgusu yazmana gerek yok single olarak count içerisinde filtre yapabilirsin. Örnek kodu aşağıda paylaşıyorum.
            var postCount = headerEntity.Posts.Count(x => !user.BlockedUserIds.Contains(x.UserId));

            //Örnek Kod:
            //var postCount = headerEntity.Posts.Count(x => !blockedUserIds.Contains(x.UserId));


            var pageCount = (postCount / PageMaxItemCount) + ((postCount % PageMaxItemCount) > 0 ? 1 : 0);

            if (pageNumber > pageCount)
            {
                pageNumber = 1;
            }

            model.CurrentPage = pageNumber;
            model.PageCount   = pageCount;

            if (headerEntity.Posts != null)
            {
                var posts = headerEntity.Posts
                            .Where(x => !user.BlockedUserIds.Contains(x.UserId))
                            .Skip((pageNumber - 1) * PageMaxItemCount)
                            .Take(PageMaxItemCount)
                            .ToList();

                posts.ForEach(post =>
                {
                    var postVM = new PostVM()
                    {
                        PostId       = post.Id,
                        UserId       = post.UserId,
                        Username     = post.User?.UserName ?? _userService.GetUserById(post.UserId).UserName,
                        Content      = post.Content,
                        PostDate     = post.UpdateDate ?? post.CreateDate,
                        LikeCount    = _postService.GetLikeCount(post.Id),
                        DislikeCount = _postService.GetDislikeCount(post.Id)
                    };

                    if (user.Id > 0)
                    {
                        var rating = _postRatingRepository.Get(x => x.UserId == user.Id && x.PostId == post.Id);

                        if (rating != null)
                        {
                            postVM.LikeState = rating.IsLiked ? Common.Enums.PostLikeState.Liked : Common.Enums.PostLikeState.Disliked;
                        }
                    }

                    header.Posts.Add(postVM);
                });
            }

            if (apiModel != null)
            {
                header.IsApiResult = true;

                foreach (var doc in apiModel.ResultModel.Docs.Take(10))
                {
                    DateTime dateValue;
                    if (!DateTime.TryParse(doc.First_publish_year + "-01-01", out dateValue))
                    {
                        dateValue = DateTime.Now;
                    }

                    var post = new PostVM()
                    {
                        Content      = doc.Title,
                        Username     = doc.GetAuthorText(),
                        DislikeCount = 0,
                        LikeCount    = 0,
                        IsApiResult  = true,
                        PostDate     = dateValue
                    };
                    header.Posts.Add(post);
                }
            }

            model.Headers.Add(header);
            _headerRepository.Save();

            return(model);
        }