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