public async Task <object> RequestCodeReview(string objectId) { var oid = new ObjectId(objectId); var user = _userService.CurrentUser; var sender = user.Id; // generate notifications var ccData = await _dbService.Data.SingleAsync(oid); _utilService.RequireAccess(ccData); var recipients = _utilService.GetUsersRelatedToResult(ccData); await _utilService.SendNotificationAsync(recipients, new CcEvent { ResultId = oid, Type = CcEventType.NewCodeReview, IsNew = true, Sender = sender, }); ccData.ReviewRequest = System.DateTime.Now; var result = await _dbService.Data.UpdateDocumentAsync(ccData); var updated = (int)result.ModifiedCount; return(new { status = "ok", updated }); }
public async Task <object> PostComments(IList <CommentServiceItem> items) { var sender = _userService.CurrentUser.Id; var updated = 0; if (items.Any()) { foreach (var item in items) { item.comment.User = sender; var objectId = new ObjectId(item.objectId); var data = await _dbService.Data.SingleAsync(objectId); _utilService.RequireAccess(data); var finished = new CcData.LineComment { Time = DateTimeOffset.Now.ToUnixTimeSeconds(), Text = item.comment.Text.ToMarkdown(), User = sender, Filename = item.comment.Filename, Line = item.comment.Line, }; data.Comments.Add(finished); var result = await _dbService.Data.UpdateDocumentAsync(data); updated += result.ModifiedCount; } var oid = new ObjectId(items.First().objectId); var ccData = await _dbService.Data.SingleAsync(oid); var recipients = _utilService.GetUsersRelatedToResult(ccData); await _utilService.SendNotificationAsync(recipients, new CcEvent { ResultId = oid, Type = CcEventType.NewComment, IsNew = true, Sender = sender, }); } return(new { status = updated > 0 ? "ok" : "error", updated }); }
public async Task <object> SaveGrade(MarkSolutionItem item) { var oid = new ObjectId(item.objectId); var ccData = await _dbService.Data.SingleAsync(oid); var sender = _userService.CurrentUser.Id; var recipients = _utilService.GetUsersRelatedToResult(ccData); ccData.Points = item.points; ccData.GradeComment = item.comment; await _utilService.MarkNotificationAsReadAsync(oid, sender); var result = await _dbService.Data.UpdateDocumentAsync(ccData); var notificationCount = default(int); if (result.IsAcknowledged) { notificationCount = await _utilService.SendNotificationAsync(recipients, new CcEvent { ResultId = oid, Type = CcEventType.NewGrade, IsNew = true, Subject = $"**[{ccData.CourseName}]**: Received **{item.points}%** in problem **{ccData.Problem}**", Sender = sender, }); } return(new { status = result.IsAcknowledged ? "ok" : "error", count = notificationCount }); }