package com.guo.learningprogresstracker.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.protobuf.ServiceException; import com.guo.learningprogresstracker.common.Ops; import com.guo.learningprogresstracker.dto.TaskInfo; import com.guo.learningprogresstracker.dto.request.CreateTaskApplicationRequest; import com.guo.learningprogresstracker.dto.response.StudySessionResponse; import com.guo.learningprogresstracker.dto.response.TaskInfoResponse; import com.guo.learningprogresstracker.entity.CommonResult; import com.guo.learningprogresstracker.dto.request.TaskRequest; import com.guo.learningprogresstracker.dto.request.UpdateTaskApplicationRequest; import com.guo.learningprogresstracker.entity.TaskApplicationEntity; import com.guo.learningprogresstracker.entity.UserPriorityWeightsEntity; import com.guo.learningprogresstracker.exception.ErrorParameterException; import com.guo.learningprogresstracker.exception.NotFindEntitiesException; import com.guo.learningprogresstracker.service.PriorityWeightsService; import com.guo.learningprogresstracker.service.TasksService; import com.guo.learningprogresstracker.service.impl.StudySessionsServiceImpl; import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.rmi.ServerException; import java.util.List; /** * 任务控制层 * * @author guo */ @RequestMapping("/tasks") @RestController @Validated @RequiredArgsConstructor public class TaskController { private final TasksService tasksService; private final StudySessionsServiceImpl studySessionsServiceImpl; private final PriorityWeightsService priorityWeightsService; @GetMapping("/priority-weights") @Operation(summary = "获取优先级维度权重配置") public CommonResult getPriorityWeights() { return CommonResult.success(priorityWeightsService.getWeights()); } @PutMapping("/priority-weights") @Operation(summary = "保存优先级维度权重配置并重算全部任务优先级") public CommonResult savePriorityWeights( @RequestBody UserPriorityWeightsEntity weights) throws ErrorParameterException { return CommonResult.success(priorityWeightsService.saveWeights(weights)); } @PostMapping @Operation(summary = "添加新任务") public CommonResult addTask(@RequestBody @Validated({Ops.CreateG.class}) TaskRequest taskRequest) throws ErrorParameterException { return CommonResult.success("请求成功", tasksService.addTask(taskRequest)); } @Operation(summary = "任务详情API") @GetMapping("/{taskId}") public CommonResult getTask(@PathVariable("taskId") String taskId) { return CommonResult.success(tasksService.getTask(taskId)); } @PutMapping("/{taskId}") @Operation(summary = "更新任务详情") public CommonResult updateTask(@PathVariable("taskId") String taskId, @Validated(Ops.UpdateG.class) @RequestBody TaskRequest updatedTask) { tasksService.updateTask(taskId, updatedTask); return CommonResult.success(); } @DeleteMapping("/{taskId}") @Operation(summary = "删除指定任务") public CommonResult deleteTask(@PathVariable("taskId") String taskId) throws ServerException { tasksService.deleteTask(taskId); return CommonResult.success(); } @GetMapping("/{taskNum}/applications") @Operation(summary = "获取任务应用场景列表") public CommonResult> getApplications(@PathVariable String taskNum) throws NotFindEntitiesException { return CommonResult.success(tasksService.getApplications(taskNum)); } @PostMapping("/{taskNum}/applications") @Operation(summary = "创建任务应用场景") public CommonResult createApplication( @PathVariable String taskNum, @Valid @RequestBody CreateTaskApplicationRequest request) throws NotFindEntitiesException { request.setTaskNum(taskNum); return CommonResult.success(tasksService.createApplication(request)); } @PutMapping("/applications/{id}") @Operation(summary = "更新任务应用场景") public CommonResult updateApplication( @PathVariable Integer id, @Valid @RequestBody UpdateTaskApplicationRequest request) throws NotFindEntitiesException { return CommonResult.success(tasksService.updateApplication(id, request)); } @DeleteMapping("/applications/{id}") @Operation(summary = "删除任务应用场景") public CommonResult deleteApplication(@PathVariable Integer id) throws NotFindEntitiesException { tasksService.deleteApplication(id); return CommonResult.success(); } @GetMapping @Operation(summary = "获取所有任务列表") public CommonResult> tasksList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { return CommonResult.success(tasksService.taskList(pageNum, pageSize)); } /** * 开始或继续一个【学习会话】 */ @GetMapping("/{taskNum}/study-sessions/start-or-continue") public CommonResult startOrContinueStudySession(@NotEmpty(message = "taskNum不可为空") @PathVariable String taskNum) throws NotFindEntitiesException, ServiceException { StudySessionResponse response = studySessionsServiceImpl.startOrContinueStudySession(taskNum); return CommonResult.success(response); } /** * 通过学习任务num获取该任务的未结束会话 */ @GetMapping("/{taskNum}/not-ended-study-session") public CommonResult getNotEndedStudySessionByTaskNum(@NotEmpty(message = "taskNum不可为空") @PathVariable String taskNum) throws ErrorParameterException { StudySessionResponse response = studySessionsServiceImpl.getNotEndedStudySessionByTaskNum(taskNum); return CommonResult.success(response); } }