示例#1
0
        public void ViewArticle(int visitorId, int articleId)
        {
            Guard.IntMoreThanZero(visitorId, "userId");
            Guard.IntMoreThanZero(articleId, "articleId");

            Visitor visitor = this._unitOfWork.VisitorRepository.GetById(visitorId, v => v.ArticleVisitors);

            if (visitor == null)
            {
                throw new VisitorNotFoundException(String.Format("Visitor with ID '{0}' was not found.", visitorId));
            }

            ArticleVisitor articleVisitor = visitor.ArticleVisitors.FirstOrDefault(x => x.ArticleId == articleId);

            if (articleVisitor == null)
            {
                Article article = this._unitOfWork.ArticleRepository.GetById(articleId);

                if (article == null)
                {
                    throw new ArticleNotFoundException(String.Format("Article with ID '{0}' was not found.", articleId));
                }

                articleVisitor = new ArticleVisitor { ArticleId = article.ArticleId };

                visitor.ArticleVisitors.Add(articleVisitor);
            }

            articleVisitor.LastViewDate = DateTime.Now;

            this._unitOfWork.VisitorRepository.Update(visitor);
            this._unitOfWork.Save();
        }
示例#2
0
        public async Task <IActionResult> ArticleViews(int articleId)
        {
            string currentUserId = await OnGetSesstion();

            if (currentUserId != null)
            {
                var userPersonalRow = _context.UserPersonalDetail.Where(a => a.UserId == currentUserId).SingleOrDefault();
                if (userPersonalRow == null)
                {
                    return(RedirectToAction("CompleteProfile", "Home"));
                }
                //If Registered Visitor Counter
                ArticleVisitor isVisited = _context.ArticleVisitor.Where(qv => qv.UserId == currentUserId && qv.ArticleId == articleId).SingleOrDefault();
                if (isVisited == null)
                {
                    _context.ArticleVisitor.Add(new ArticleVisitor
                    {
                        ArticleId  = articleId,
                        UserId     = currentUserId,
                        IsLoggedIn = true,
                        UserIp     = null
                    });
                    _context.SaveChanges();
                }
                var articleTags = _context.ArticleTag.Where(at => at.ArticleId == articleId).ToList();
                foreach (var tag in articleTags)
                {
                    var userInterestedTag = _context.AIUserInterest.Where(uit => uit.TagId == tag.TagId).SingleOrDefault();
                    if (userInterestedTag == null)
                    {
                        AIUserInterest userLikeTag = new AIUserInterest
                        {
                            TagId  = tag.TagId,
                            UserId = currentUserId,
                            Count  = 1
                        };
                        _context.AIUserInterest.Add(userLikeTag);
                    }
                    else
                    {
                        userInterestedTag.Count = userInterestedTag.Count + 1;
                    }
                    _context.SaveChanges();
                }
            }
            else
            {//If Anonomus Visitor Counter
                string         currentUserIp = _accessor.HttpContext.Connection.RemoteIpAddress.ToString();
                ArticleVisitor isVisited     = _context.ArticleVisitor.Where(qv => qv.UserIp == currentUserIp && qv.ArticleId == articleId).SingleOrDefault();
                if (isVisited == null)
                {
                    _context.ArticleVisitor.Add(new ArticleVisitor
                    {
                        ArticleId  = articleId,
                        UserId     = null,
                        IsLoggedIn = false,
                        UserIp     = currentUserIp
                    });
                    _context.SaveChanges();
                }
            }//If Anonomus Visitor Ends Here
            return(Ok());
        }