CourseController.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package nju.seec.helper.controller;
  2. import nju.seec.helper.aspect.auth.Auth;
  3. import nju.seec.helper.aspect.auth.LoginUser;
  4. import nju.seec.helper.aspect.event.Event;
  5. import nju.seec.helper.controller.response.PageResponse;
  6. import nju.seec.helper.dto.course.ChooseDTO;
  7. import nju.seec.helper.dto.course.CourseDTO;
  8. import nju.seec.helper.dto.course.CourseKnowledgeDTO;
  9. import nju.seec.helper.dto.groups.Create;
  10. import nju.seec.helper.dto.groups.Modify;
  11. import nju.seec.helper.enums.UserRole;
  12. import nju.seec.helper.service.CourseService;
  13. import nju.seec.helper.sys.dataanalysis.constant.EventAction;
  14. import nju.seec.helper.sys.dataanalysis.constant.EventType;
  15. import nju.seec.helper.vo.CourseVO;
  16. import nju.seec.helper.vo.UserVO;
  17. import org.springframework.data.domain.Pageable;
  18. import org.springframework.data.web.PageableDefault;
  19. import org.springframework.validation.annotation.Validated;
  20. import org.springframework.web.bind.annotation.*;
  21. /**
  22. * 课程
  23. *
  24. * @author cst
  25. */
  26. @RestController
  27. @RequestMapping("/api/course")
  28. public class CourseController {
  29. private final CourseService courseService;
  30. public CourseController(CourseService courseService) {
  31. this.courseService = courseService;
  32. }
  33. /**
  34. * 教师创建课程
  35. */
  36. @Auth(roles = UserRole.TEACHER, message = "创建课程")
  37. @PostMapping
  38. public CourseVO createCourse(LoginUser user,
  39. @Validated(Create.class) @RequestBody CourseDTO courseDTO) {
  40. return courseService.createCourse(user, courseDTO);
  41. }
  42. /**
  43. * 教师删除课程(伪删除)
  44. */
  45. @Auth(roles = UserRole.TEACHER, message = "删除课程")
  46. @DeleteMapping("/{courseId}")
  47. public void deleteCourse(LoginUser user,
  48. @PathVariable Long courseId) {
  49. courseService.deleteCourse(user, courseId);
  50. }
  51. /**
  52. * 教师修改课程
  53. */
  54. @Auth(roles = UserRole.TEACHER, message = "修改课程")
  55. @PutMapping("/{courseId}")
  56. public CourseVO modifyCourse(LoginUser user,
  57. @PathVariable Long courseId,
  58. @Validated(Modify.class) @RequestBody CourseDTO courseDTO) {
  59. return courseService.modifyCourse(user, courseId, courseDTO);
  60. }
  61. /**
  62. * 教师修改课程知识点
  63. */
  64. @Auth(roles = UserRole.TEACHER, message = "修改课程知识点")
  65. @PutMapping("/{courseId}/knowledge")
  66. public void modifyCourseKnowledgeId(LoginUser user, @PathVariable Long courseId, @Validated @RequestBody CourseKnowledgeDTO courseKnowledgeDTO) {
  67. courseService.modifyCourseKnowledgeId(user, courseId, courseKnowledgeDTO);
  68. }
  69. /**
  70. * 学生选课
  71. */
  72. @Event(type = EventType.LESSON, action = EventAction.PARTICIPATE)
  73. @Auth(roles = UserRole.STUDENT, message = "选课")
  74. @PostMapping("/{courseId}/choose")
  75. public void chooseCourse(LoginUser user,
  76. @PathVariable Long courseId,
  77. @Validated @RequestBody ChooseDTO chooseDTO) {
  78. courseService.chooseCourse(user, courseId, chooseDTO);
  79. }
  80. /**
  81. * 学生退课
  82. */
  83. @Auth(roles = UserRole.STUDENT, message = "退课")
  84. @PostMapping("/{courseId}/quit")
  85. public void quitCourse(LoginUser user,
  86. @PathVariable Long courseId) {
  87. courseService.quitCourse(user, courseId);
  88. }
  89. /**
  90. * 获取课程列表(无需登录)
  91. */
  92. @GetMapping
  93. public PageResponse<CourseVO> getCourses(@RequestParam(required = false, defaultValue = "") String key,
  94. @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
  95. return PageResponse.of(courseService.getCourses(key, pageable));
  96. }
  97. /**
  98. * 获取创建课程列表
  99. */
  100. @Auth(roles = UserRole.TEACHER, message = "获取创建课程列表")
  101. @GetMapping("/created")
  102. public PageResponse<CourseVO> getCreatedCourses(LoginUser user,
  103. @RequestParam(required = false, defaultValue = "") String key,
  104. @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
  105. return PageResponse.of(courseService.getCreatedCourses(user, key, pageable));
  106. }
  107. /**
  108. * 获取选课列表
  109. */
  110. @Auth(roles = UserRole.STUDENT, message = "获取选课列表")
  111. @GetMapping("/chosen")
  112. public PageResponse<CourseVO> getChosenCourses(LoginUser user,
  113. @RequestParam(required = false, defaultValue = "") String key,
  114. @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
  115. return PageResponse.of(courseService.getChosenCourses(user, key, pageable));
  116. }
  117. /**
  118. * 获取课程选课码
  119. */
  120. @Auth(roles = UserRole.TEACHER, message = "获取选课码")
  121. @GetMapping("/{courseId}/code")
  122. public String getCourseCode(LoginUser user,
  123. @PathVariable Long courseId) {
  124. return courseService.getCourseCode(user, courseId);
  125. }
  126. /**
  127. * 获取某课程
  128. */
  129. @GetMapping("/{courseId}")
  130. public CourseVO getOneCourse(@PathVariable Long courseId) {
  131. return courseService.getOneCourse(courseId);
  132. }
  133. /**
  134. * 获取选课名单
  135. */
  136. @Auth(roles = UserRole.TEACHER, message = "获取选课名单")
  137. @GetMapping("/{courseId}/students")
  138. public PageResponse<UserVO> getChooseStudents(LoginUser user,
  139. @PathVariable Long courseId,
  140. @RequestParam(required = false, defaultValue = "") String key,
  141. @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
  142. return PageResponse.of(courseService.getChooseStudents(user, courseId, key, pageable));
  143. }
  144. }