Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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;
            }
        }