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(); })); }
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); }
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); })); }
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(); })); }
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); }
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); }
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); }
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); } }
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(); })); }