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); }
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("Не удалось выполнить запрос на анализ кода."); } }