Esempio n. 1
0
        private ExerciseBlockData CreateExerciseBlockData(Course course, Slide slide, UserExerciseSubmission submission, bool onlyAccepted, string currentUserId)
        {
            var userId = submission?.UserId ?? currentUserId;
            var visit  = visitsRepo.FindVisiter(course.Id, slide.Id, userId);

            var solution          = submission?.SolutionCode.Text;
            var submissionReviews = submission?.ManualCheckings.LastOrDefault()?.NotDeletedReviews;

            var hasUncheckedReview = submission?.ManualCheckings.Any(c => !c.IsChecked) ?? false;
            var hasCheckedReview   = submission?.ManualCheckings.Any(c => c.IsChecked) ?? false;
            var reviewState        = hasCheckedReview ? ExerciseReviewState.Reviewed :
                                     hasUncheckedReview ? ExerciseReviewState.WaitingForReview :
                                     ExerciseReviewState.NotReviewed;

            var submissions = onlyAccepted ?
                              solutionsRepo.GetAllAcceptedSubmissionsByUser(course.Id, slide.Id, userId) :
                              solutionsRepo.GetAllSubmissionsByUser(course.Id, slide.Id, userId);
            var topUserReviewComments = slideCheckingsRepo.GetTopUserReviewComments(course.Id, slide.Id, currentUserId, 10);

            return(new ExerciseBlockData(course.Id, (ExerciseSlide)slide, visit?.IsSkipped ?? false, solution)
            {
                Url = Url,
                Reviews = submissionReviews?.ToList() ?? new List <ExerciseCodeReview>(),
                ReviewState = reviewState,
                IsGuest = string.IsNullOrEmpty(currentUserId),
                SubmissionSelectedByUser = submission,
                Submissions = submissions.ToList(),
                TopUserReviewComments = topUserReviewComments,
            });
        }
Esempio n. 2
0
        public async Task <Visit> VisitSlide(string courseId, Guid slideId, string userId)
        {
            if (string.IsNullOrEmpty(userId))
            {
                return(null);
            }
            await visitsRepo.AddVisit(courseId, slideId, userId);

            return(visitsRepo.FindVisiter(courseId, slideId, userId));
        }