public SubmissionResponse SaveNewSubmission(BaseSubmission submission, string result) { var response = new SubmissionResponse(); if (!DoesUserTaskSubmissionExist(submission.TaskId, submission.Nickname)) { var newSubmission = new UserSubmission() { Code = submission.Solution, IsCorrect = DoesTaskHaveCorrectResult(submission.TaskId, result), IsDeleted = false, Nickname = submission.Nickname, Result = result, SubmissionDateTime = DateTime.UtcNow, TaskId = submission.TaskId }; _programmingCompetitionDataContext.UserSubmission.Add(newSubmission); _programmingCompetitionDataContext.SaveChanges(); response.IsCorrectResult = newSubmission.IsCorrect; response.IsSubmissionAccepted = true; response.Response = newSubmission.Result; } else { response.IsSubmissionAccepted = false; response.Response = "There is already a submission for this task with current user nickname!"; } return(response); }
public async Task <SubmissionResponse> ExecuteFiddleAsync(BaseSubmission submission) { var model = ConfigureSubmissionForm(submission.Solution); const string requestEndpoint = "api/fiddles"; var stringContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync(requestEndpoint, stringContent); var result = new SubmissionResponse(); if (response.StatusCode != HttpStatusCode.OK) { result.Response = $@"Failed to execute API request. Here is an answer from API: Response Code: {response.StatusCode}, Response Body: {response.Content}"; result.IsSubmissionAccepted = false; } else { var unparsedResponse = await response.Content.ReadAsStringAsync(); var executionResult = JsonConvert.DeserializeObject <FiddleExecuteResult>(unparsedResponse); if (!executionResult.HasErrors && !executionResult.HasCompilationErrors) { result = _submissionsRepository.SaveNewSubmission(submission, executionResult.ConsoleOutput); } else { result.Response = executionResult.ConsoleOutput; result.IsSubmissionAccepted = false; } } return(result); }
public SubmissionResponse ExecuteSubmission([FromBody] BaseSubmissionDto baseSubmissionDto) { try { var baseSubmission = new BaseSubmission() { Nickname = baseSubmissionDto.Nickname, Solution = baseSubmissionDto.Solution, TaskId = baseSubmissionDto.TaskId }; var result = _submissionsService.ExecuteFiddleAsync(baseSubmission).Result; return(result); } catch (Exception exception) { _logger.LogError(exception.Message); throw; } }