QuizController.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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.controller.response.PageResponse;
  5. import nju.seec.helper.dto.groups.Create;
  6. import nju.seec.helper.dto.groups.Modify;
  7. import nju.seec.helper.dto.quiz.QuizDTO;
  8. import nju.seec.helper.dto.quiz.QuizStudentAnswerDTO;
  9. import nju.seec.helper.enums.QuizState;
  10. import nju.seec.helper.enums.UserType;
  11. import nju.seec.helper.service.QuizService;
  12. import nju.seec.helper.service.QuizStudentAnswerService;
  13. import nju.seec.helper.vo.QuizStudentAnswerStatisticVO;
  14. import nju.seec.helper.vo.quiz.QuizStudentAnswerVO;
  15. import nju.seec.helper.vo.quiz.QuizVO;
  16. import org.springframework.data.domain.Pageable;
  17. import org.springframework.data.web.PageableDefault;
  18. import org.springframework.validation.annotation.Validated;
  19. import org.springframework.web.bind.annotation.*;
  20. /**
  21. * 测试
  22. *
  23. * @author xst
  24. * <p>
  25. * updated by cst
  26. * @doc http://47.100.18.120:3000/SEEC-BOK/API-DOC/src/master/helper/api/Quiz-%e6%b5%8b%e8%af%95.md
  27. */
  28. @RestController
  29. @RequestMapping("/api/quiz")
  30. public class QuizController {
  31. private final QuizService quizService;
  32. private final QuizStudentAnswerService quizStudentAnswerService;
  33. public QuizController(QuizService quizService, QuizStudentAnswerService quizStudentAnswerService) {
  34. this.quizService = quizService;
  35. this.quizStudentAnswerService = quizStudentAnswerService;
  36. }
  37. /**
  38. * 基于课件获取测试列表
  39. */
  40. @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获得测试列表")
  41. @GetMapping("/slide/{slideId}")
  42. public PageResponse<QuizVO> getQuizzesBySlide(LoginUser user,
  43. @PathVariable Long slideId,
  44. @RequestParam(required = false, defaultValue = "") String key,
  45. @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
  46. switch (user.getType()) {
  47. case TEACHER:
  48. return PageResponse.of(quizService.teacherGetQuizzesBySlide(user, slideId, key, pageable));
  49. case STUDENT:
  50. return PageResponse.of(quizService.studentGetQuizzesBySlide(user, slideId, key, pageable));
  51. default:
  52. return PageResponse.empty();
  53. }
  54. }
  55. /**
  56. * 基于状态获取测试列表
  57. */
  58. @Auth(roles = UserType.STUDENT, message = "获取测试列表")
  59. @GetMapping("/state")
  60. public PageResponse<QuizVO> getQuizzesByState(LoginUser user,
  61. QuizState state,
  62. @RequestParam(required = false, defaultValue = "") String key,
  63. @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
  64. switch (user.getType()) {
  65. case STUDENT:
  66. return PageResponse.of(quizService.studentGetQuizzesByState(user, state, key, pageable));
  67. default:
  68. return PageResponse.empty();
  69. }
  70. }
  71. /**
  72. * 获得某一测试的详细内容
  73. */
  74. @Auth(roles = {UserType.STUDENT, UserType.TEACHER}, message = "获得测试")
  75. @GetMapping("/{quizId}")
  76. public QuizVO getOneQuiz(LoginUser user, @PathVariable("quizId") Long quizId) {
  77. return quizService.getOneQuiz(user, quizId);
  78. }
  79. /**
  80. * 创建测试
  81. */
  82. @Auth(roles = {UserType.TEACHER}, message = "创建测试")
  83. @PostMapping
  84. public QuizVO createQuiz(LoginUser user, @Validated(Create.class) @RequestBody QuizDTO quizDTO) {
  85. return quizService.createQuiz(user, quizDTO);
  86. }
  87. /**
  88. * 修改测试 (仅限未开始时可以修改)
  89. */
  90. @Auth(roles = {UserType.TEACHER}, message = "修改测试")
  91. @PutMapping("/{quizId}")
  92. public QuizVO updateQuiz(LoginUser user, @PathVariable Long quizId, @Validated(Modify.class) @RequestBody QuizDTO quizDTO) {
  93. return quizService.modifyQuiz(user, quizId, quizDTO);
  94. }
  95. /**
  96. * 删除测试 (伪删除)
  97. */
  98. @Auth(roles = {UserType.TEACHER}, message = "删除测试")
  99. @DeleteMapping("/{quizId}")
  100. public void deleteQuiz(LoginUser user, @PathVariable("quizId") String quizId) {
  101. quizService.deleteQuiz(user, Long.valueOf(quizId));
  102. }
  103. @Auth(roles = {UserType.STUDENT}, message = "提交作答")
  104. @PostMapping("/{quizId}/student-answer")
  105. public QuizStudentAnswerVO submitQuizStudentAnswer(LoginUser user, @PathVariable Long quizId, @RequestBody QuizStudentAnswerDTO quizStudentAnswerDTO) {
  106. return quizStudentAnswerService.submitQuizStudentAnswer(user, quizId, quizStudentAnswerDTO);
  107. }
  108. /**
  109. * 老师获取某一测试学生的作答列表
  110. *
  111. * @param user
  112. * @param quizId
  113. * @return
  114. */
  115. @Auth(roles = {UserType.TEACHER}, message = "获取学生作答")
  116. @GetMapping("/{quizId}/student-answers")
  117. public PageResponse<QuizStudentAnswerVO> getQuizStudentAnswers(LoginUser user, @PathVariable Long quizId, @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
  118. return PageResponse.of(quizStudentAnswerService.getQuizStudentAnswers(user, quizId, pageable));
  119. }
  120. /**
  121. * 学生获取某一测试自己的作答
  122. *
  123. * @param user
  124. * @param quizId
  125. * @return
  126. */
  127. @Auth(roles = {UserType.STUDENT}, message = "获取作答")
  128. @GetMapping("/{quizId}/student-answer")
  129. public QuizStudentAnswerVO getOneQuizStudentAnswer(LoginUser user, @PathVariable Long quizId) {
  130. return quizStudentAnswerService.getQuizStudentAnswer(user, quizId);
  131. }
  132. @Auth(roles = {UserType.TEACHER}, message = "获取测试统计消息")
  133. @GetMapping("/{quizId}/statistic")
  134. public QuizStudentAnswerStatisticVO getQuizStatistic(LoginUser user, @PathVariable Long quizId) {
  135. return quizStudentAnswerService.getQuizStudentAnswerStatistic(user, quizId);
  136. }
  137. }