AssignmentController.java 5.5 KB

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