Example #1
0
        public void Vote(string username, string upvotableEntityId, IUpvotablesService entityService, bool isDownvote)
        {
            IUpvotableEntity upvotable = entityService.ResolveUpvotableEntity(upvotableEntityId);

            var user = _usersService.GetByUsername(username);

            if (user == null)
            {
                return;
            }

            int voteWeight = isDownvote ? -1 : 1;

            Upvote entity = new Upvote();

            entity.UserId = user.UserId;
            entity.Weight = voteWeight;

            var votes = _dbContext.Upvotes.Where(uv => uv.VotingBoxId == upvotable.VotingBoxId && uv.UserId == user.UserId).ToList();

            if (votes == null)
            {
                entity.VotingBoxId = upvotable.VotingBoxId;
                _dbContext.Upvotes.Add(entity);
                _dbContext.SaveChanges();
                return;
            }

            if (votes != null && votes.Count == 1 && votes.First().Weight == voteWeight)
            {
                return;
            }
            else
            {
                _dbContext.RemoveRange(votes);
                entity.VotingBoxId = upvotable.VotingBoxId;
                _dbContext.Upvotes.Add(entity);
                _dbContext.SaveChanges();
            }
        }