AssignmentController.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package com.njuzr.eaibackend.controller;
  2. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  3. import com.njuzr.eaibackend.dto.AssignmentDTO;
  4. import com.njuzr.eaibackend.dto.AssignmentQueryDTO;
  5. import com.njuzr.eaibackend.dto.AssignmentUpdateDTO;
  6. import com.njuzr.eaibackend.dto.CorrectDTO;
  7. import com.njuzr.eaibackend.enums.AssignmentCompletionStatus;
  8. import com.njuzr.eaibackend.po.Assignment;
  9. import com.njuzr.eaibackend.po.MyUserDetails;
  10. import com.njuzr.eaibackend.service.AIDialogueService;
  11. import com.njuzr.eaibackend.service.AssignmentService;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.security.access.prepost.PreAuthorize;
  14. import org.springframework.security.core.annotation.AuthenticationPrincipal;
  15. import org.springframework.validation.annotation.Validated;
  16. import org.springframework.web.bind.annotation.*;
  17. /**
  18. * @author: Leonezhurui
  19. * @Date: 2024/3/5 - 20:01
  20. * @Package: EAI-Backend
  21. */
  22. @RestController
  23. @RequestMapping("/api/assignment")
  24. public class AssignmentController {
  25. private final AssignmentService assignmentService;
  26. private final AIDialogueService aiDialogueService;
  27. @Autowired
  28. public AssignmentController(AssignmentService assignmentService, AIDialogueService aiDialogueService) {
  29. this.assignmentService = assignmentService;
  30. this.aiDialogueService = aiDialogueService;
  31. }
  32. /**
  33. * 创建作业,在某一个课程下创建作业
  34. * @param courseId
  35. * @param assignmentDTO
  36. * @return
  37. */
  38. @PreAuthorize("hasRole('TEACHER')")
  39. @PostMapping
  40. public MyResponse createAssignment(
  41. @AuthenticationPrincipal MyUserDetails user,
  42. @RequestParam Long courseId,
  43. @Validated @RequestBody AssignmentDTO assignmentDTO
  44. ) {
  45. return MyResponse.success(assignmentService.createAssignment(user, courseId, assignmentDTO));
  46. }
  47. @GetMapping
  48. public MyResponse findAssignmentPage(
  49. @RequestParam(value = "page", defaultValue = "1") int currentPage,
  50. @RequestParam(value = "size", defaultValue = "10") int pageSize,
  51. @RequestBody AssignmentQueryDTO assignmentQueryDTO
  52. ) {
  53. Page<Assignment> page = new Page<>(currentPage, pageSize);
  54. return MyResponse.success(assignmentService.findAssignmentPage(page, assignmentQueryDTO));
  55. }
  56. @GetMapping("/byCourse/{courseId}")
  57. public MyResponse getAssignmentsByCourseId(
  58. @RequestParam(value = "page", defaultValue = "1") int currentPage,
  59. @RequestParam(value = "size", defaultValue = "10") int pageSize,
  60. @PathVariable Long courseId
  61. ) {
  62. Page<Assignment> page = new Page<>(currentPage, pageSize);
  63. AssignmentQueryDTO assignmentQueryDTO = new AssignmentQueryDTO();
  64. assignmentQueryDTO.setCourseId(courseId);
  65. return MyResponse.success(assignmentService.findAssignmentPage(page, assignmentQueryDTO));
  66. }
  67. @GetMapping("/byAssignment/{assignmentId}")
  68. public MyResponse getAssignmentById(
  69. @PathVariable Long assignmentId
  70. ) {
  71. return MyResponse.success(assignmentService.findAssignmentById(assignmentId));
  72. }
  73. @PreAuthorize("hasRole('TEACHER')")
  74. @PutMapping
  75. public MyResponse updateAssignment(
  76. @AuthenticationPrincipal MyUserDetails user,
  77. @RequestParam Long assignmentId,
  78. @RequestBody AssignmentUpdateDTO assignmentDTO
  79. ) {
  80. return MyResponse.success(assignmentService.updateAssignment(user, assignmentId, assignmentDTO));
  81. }
  82. /**
  83. * 根据id删除某个作业
  84. * @param teacherId
  85. * @param assignmentId
  86. * @return
  87. */
  88. @PreAuthorize("hasRole('TEACHER')")
  89. @DeleteMapping
  90. public MyResponse deleteAssignment(
  91. @AuthenticationPrincipal(expression = "id") Long teacherId,
  92. @RequestParam Long assignmentId
  93. ) {
  94. assignmentService.deleteById(teacherId, assignmentId);
  95. return MyResponse.success("删除作业成功");
  96. }
  97. @PreAuthorize("hasRole('STUDENT')")
  98. @PostMapping("/engage")
  99. public MyResponse engageAssignment(
  100. @AuthenticationPrincipal(expression = "id") Long studentId,
  101. @RequestParam Long assignmentId
  102. ) {
  103. assignmentService.engageAssignment(studentId, assignmentId);
  104. aiDialogueService.createAIDialogue(assignmentId, studentId);
  105. return MyResponse.success("参加作业成功");
  106. }
  107. @GetMapping("/engage")
  108. public MyResponse getEngagement(
  109. @RequestParam Long studentId,
  110. @RequestParam Long assignmentId
  111. ) {
  112. return MyResponse.success(assignmentService.getEngagement(studentId, assignmentId));
  113. }
  114. @GetMapping("/engage/detail")
  115. public MyResponse getDetailEngagement(
  116. @RequestParam Long studentId,
  117. @RequestParam Long assignmentId
  118. ) {
  119. return MyResponse.success(assignmentService.getDetailEngagement(studentId, assignmentId));
  120. }
  121. @PutMapping("/engage/submit")
  122. public MyResponse engagementSubmit(
  123. @RequestParam Long studentId,
  124. @RequestParam Long assignmentId
  125. ) {
  126. assignmentService.engagementSubmit(studentId, assignmentId);
  127. return MyResponse.success("作业提交成功");
  128. }
  129. @PutMapping("/engage/stage")
  130. public MyResponse engagementStage(
  131. @RequestParam Long studentId,
  132. @RequestParam Long assignmentId
  133. ) {
  134. assignmentService.engagementStage(studentId, assignmentId);
  135. return MyResponse.success("作业暂存成功");
  136. }
  137. @PreAuthorize("hasRole('TEACHER')")
  138. @PutMapping("/engage/correct")
  139. public MyResponse engagementCorrect(
  140. @AuthenticationPrincipal(expression = "id") Long teacherId,
  141. @RequestParam Long studentId,
  142. @RequestParam Long assignmentId,
  143. @RequestBody CorrectDTO correctDTO
  144. ) {
  145. assignmentService.engagementCorrect(teacherId, studentId, assignmentId, correctDTO);
  146. return MyResponse.success("批改成功");
  147. }
  148. /**
  149. * 更新状态(需要多种情况讨论)
  150. * @param assignmentId
  151. * @param status
  152. * @return
  153. */
  154. @PutMapping("/updateStatus")
  155. public MyResponse updateStatus(
  156. @RequestParam Long assignmentId,
  157. @RequestParam AssignmentCompletionStatus status) {
  158. return MyResponse.success("");
  159. }
  160. }