Exemplo n.º 1
0
        public async Task ProcessResult(UserExerciseSubmission submission, RunningResults result)
        {
            if (result.StyleErrors == null || result.StyleErrors.Count == 0)
            {
                return;
            }

            if (result.Verdict != Verdict.Ok)
            {
                return;
            }

            var checking = submission.AutomaticChecking;

            if (!checking.IsRightAnswer)
            {
                return;
            }

            var exerciseSlide = (await courseManager.FindCourseAsync(submission.CourseId))
                                ?.FindSlideById(submission.SlideId, true) as ExerciseSlide;

            if (exerciseSlide == null)
            {
                return;
            }

            if (ulearnBotUserId == null)
            {
                ulearnBotUserId = await usersRepo.GetUlearnBotUserId();
            }

            var exerciseMetricId = ExerciseController.GetExerciseMetricId(submission.CourseId, exerciseSlide);

            metricSender.SendCount($"exercise.{exerciseMetricId}.StyleViolation");

            foreach (var error in result.StyleErrors)
            {
                await slideCheckingsRepo.AddExerciseCodeReview(
                    submission.Id,
                    ulearnBotUserId,
                    error.Span.StartLinePosition.Line,
                    error.Span.StartLinePosition.Character,
                    error.Span.EndLinePosition.Line,
                    error.Span.EndLinePosition.Character,
                    error.Message
                    );

                var errorName = error.ErrorType;
                metricSender.SendCount("exercise.style_error");
                metricSender.SendCount($"exercise.style_error.{errorName}");
                metricSender.SendCount($"exercise.{exerciseMetricId}.style_error");
                metricSender.SendCount($"exercise.{exerciseMetricId}.style_error.{errorName}");
            }
        }