From a9640990b26ff1656150f3156d87a2b22d6d85fb Mon Sep 17 00:00:00 2001 From: Anton Dzyk Date: Mon, 12 Jan 2026 11:46:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=D0=B0=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TaskController.java | 6 ++++- .../dto/task/CheckTaskRequest.java | 3 +++ .../service/results/ResultService.java | 8 +++++- .../service/results/ResultServiceImpl.java | 4 +-- .../service/task/TaskServiceImpl.java | 26 ++++++++++++++++--- 5 files changed, 40 insertions(+), 7 deletions(-) diff --git a/src/main/java/ru/oa2/lti/application/controller/TaskController.java b/src/main/java/ru/oa2/lti/application/controller/TaskController.java index d1ad564..76a8af2 100644 --- a/src/main/java/ru/oa2/lti/application/controller/TaskController.java +++ b/src/main/java/ru/oa2/lti/application/controller/TaskController.java @@ -144,6 +144,10 @@ public class TaskController { return ResponseEntity .accepted() - .body(taskService.checkTask(new CheckTaskRequest(ltiLogin.getClientId(), idToken))); + .body(taskService.checkTask(new CheckTaskRequest( + payload.getContextId(), + ltiLogin.getClientId(), + idToken + ))); } } diff --git a/src/main/java/ru/oa2/lti/application/dto/task/CheckTaskRequest.java b/src/main/java/ru/oa2/lti/application/dto/task/CheckTaskRequest.java index f4f003d..371d4d3 100644 --- a/src/main/java/ru/oa2/lti/application/dto/task/CheckTaskRequest.java +++ b/src/main/java/ru/oa2/lti/application/dto/task/CheckTaskRequest.java @@ -1,9 +1,12 @@ package ru.oa2.lti.application.dto.task; +import java.util.UUID; + /** * DTO для запроса проверки задачи */ public record CheckTaskRequest( + UUID contextId, String clientId, String idToken ) {} diff --git a/src/main/java/ru/oa2/lti/application/service/results/ResultService.java b/src/main/java/ru/oa2/lti/application/service/results/ResultService.java index e948bfb..961be2c 100644 --- a/src/main/java/ru/oa2/lti/application/service/results/ResultService.java +++ b/src/main/java/ru/oa2/lti/application/service/results/ResultService.java @@ -2,5 +2,11 @@ package ru.oa2.lti.application.service.results; public interface ResultService { - void setResult(String accessToken, String idToken); + /** + * Отправка результата проверки в LMS + * @param accessToken токен доступа к LMS + * @param idToken ID токен пользователя + * @param passed результат верификации (true - успех, false - неудача) + */ + void setResult(String accessToken, String idToken, boolean passed); } diff --git a/src/main/java/ru/oa2/lti/application/service/results/ResultServiceImpl.java b/src/main/java/ru/oa2/lti/application/service/results/ResultServiceImpl.java index 80cf6f7..f5bbce7 100644 --- a/src/main/java/ru/oa2/lti/application/service/results/ResultServiceImpl.java +++ b/src/main/java/ru/oa2/lti/application/service/results/ResultServiceImpl.java @@ -32,14 +32,14 @@ public class ResultServiceImpl implements ResultService { } @Override - public void setResult(String accessToken, String idTokenString) { + public void setResult(String accessToken, String idTokenString, boolean passed) { var idToken = jwtService.getTokenPayload(idTokenString); try { var body = mapper.writeValueAsString( ResultRequest.builder() - .scoreGiven(1L) + .scoreGiven(passed ? 1L : 0L) .scoreMaximum(1L) .activityProgress(ProgressType.Completed) .gradingProgress(GradingType.FullyGraded) diff --git a/src/main/java/ru/oa2/lti/application/service/task/TaskServiceImpl.java b/src/main/java/ru/oa2/lti/application/service/task/TaskServiceImpl.java index e07fc4c..9e0faf9 100644 --- a/src/main/java/ru/oa2/lti/application/service/task/TaskServiceImpl.java +++ b/src/main/java/ru/oa2/lti/application/service/task/TaskServiceImpl.java @@ -64,12 +64,32 @@ public class TaskServiceImpl implements TaskService { @Override @Transactional public ResultResponse checkTask(CheckTaskRequest request) { - log.info("Checking task for clientId: {}", request.clientId()); + log.info("Checking task for contextId: {}, clientId: {}", request.contextId(), request.clientId()); + // Получаем задачу для запуска скрипта верификации + Task task = taskRepository.findByContextId(request.contextId()) + .orElseThrow(() -> new TaskNotFoundException(request.contextId())); + + // Запускаем скрипт верификации + Script verificationScript = task.getVerificationScript(); + boolean verificationPassed = false; + + if (verificationScript.isExecutable()) { + verificationPassed = scriptExecutor.runVerificationScript( + request.contextId(), + verificationScript.content() + ); + log.info("Verification script result for context {}: {}", + request.contextId(), verificationPassed ? "PASSED" : "FAILED"); + } else { + log.warn("No verification script configured for context: {}", request.contextId()); + } + + // Получаем токен доступа и отправляем результат в LMS String accessToken = lmsGateway.exchangeForAccessToken(request.clientId()); - resultService.setResult(accessToken, request.idToken()); + resultService.setResult(accessToken, request.idToken(), verificationPassed); - return new ResultResponse("success"); + return new ResultResponse(verificationPassed ? "success" : "failed"); } @Override