Beispiel #1
0
        public Task <Response> ToggleCommentApprovalStatus(Guid[] commentIds)
        {
            return(TryExecuteAsync(async() =>
            {
                if (null == commentIds || !commentIds.Any())
                {
                    throw new ArgumentNullException(nameof(commentIds));
                }

                var spec = new CommentSpec(commentIds);
                var comments = await _commentRepository.GetAsync(spec);
                foreach (var cmt in comments)
                {
                    cmt.IsApproved = !cmt.IsApproved;
                    await _commentRepository.UpdateAsync(cmt);

                    string logMessage = $"Updated comment approval status to '{cmt.IsApproved}' for comment id: '{cmt.Id}'";
                    Logger.LogInformation(logMessage);
                    await _moongladeAudit.AddAuditEntry(
                        EventType.Content, cmt.IsApproved ? EventId.CommentApproval : EventId.CommentDisapproval, logMessage);
                }

                return new SuccessResponse();
            }));
        }
Beispiel #2
0
        public Task <IReadOnlyList <CommentDetailedItem> > GetCommentsAsync(int pageSize, int pageIndex)
        {
            if (pageSize < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(pageSize), $"{nameof(pageSize)} can not be less than 1.");
            }

            var spec     = new CommentSpec(pageSize, pageIndex);
            var comments = _commentRepo.SelectAsync(spec, p => new CommentDetailedItem
            {
                Id             = p.Id,
                CommentContent = p.CommentContent,
                CreateTimeUtc  = p.CreateTimeUtc,
                Email          = p.Email,
                IpAddress      = p.IPAddress,
                Username       = p.Username,
                IsApproved     = p.IsApproved,
                PostTitle      = p.Post.Title,
                CommentReplies = p.Replies.Select(cr => new CommentReplyDigest
                {
                    ReplyContent = cr.ReplyContent,
                    ReplyTimeUtc = cr.CreateTimeUtc
                }).ToList()
            });

            return(comments);
        }
Beispiel #3
0
        public Task <Response <IReadOnlyList <CommentListItem> > > GetPagedCommentAsync(int pageSize, int pageIndex)
        {
            return(TryExecuteAsync <IReadOnlyList <CommentListItem> >(async() =>
            {
                if (pageSize < 1)
                {
                    throw new ArgumentOutOfRangeException(nameof(pageSize), $"{nameof(pageSize)} can not be less than 1.");
                }

                var spec = new CommentSpec(pageSize, pageIndex);
                var comments = await _commentRepository.SelectAsync(spec, p => new CommentListItem
                {
                    Id = p.Id,
                    CommentContent = p.CommentContent,
                    CreateOnUtc = p.CreateOnUtc,
                    Email = p.Email,
                    IpAddress = p.IPAddress,
                    Username = p.Username,
                    IsApproved = p.IsApproved,
                    PostTitle = p.Post.Title,
                    CommentReplies = p.CommentReply.Select(cr => new CommentReplyDigest
                    {
                        ReplyContent = cr.ReplyContent,
                        ReplyTimeUtc = cr.ReplyTimeUtc
                    }).ToList()
                });

                return new SuccessResponse <IReadOnlyList <CommentListItem> >(comments);
            }));
        }
Beispiel #4
0
        public Task <Response> DeleteCommentsAsync(Guid[] commentIds)
        {
            return(TryExecuteAsync(async() =>
            {
                if (null == commentIds || !commentIds.Any())
                {
                    throw new ArgumentNullException(nameof(commentIds));
                }

                var spec = new CommentSpec(commentIds);
                var comments = await _commentRepository.GetAsync(spec);
                foreach (var cmt in comments)
                {
                    // 1. Delete all replies
                    var cReplies = await _commentReplyRepository.GetAsync(new CommentReplySpec(cmt.Id));
                    if (cReplies.Any())
                    {
                        _commentReplyRepository.Delete(cReplies);
                    }

                    // 2. Delete comment itself
                    _commentRepository.Delete(cmt);
                    await _moongladeAudit.AddAuditEntry(EventType.Content, EventId.CommentDeleted, $"Comment '{cmt.Id}' deleted.");
                }

                return new SuccessResponse();
            }));
        }
