Exemplo n.º 1
0
        public bool Handle(NewCommentRequest request, IOutputPort <NewCommentResponse> outputPort)
        {
            if (_userRepository.FindById(request.UserId) == null)
            {
                outputPort.Handle(new NewCommentResponse(new[] { new Error(404, "user not found") }));
                return(false);
            }
            if (_videoRepository.FindById(request.VideoId) == null)
            {
                outputPort.Handle(new NewCommentResponse(new[] { new Error(404, "video not found") }));
                return(false);
            }
            var commentInfo = new CommentDto()
            {
                PostingDate = request.PostingDate,
                Text        = request.Text,
                UserId      = request.UserId,
                VideoId     = request.VideoId,
            };
            int commentId = _commentRepository.Create(commentInfo);

            outputPort.Handle(new NewCommentResponse(commentId));

            return(true);
        }
Exemplo n.º 2
0
        public Task <Response <CommentListItem> > CreateAsync(NewCommentRequest request)
        {
            return(TryExecuteAsync <CommentListItem>(async() =>
            {
                // 1. Check comment enabled or not
                if (!_blogConfig.ContentSettings.EnableComments)
                {
                    return new FailedResponse <CommentListItem>((int)ResponseFailureCode.CommentDisabled);
                }

                // 2. Harmonize banned keywords
                if (_blogConfig.ContentSettings.EnableWordFilter)
                {
                    var dw = _blogConfig.ContentSettings.DisharmonyWords;
                    var maskWordFilter = new MaskWordFilter(new StringWordSource(dw));
                    request.Username = maskWordFilter.FilterContent(request.Username);
                    request.Content = maskWordFilter.FilterContent(request.Content);
                }

                var model = new CommentEntity
                {
                    Id = Guid.NewGuid(),
                    Username = request.Username,
                    CommentContent = request.Content,
                    PostId = request.PostId,
                    CreateOnUtc = DateTime.UtcNow,
                    Email = request.Email,
                    IPAddress = request.IpAddress,
                    IsApproved = !_blogConfig.ContentSettings.RequireCommentReview,
                    UserAgent = request.UserAgent
                };

                await _commentRepository.AddAsync(model);

                var spec = new PostSpec(request.PostId, false);
                var postTitle = _postRepository.SelectFirstOrDefault(spec, p => p.Title);

                var item = new CommentListItem
                {
                    Id = model.Id,
                    CommentContent = model.CommentContent,
                    CreateOnUtc = model.CreateOnUtc,
                    Email = model.Email,
                    IpAddress = model.IPAddress,
                    IsApproved = model.IsApproved,
                    PostTitle = postTitle,
                    Username = model.Username
                };

                return new SuccessResponse <CommentListItem>(item);
            }));
        }
Exemplo n.º 3
0
        public IActionResult NewComment(int postId, [FromBody] NewCommentRequest request)
        {
            if (context.Posts.FirstOrDefault(p => p.Id == postId) == null)
            {
                return(NotFound());
            }

            Comment comment = new Comment(request, currentUser, postId);

            context.Comments.Add(comment);
            context.SaveChanges();
            return(Ok(new CommentResponse(comment, currentUser)));
        }
Exemplo n.º 4
0
        public IActionResult EditComment(int id, [FromBody] NewCommentRequest request)
        {
            Comment comment = context.Comments.FirstOrDefault(c => c.Id == id);

            if (comment == null)
            {
                return(NotFound());
            }
            else if (comment.UserGuid != currentUser.GUID)
            {
                return(Forbid());
            }

            comment.IsEdited = request.Body.ToLower() != comment.Body.ToLower();
            comment.Body     = request.Body;
            context.SaveChanges();

            return(Ok(new CommentResponse(comment, currentUser)));
        }
