доработка запуска скрипта проверки

This commit is contained in:
Anton Dzyk 2026-01-12 11:46:25 +03:00
parent 498ba86305
commit a9640990b2
5 changed files with 40 additions and 7 deletions

View File

@ -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
)));
}
}

View File

@ -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
) {}

View File

@ -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);
}

View File

@ -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)

View File

@ -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