Beispiel #5
0
        public async Task DeleteAsync(Guid[] commentIds)
        {
            if (commentIds is null || !commentIds.Any())
            {
                throw new ArgumentNullException(nameof(commentIds));
            }

            var spec     = new CommentSpec(commentIds);
            var comments = await _commentRepo.GetAsync(spec);

            foreach (var cmt in comments)
            {
                // 1. Delete all replies
                var cReplies = await _commentReplyRepo.GetAsync(new CommentReplySpec(cmt.Id));

                if (cReplies.Any())
                {
                    _commentReplyRepo.Delete(cReplies);
                }

                // 2. Delete comment itself
                _commentRepo.Delete(cmt);
                await _audit.AddAuditEntry(EventType.Content, AuditEventId.CommentDeleted, $"Comment '{cmt.Id}' deleted.");
            }
        }
    public async Task <Unit> Handle(DeleteCommentsCommand request, CancellationToken cancellationToken)
    {
        if (request.Ids is null || !request.Ids.Any())
        {
            throw new ArgumentNullException(nameof(request.Ids));
        }

        var spec     = new CommentSpec(request.Ids);
        var comments = await _commentRepo.GetAsync(spec);

        foreach (var cmt in comments)
        {
            // 1. Delete all replies
            var cReplies = await _commentReplyRepo.GetAsync(new CommentReplySpec(cmt.Id));

            if (cReplies.Any())
            {
                await _commentReplyRepo.DeleteAsync(cReplies);
            }

            // 2. Delete comment itself
            await _commentRepo.DeleteAsync(cmt);
        }

        return(Unit.Value);
    }
Beispiel #7
0
        public Task <IReadOnlyList <CommentDetailedItem> > GetCommentsAsync(int pageSize, int pageIndex)
        {
            if (pageSize < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(pageSize), $"{nameof(pageSize)} can not be less than 1.");
            }

            var spec     = new CommentSpec(pageSize, pageIndex);
            var comments = _commentRepo.SelectAsync(spec, CmtDetailSelector);

            return(comments);
        }
    public Task <IReadOnlyList <CommentDetailedItem> > Handle(GetCommentsQuery request, CancellationToken cancellationToken)
    {
        if (request.PageSize < 1)
        {
            throw new ArgumentOutOfRangeException(nameof(request.PageSize), $"{nameof(request.PageSize)} can not be less than 1.");
        }

        var spec     = new CommentSpec(request.PageSize, request.PageIndex);
        var comments = _commentRepo.SelectAsync(spec, CommentDetailedItem.EntitySelector);

        return(comments);
    }
Beispiel #9
0
    public async Task <Unit> Handle(ToggleApprovalCommand request, CancellationToken cancellationToken)
    {
        if (request.CommentIds is null || !request.CommentIds.Any())
        {
            throw new ArgumentNullException(nameof(request.CommentIds));
        }

        var spec     = new CommentSpec(request.CommentIds);
        var comments = await _commentRepo.GetAsync(spec);

        foreach (var cmt in comments)
        {
            cmt.IsApproved = !cmt.IsApproved;
            await _commentRepo.UpdateAsync(cmt);
        }

        return(Unit.Value);
    }
Beispiel #10
0
        public async Task ToggleApprovalAsync(Guid[] commentIds)
        {
            if (commentIds is null || !commentIds.Any())
            {
                throw new ArgumentNullException(nameof(commentIds));
            }

            var spec     = new CommentSpec(commentIds);
            var comments = await _commentRepo.GetAsync(spec);

            foreach (var cmt in comments)
            {
                cmt.IsApproved = !cmt.IsApproved;
                await _commentRepo.UpdateAsync(cmt);

                string logMessage = $"Updated comment approval status to '{cmt.IsApproved}' for comment id: '{cmt.Id}'";
                await _audit.AddAuditEntry(
                    EventType.Content, cmt.IsApproved?AuditEventId.CommentApproval : AuditEventId.CommentDisapproval, logMessage);
            }
        }
Beispiel #11
0
        public Task <Response> DeleteComments(Guid[] commentIds)
        {
            return(TryExecuteAsync(async() =>
            {
                var spec = new CommentSpec(commentIds);
                var comments = await _commentRepository.GetAsync(spec);
                foreach (var cmt in comments)
                {
                    // 1. Delete all replies
                    var cReplies = await _commentReplyRepository.GetAsync(new CommentReplySpec(cmt.Id));
                    if (cReplies.Any())
                    {
                        _commentReplyRepository.Delete(cReplies);
                        Logger.LogInformation($"Deleted comment replies under comment id: '{cmt.Id}'");
                    }

                    // 2. Delete comment itself
                    _commentRepository.Delete(cmt);
                    Logger.LogInformation($"Deleted comment id: '{cmt.Id}'");
                }

                return new SuccessResponse();
            }));
        }