Example #1
0
        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
            });
        }
Example #2
0
        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
            });
        }
Example #3
0
        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
            });
        }