public void Execute()
        {
            var post = Session.Load<Post>(_postId);
            var comments = Session.Load<PostComments>(_postId);

            var comment = new PostComments.Comment
            {
                Id = comments.GenerateNewCommentId(),
                Author = _commentInput.Name,
                Body = _commentInput.Body,
                CreatedAt = DateTimeOffset.Now,
                Email = _commentInput.Email,
                Url = _commentInput.Url,
                Important = _requestValues.IsAuthenticated,
                UserAgent = _requestValues.UserAgent,
                UserHostAddress = _requestValues.UserHostAddress
            };
            comment.IsSpam = new AskimetService(Session).CheckForSpam(comment);

            if (comment.IsSpam)
                comments.Spam.Add(comment);
            else
            {
                post.CommentsCount++;
                comments.Comments.Add(comment);
            }

            SendNewCommentEmail(post, comment);
        }
        public override void Execute()
        {
            var post = DocumentSession
                .Include<Post>(x => x.AuthorId)
                .Include(x => x.CommentsId)
                .Load(postId);
            var postAuthor = DocumentSession.Load<User>(post.AuthorId);
            var comments = DocumentSession.Load<PostComments>(post.CommentsId);

            var comment = new PostComments.Comment
                          	{
                          		Id = comments.GenerateNewCommentId(),
                          		Author = commentInput.Name,
                          		Body = commentInput.Body,
                          		CreatedAt = DateTimeOffset.Now,
                          		Email = commentInput.Email,
                          		Url = commentInput.Url,
                          		Important = requestValues.IsAuthenticated, // TODO: Don't mark as important based on that
                          		UserAgent = requestValues.UserAgent,
                          		UserHostAddress = requestValues.UserHostAddress
                          	};
            comment.IsSpam = AkismetService.CheckForSpam(comment);

            var commenter = DocumentSession.GetCommenter(commentInput.CommenterKey) ?? new Commenter { Key = commentInput.CommenterKey ?? Guid.Empty };

            if (requestValues.IsAuthenticated == false && comment.IsSpam)
            {
                if (commenter.NumberOfSpamComments > 4)
                    return;
                comments.Spam.Add(comment);
            }
            else
            {
                post.CommentsCount++;
                comments.Comments.Add(comment);
            }

            SetCommenter(commenter, comment.IsSpam);

            SendNewCommentEmail(post, comment, postAuthor);
        }
        public void Execute()
        {
            var post = Session.Load<Post>(_postId);
            var comments = Session.Load<PostComments>(_postId);

            var comment = new PostComments.Comment
                          	{
                          		Id = comments.GenerateNewCommentId(),
                          		Author = _commentInput.Name,
                          		Body = _commentInput.Body,
                          		CreatedAt = DateTimeOffset.Now,
                          		Email = _commentInput.Email,
                          		Url = _commentInput.Url,
                          		Important = _requestValues.IsAuthenticated,
                          		UserAgent = _requestValues.UserAgent,
                          		UserHostAddress = _requestValues.UserHostAddress
                          	};
            comment.IsSpam = new AskimetService(Session).CheckForSpam(comment);

            var commenter = Session.GetCommenter(_commentInput.CommenterKey) ?? new Commenter { Key = _commentInput.CommenterKey ?? Guid.Empty };

            if (_requestValues.IsAuthenticated == false && comment.IsSpam)
            {
                if (commenter.NumberOfSpamComments > 4)
                    return;
                comments.Spam.Add(comment);
            }
            else
            {
                post.CommentsCount++;
                comments.Comments.Add(comment);
            }

            SetCommenter(commenter, comment.IsSpam);

            SendNewCommentEmail(post, comment);
        }
		public void CanMapFromCommentToNewCommentViewModel()
		{
			var comment = new PostComments.Comment();
			Assert.DoesNotThrow(() => comment.MapTo<NewCommentEmailViewModel>());
		}