This commit is contained in:
Anton Dzyk
2025-12-11 22:00:11 +03:00
commit 24f9f8d806
23 changed files with 888 additions and 0 deletions
@@ -0,0 +1,13 @@
package ru.oa2.lti;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class LTIProviderApplication {
public static void main(String[] args) {
SpringApplication.run(LTIProviderApplication.class, args);
}
}
@@ -0,0 +1,35 @@
package ru.oa2.lti.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import ru.oa2.lti.model.LtiLogin;
@Slf4j
@RestController
@RequestMapping("/tool/lti")
public class LoginController {
@PostMapping("/login")
public String login(
@RequestParam("client_id") String clientId,
@RequestParam("iss") String iss,
@RequestParam("login_hint") String loginHint,
@RequestParam("lti_deployment_id") String ltiDeploymentId,
@RequestParam("lti_message_hint") String ltiMessageHint,
@RequestParam("target_link_uri") String targetLinkUri
) {
var ltiLogin = LtiLogin.builder()
.clientId(clientId)
.iss(iss)
.loginHint(loginHint)
.ltiDeploymentId(ltiDeploymentId)
.ltiMessageHint(ltiMessageHint)
.targetLinkUri(targetLinkUri)
.build();
log.info("BODY: {}", ltiLogin);
//TODO service get context (by student/teatcher)
return "redirect:" + "/page1";
}
}
@@ -0,0 +1,5 @@
```shell
curl -XPOST http://localhost:8080/tool/lti/login \
-d 'client_id=27e2d42d-d218-4ab9-b063-85e3ec87ec8f&iss=https%3A%2F%2Flocalhost&login_hint=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImU5ODA3YTg2LTVhNWQtNDI0MC1hYjI1LWNhYTUyZDliZjUxOSJ9.eyJkZXBsb3ltZW50S2V5IjoxLCJkZXBsb3ltZW50SWQiOiIyNzE1ZDA0NS03N2M1LTRkODgtYTFlNC05MmQ3MjFmY2M1NGIiLCJjb250ZXh0S2V5IjoxLCJjb250ZXh0SWQiOiJlMmE4ZGQxMy04MWJhLTQwMTEtODgwNi0wMjA5NGZkZjg5ZjMiLCJjb3Vyc2VhZG1pbiI6ZmFsc2UsImNvYWNoIjpmYWxzZSwicGFydGljaXBhbnQiOnRydWV9.vgPLHQA9scdED3_OwOy46h6VmzpN4arIHY3-YDBdhH4kuEqeCOjjtFbGdDqauKoQBTSVo4UvoK4JQLMhak6qsFchCj54mPob8jbaKLd0GnO_jY0sR609Nrk7Muq7cki_4PjVMX8TTHp-VYlSHjVxQH_z_D5Wld27J95z4qJjRU59GmvLGDqdLyerVVBO-zaavYsUbEEiAxoX3hmytxrarmJ7OHpxufNOeXzZ0DSGUmU5ycuTAqxODaHO1Y4rQM6XlvSfDh_TmXP8QEkatlp2cdjRpNWyOdUW_hZfbtkqukwt1ZP7KEgWzNI3vivpBjm2xfUG2YLwXPJqHa47NQgvsQ&lti_deployment_id=2715d045-77c5-4d88-a1e4-92d721fcc54b&lti_message_hint=1802240&target_link_uri=https%3A%2F%2Fopenolat.local%2Ftool'
```
@@ -0,0 +1,15 @@
package ru.oa2.lti.model;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class LtiLogin {
String clientId;
String iss;
String loginHint;
String ltiDeploymentId;
String ltiMessageHint;
String targetLinkUri;
}
@@ -0,0 +1,8 @@
package ru.oa2.lti.model;
public record ResultRequest(
String taskId,
String userId,
String answer
) {
}
@@ -0,0 +1,6 @@
package ru.oa2.lti.model;
public record TaskResult(
//TODO результат работы(лог), true/false, error:<msg>, оценка
) {
}
@@ -0,0 +1,6 @@
package ru.oa2.lti.model;
public enum TaskType {
DOCKER,
KUBERNETES
}
+7
View File
@@ -0,0 +1,7 @@
package ru.oa2.lti.model;
public record User(
String clientId,
String role
) {
}
@@ -0,0 +1,4 @@
package ru.oa2.lti.repository;
public interface TaskRepository {
}
@@ -0,0 +1,16 @@
package ru.oa2.lti.repository.entities;
import jakarta.persistence.*;
import ru.oa2.lti.model.TaskType;
@Entity
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
long taskId;
@Column(length = 20)
@Enumerated(EnumType.STRING)
TaskType taskType;
}
@@ -0,0 +1,27 @@
package ru.oa2.lti.service;
import ru.oa2.lti.model.ResultRequest;
import ru.oa2.lti.model.TaskResult;
import ru.oa2.lti.model.User;
import java.util.UUID;
public interface TaskService {
/*
Получение задачи (контекста лабораторной работы)
*/
//TODO возвращаем объект -> в String отдельный тех.класс сериализации через шаблонизатор
String getTask(String id, User user);
/*
Отправить ответ по задаче
UUID - id - kеу kafka message?
*/
UUID submit(ResultRequest resultRequest);
/*
Проверить результат по UUID отправленного результата
*/
TaskResult getResult(UUID requestId);
}
@@ -0,0 +1,26 @@
package ru.oa2.lti.service;
import ru.oa2.lti.model.ResultRequest;
import ru.oa2.lti.model.TaskResult;
import ru.oa2.lti.model.User;
import java.util.UUID;
//TODO реализовать методы
public class TaskServiceImpl implements TaskService {
@Override
public String getTask(String id, User user) {
return "";
}
@Override
public UUID submit(ResultRequest resultRequest) {
return null;
}
@Override
public TaskResult getResult(UUID requestId) {
return null;
}
}
@@ -0,0 +1,2 @@
spring.application.name=lti-provider
server.port=9999
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
</databaseChangeLog>
@@ -0,0 +1,13 @@
package ru.oa2.lti;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class LTIProviderApplicationTests {
@Test
void contextLoads() {
}
}