package ru.oa2.lti.application.controller; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import ru.oa2.lti.domain.model.auth.Payload; import ru.oa2.lti.application.service.task.TaskService; import ru.oa2.lti.domain.model.auth.LtiLogin; import ru.oa2.lti.domain.model.ResultRequest; import java.util.Objects; /* Контроллер работы с задачами(лабораторными работами) GET - возвращает контекст лабораторной работы POST - обновление/создание лабораторной работы (только для преподавателей/администраторов) POST /submit - отправка на автоматическую проверку */ @Controller @RequestMapping("/tool/lti/task") public class TaskController { private final TaskService taskService; public TaskController(TaskService taskService) { this.taskService = taskService; } @GetMapping public String showDockerTas(Model model, HttpServletRequest request) { var session = request.getSession(); var payload = (Payload) session.getAttribute("payload"); if (payload != null) { var data = taskService.getTask(payload.getContextId()); if (data == null) { return "redirect:/error"; } model.addAttribute("description", data); } if (Objects.requireNonNull(payload).getCoach()) { return "task-editor"; } return "task"; } @PostMapping public ResponseEntity updateTask() { //TODO exception taskService.saveTask("TODO", "TODO", "TODO"); return ResponseEntity.accepted().build(); } @PostMapping("/submit") public ResponseEntity result(HttpServletRequest req) { HttpSession session = req.getSession(false); if (session == null) return ResponseEntity.status(401).build(); var ltiLogin = (LtiLogin) session.getAttribute("lti_login"); var idToken = (String) session.getAttribute("id_token"); return ResponseEntity .accepted() .body(taskService.checkTask(new ResultRequest(ltiLogin.getClientId(), idToken))); } }