package ru.oa2.lti.service.results; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.web.client.RestClient; import ru.oa2.lti.service.jwt.IdTokenPayload; import java.util.UUID; @Slf4j @Service public class ResultServiceImpl implements ResultService { private final RestClient restClient; private final ObjectMapper mapper; public ResultServiceImpl(RestClient client) { this.restClient = client; this.mapper = new ObjectMapper(); } @Override public void setResult(String accessToken, IdTokenPayload idToken) { // http://openolat.local/lti/ags/b0d12061-2564-47a0-9291-b0d226f1eefe/context/112999233990970/lineitems/112999233990979/lineitem var resp = restClient.get() .uri("http://openolat.local/lti/ags/b0d12061-2564-47a0-9291-b0d226f1eefe/context/112999233990970/lineitems/112999233990979/lineitem") .header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/vnd.ims.lis.v1.score+json") .header("Accept", "application/vnd.ims.lis.v1.score+json") .retrieve(); var respBody = resp.toEntity(String.class).getBody(); try { Lineitems lineitems = mapper.readValue(respBody, Lineitems.class); String resourceId = "112999233990970"; //TODO String userId = "efc0b988-cfe0-4d00-9466-cf86fcf8f885"; //TODO var result = restClient .post() .uri(String.format("/lti/ags/%s/context/%s/lineitems/laba/lineitem/scores/x", idToken.getContext().id(), resourceId)) .header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/vnd.ims.lis.v1.score+json") .header("Accept", "application/vnd.ims.lis.v1.score+json") .body( String.format( "{\"id\":\"%s\", \"userId\": \"%s\", \"scoreMaximum\": 1, \"label\":\"LTI page 1\", \"resourceId\": \"%s\"}", lineitems.id(), userId, lineitems.resourceId() ) ) .retrieve(); log.info("RESULT RESP: {}", result.toEntity(String.class)); } catch (Exception e) { log.error(e.getMessage()); } } }