Exemplo n.º 5
0
        public async Task<CommentDetailedItem> CreateAsync(NewCommentRequest request)
        {
            if (_blogConfig.ContentSettings.EnableWordFilter)
            {
                var dw = _blogConfig.ContentSettings.DisharmonyWords;
                var maskWordFilter = new MaskWordFilter(new StringWordSource(dw));
                request.Username = maskWordFilter.FilterContent(request.Username);
                request.Content = maskWordFilter.FilterContent(request.Content);
            }

            var model = new CommentEntity
            {
                Id = Guid.NewGuid(),
                Username = request.Username,
                CommentContent = request.Content,
                PostId = request.PostId,
                CreateOnUtc = DateTime.UtcNow,
                Email = request.Email,
                IPAddress = request.IpAddress,
                IsApproved = !_blogConfig.ContentSettings.RequireCommentReview
            };

            await _commentRepository.AddAsync(model);

            var spec = new PostSpec(request.PostId, false);
            var postTitle = _postRepository.SelectFirstOrDefault(spec, p => p.Title);

            var item = new CommentDetailedItem
            {
                Id = model.Id,
                CommentContent = model.CommentContent,
                CreateOnUtc = model.CreateOnUtc,
                Email = model.Email,
                IpAddress = model.IPAddress,
                IsApproved = model.IsApproved,
                PostTitle = postTitle,
                Username = model.Username
            };

            return item;
        }
        public ActionResult CreateComment([FromBody] Models.Requests.NewCommentRequest request)
        {
            try
            {
                _newCommentValidator.ValidateAndThrow(request);
            }
            catch (ValidationException e)
            {
                return(BadRequest(e.Errors));
            }
            var newCommentRequest = new NewCommentRequest(
                int.Parse(User.Id()),
                DateTime.Parse(request.PostingDate),
                request.Text,
                request.VideoId
                );

            _newCommentUseCase.Handle(newCommentRequest, _newCommentPresenter);

            return(_newCommentPresenter.ContentResult);
        }
Exemplo n.º 7
0
        public Task <Response <CommentListItem> > AddCommentAsync(NewCommentRequest request)
        {
            return(TryExecuteAsync <CommentListItem>(async() =>
            {
                // 1. Check comment enabled or not
                if (!_blogConfig.ContentSettings.EnableComments)
                {
                    return new FailedResponse <CommentListItem>((int)ResponseFailureCode.CommentDisabled);
                }

                // 2. Check user email domain
                var bannedDomains = _blogConfig.EmailSettings.BannedMailDomain?.Split(",");
                if (null != bannedDomains && bannedDomains.Any())
                {
                    var address = new MailAddress(request.Email);
                    if (bannedDomains.Contains(address.Host))
                    {
                        Logger.LogWarning($"Email host '{address.Host}' is found in ban list, rejecting comments.");
                        return new FailedResponse <CommentListItem>((int)ResponseFailureCode.EmailDomainBlocked);
                    }
                }

                // 3. Harmonize banned keywords
                if (_blogConfig.ContentSettings.EnableWordFilter)
                {
                    var dw = _blogConfig.ContentSettings.DisharmonyWords;
                    var maskWordFilter = new MaskWordFilter(new StringWordSource(dw));
                    request.Username = maskWordFilter.FilterContent(request.Username);
                    request.Content = maskWordFilter.FilterContent(request.Content);
                }

                var model = new CommentEntity
                {
                    Id = Guid.NewGuid(),
                    Username = request.Username,
                    CommentContent = request.Content,
                    PostId = request.PostId,
                    CreateOnUtc = DateTime.UtcNow,
                    Email = request.Email,
                    IPAddress = request.IpAddress,
                    IsApproved = !_blogConfig.ContentSettings.RequireCommentReview,
                    UserAgent = request.UserAgent
                };

                await _commentRepository.AddAsync(model);

                var spec = new PostSpec(request.PostId, false);
                var postTitle = _postRepository.SelectFirstOrDefault(spec, p => p.Title);

                var item = new CommentListItem
                {
                    Id = model.Id,
                    CommentContent = model.CommentContent,
                    CreateOnUtc = model.CreateOnUtc,
                    Email = model.Email,
                    IpAddress = model.IPAddress,
                    IsApproved = model.IsApproved,
                    PostTitle = postTitle,
                    Username = model.Username
                };

                return new SuccessResponse <CommentListItem>(item);
            }));
        }
Exemplo n.º 8
0
 public Comment(NewCommentRequest request, CurrentUser user, int postId) : base(request.Body, user.GUID)
 {
     PostId = postId;
 }