예제 #1
0
        public async Task <IActionResult> JoinAndEvaluateAsync(
            [FromQuery] int primaryExamId,
            [FromQuery] int secondaryExamId)
        {
            var primaryExamForms = await _studentOpticalFormRepository.GetStudentOpticalFormsByExamIdAsync(primaryExamId);

            var secondaryExamForms = await _studentOpticalFormRepository.GetStudentOpticalFormsByExamIdAsync(secondaryExamId);

            var combinedExamForms     = _evaluator.JoinSets(primaryExamForms, secondaryExamForms);
            var answerKeyOpticalForms = await _answerKeyOpticalFormRepository.GetByExamIdAsync(primaryExamId);

            var forms = _evaluator.Evaluate(answerKeyOpticalForms.ToList(), combinedExamForms.ToList())
                        .ToList();

            return(Ok(new JoinResult()
            {
                ExamStatistics = StatisticsCalculator.Calculate(forms),
                Forms = forms,
            }));
        }
        private async Task RunAsync(int examId)
        {
            var answerKeyForms = await _answerKeyOpticalFormRepository.GetByExamIdAsync(examId);

            var studentForms = await _studentOpticalFormRepository.GetStudentOpticalFormsByExamIdAsync(examId);

            studentForms = _evaluator.Evaluate(answerKeyForms, studentForms).ToList();
            await _studentOpticalFormRepository.AddOrUpdateManyAsync(studentForms);

            var examStatistics = StatisticsCalculator.Calculate(studentForms);
            await _examStatisticsRepository.AddOrUpdateAsync(examStatistics);

            _logger.LogInformation($"Evaluation for exam {examId} ended...");

            if (answerKeyForms.First().SharedExam)
            {
                var results = _evaluator.EvaluateSchoolResults(examStatistics, studentForms);
                await _schoolResultRepository.AddOrUpdateManyAsync(results);
            }
        }
예제 #3
0
 public async Task <IActionResult> GetAnswerKeyFormsAsync(int examId)
 {
     return(Ok(await _answerKeyOpticalFormRepository.GetByExamIdAsync(examId)));
 }