public async Task <CodeTestingResult> TestCode(TestingCode code)
        {
            var result = new CodeTestingResult
            {
                CodeAnalysisResult = await _codeAnalysisApi.AnalyzeCodeAsync(code),
                Score = (byte)Random.Next(1, 100 + 1)
            };

            if (result.CodeAnalysisResult.IsSuccessful)
            {
                result.CodeExecutionResult = await _codeExecutionApi.ExecuteCodeAsync(code);
            }

            return(result);
        }
Beispiel #2
0
        public async Task <CodeAnalysisResult> AnalyzeAsync(Program program)
        {
            if (program == null)
            {
                throw ExceptionHelper.CreatePublicException("Не указана программа.");
            }

            if (string.IsNullOrWhiteSpace(program.Source))
            {
                throw ExceptionHelper.CreatePublicException("Не указан исходный код программы.");
            }

            var model = await _repositoryProgram.FindFirstAsync(new ProgramsById(program.Id)) ??
                        throw ExceptionHelper.NotFound <DatabaseProgram>(program.Id);

            var user = await _context.GetCurrentUserAsync();

            if (user.IsStudent() && !new ProgramsByStudentId(user.Id).IsSatisfiedBy(model))
            {
                throw ExceptionHelper.NoAccess();
            }

            if (user.IsLecturer() && !new ProgramsByLecturerId(user.Id).IsSatisfiedBy(model))
            {
                throw ExceptionHelper.NoAccess();
            }

            _mapper.Map(_mapper.Map <Program>(model), program);

            try
            {
                var code = _mapper.Map <TestingCode>(program);

                var response = await _codeAnalysisApi.AnalyzeCodeAsync(code);

                return(_mapper.Map <CodeAnalysisResult>(response));
            }
            catch (Exception ex)
            {
                _logger.LogError(
                    $"Не удалось выполнить запрос на анализ кода. " +
                    $"Идентификатор пользователя: {user.Id}. " +
                    $"Идентификатор программы: {program.Id}.", ex);

                throw ExceptionHelper.CreatePublicException("Не удалось выполнить запрос на анализ кода.");
            }
        }