Beispiel #1
0
        public async Task ProcessResult(ULearnDb db, UserExerciseSubmission submission, RunningResults result)
        {
            if (!isEnabled)
            {
                return;
            }

            if (result.Verdict != Verdict.Ok)
            {
                return;
            }

            /* Send to antiplagiarism service only accepted submissions */
            var checking = submission.AutomaticChecking;

            if (!checking.IsRightAnswer)
            {
                return;
            }

            var parameters = new AddSubmissionParameters
            {
                TaskId         = submission.SlideId,
                Language       = AntiPlagiarism.Api.Models.Language.CSharp,
                Code           = submission.SolutionCode.Text,
                AuthorId       = Guid.Parse(submission.UserId),
                AdditionalInfo = new AntiPlagiarismAdditionalInfo {
                    SubmissionId = submission.Id
                }.ToJsonString(),
            };

            antiPlagiarismClient.AddSubmissionAsync(parameters).ConfigureAwait(false).GetAwaiter().OnCompleted(() => { });
        }
        public async Task ProcessResult(UserExerciseSubmission submission, RunningResults result)
        {
            if (!isEnabled)
            {
                return;
            }

            if (result.Verdict != Verdict.Ok)
            {
                return;
            }

            /* Send to antiplagiarism service only accepted submissions */
            var checking = submission.AutomaticChecking;

            if (!checking.IsRightAnswer)
            {
                return;
            }

            var parameters = new AddSubmissionParameters
            {
                TaskId         = submission.SlideId,
                Language       = submission.Language,
                Code           = submission.SolutionCode.Text,
                AuthorId       = Guid.Parse(submission.UserId),
                AdditionalInfo = JsonConvert.SerializeObject(new AntiPlagiarismAdditionalInfo {
                    SubmissionId = submission.Id
                }),
                ClientSubmissionId = submission.Id.ToString()
            };
            await antiPlagiarismClient.AddSubmissionAsync(parameters).ConfigureAwait(false);
        }
Beispiel #3
0
        public async Task <IActionResult> AddSubmission(AddSubmissionParameters parameters)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (parameters.Code.Length > configuration.MaxCodeLength)
            {
                return(Json(ApiError.Create($"Code is too long. Maximum length is {configuration.MaxCodeLength} bytes")));
            }

            var tokensCount = GetTokensCount(parameters.Code);
            var submission  = await submissionsRepo.AddSubmissionAsync(
                client.Id,
                parameters.TaskId,
                parameters.AuthorId,
                parameters.Language,
                parameters.Code,
                tokensCount,
                parameters.AdditionalInfo
                );

            logger.Information(
                "Добавлено новое решение {submissionId} по задаче {taskId}, автор {authorId}, язык {language}, доп. информация {additionalInfo}",
                submission.Id,
                parameters.TaskId,
                parameters.AuthorId,
                parameters.Language,
                parameters.AdditionalInfo
                );

            await ExtractSnippetsFromSubmissionAsync(submission);

            if (await NeedToRecalculateTaskStatistics(client.Id, submission.TaskId))
            {
                await CalculateTaskStatisticsParametersAsync(client.Id, submission.TaskId);
            }

            return(Json(new AddSubmissionResult
            {
                SubmissionId = submission.Id,
            }));
        }
Beispiel #4
0
        public async Task ProcessResult(ULearnDb db, UserExerciseSubmission submission, RunningResults result)
        {
            if (!isEnabled)
            {
                return;
            }

            if (result.Verdict != Verdict.Ok)
            {
                return;
            }

            /* Send to antiplagiarism service only accepted submissions */
            var checking = submission.AutomaticChecking;

            if (!checking.IsRightAnswer)
            {
                return;
            }

            var parameters = new AddSubmissionParameters
            {
                TaskId         = submission.SlideId,
                Language       = AntiPlagiarism.Api.Models.Language.CSharp,
                Code           = submission.SolutionCode.Text,
                AuthorId       = Guid.Parse(submission.UserId),
                AdditionalInfo = new AntiPlagiarismAdditionalInfo {
                    SubmissionId = submission.Id
                }.ToJsonString(),
            };
            var antiPlagiarismResult = await antiPlagiarismClient.AddSubmissionAsync(parameters).ConfigureAwait(false);

            log.Info($"Получил ответ от сервиса антиплагиата: {antiPlagiarismResult}");

            var userSolutionsRepo = new UserSolutionsRepo(db, WebCourseManager.Instance);
            await userSolutionsRepo.SetAntiPlagiarismSubmissionId(submission, antiPlagiarismResult.SubmissionId).ConfigureAwait(false);
        }
Beispiel #5
0
        public async Task <ActionResult <AddSubmissionResponse> > AddSubmission([FromQuery] string token, AddSubmissionParameters parameters)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (parameters.Code.Length > configuration.AntiPlagiarism.MaxCodeLength)
            {
                return(BadRequest(new ErrorResponse($"Code is too long. Maximum length is {configuration.AntiPlagiarism.MaxCodeLength} bytes")));
            }

            var tokensCount = GetTokensCount(parameters.Code, parameters.Language);
            var submission  = await submissionsRepo.AddSubmissionAsync(
                client.Id,
                parameters.TaskId,
                parameters.AuthorId,
                parameters.Language,
                parameters.Code,
                tokensCount,
                parameters.AdditionalInfo,
                parameters.ClientSubmissionId
                ).ConfigureAwait(false);

            log.Info(
                "Добавлено новое решение {submissionId} по задаче {taskId}, автор {authorId}, язык {language}, доп. информация {additionalInfo}",
                submission.Id,
                parameters.TaskId,
                parameters.AuthorId,
                parameters.Language,
                parameters.AdditionalInfo
                );

            await workQueueRepo.Add(QueueIds.NewSubmissionsQueue, submission.Id.ToString()).ConfigureAwait(false);

            return(new AddSubmissionResponse
            {
                SubmissionId = submission.Id,
            });
        }
Beispiel #6
0
 public Task <AddSubmissionResponse> AddSubmissionAsync(AddSubmissionParameters parameters)
 {
     return(MakeRequestAsync <AddSubmissionParameters, AddSubmissionResponse>(HttpMethod.Post, Urls.AddSubmission, parameters));
 }
 public Task <AddSubmissionResult> AddSubmissionAsync(AddSubmissionParameters parameters)
 {
     return(MakeRequestAsync <AddSubmissionParameters, AddSubmissionResult>(Urls.AddSubmission, parameters, HttpMethod.Post));
 }