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

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 return ResponseEntity
.accepted() .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; package ru.oa2.lti.application.dto.task;
import java.util.UUID;
/** /**
* DTO для запроса проверки задачи * DTO для запроса проверки задачи
*/ */
public record CheckTaskRequest( public record CheckTaskRequest(
UUID contextId,
String clientId, String clientId,
String idToken String idToken
) {} ) {}

View File

@ -2,5 +2,11 @@ package ru.oa2.lti.application.service.results;
public interface ResultService { 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 @Override
public void setResult(String accessToken, String idTokenString) { public void setResult(String accessToken, String idTokenString, boolean passed) {
var idToken = jwtService.getTokenPayload(idTokenString); var idToken = jwtService.getTokenPayload(idTokenString);
try { try {
var body = mapper.writeValueAsString( var body = mapper.writeValueAsString(
ResultRequest.builder() ResultRequest.builder()
.scoreGiven(1L) .scoreGiven(passed ? 1L : 0L)
.scoreMaximum(1L) .scoreMaximum(1L)
.activityProgress(ProgressType.Completed) .activityProgress(ProgressType.Completed)
.gradingProgress(GradingType.FullyGraded) .gradingProgress(GradingType.FullyGraded)

View File

@ -64,12 +64,32 @@ public class TaskServiceImpl implements TaskService {
@Override @Override
@Transactional @Transactional
public ResultResponse checkTask(CheckTaskRequest request) { 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()); 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 @Override