| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- package nju.seec.helper.controller;
- import nju.seec.helper.sys.dataanalysis.constant.EventAction;
- import nju.seec.helper.sys.dataanalysis.constant.EventType;
- import nju.seec.helper.aspect.auth.Auth;
- import nju.seec.helper.aspect.auth.LoginUser;
- import nju.seec.helper.aspect.event.Event;
- import nju.seec.helper.aspect.record.ExerciseRecord;
- import nju.seec.helper.controller.response.PageResponse;
- import nju.seec.helper.dto.groups.Create;
- import nju.seec.helper.dto.groups.Modify;
- import nju.seec.helper.dto.quiz.QuizDTO;
- import nju.seec.helper.dto.question.StudentAnswerDTO;
- import nju.seec.helper.enums.QuizState;
- import nju.seec.helper.enums.UserRole;
- import nju.seec.helper.service.QuizService;
- import nju.seec.helper.service.QuizStudentAnswerService;
- import nju.seec.helper.vo.quiz.QuizStudentAnswerStatisticVO;
- import nju.seec.helper.vo.quiz.QuizStudentAnswerVO;
- import nju.seec.helper.vo.quiz.QuizVO;
- import org.springframework.data.domain.Pageable;
- import org.springframework.data.web.PageableDefault;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.*;
- /**
- * 测试
- *
- * @author xst
- * <p>
- * updated by cst
- */
- @RestController
- @RequestMapping("/api/quiz")
- public class QuizController {
- private final QuizService quizService;
- private final QuizStudentAnswerService quizStudentAnswerService;
- public QuizController(QuizService quizService, QuizStudentAnswerService quizStudentAnswerService) {
- this.quizService = quizService;
- this.quizStudentAnswerService = quizStudentAnswerService;
- }
- /**
- * 基于课件获取测试列表
- */
- @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获得测试列表")
- @GetMapping("/slide/{slideId}")
- public PageResponse<QuizVO> getQuizzesBySlide(LoginUser user,
- @PathVariable Long slideId,
- @RequestParam(required = false, defaultValue = "") String key,
- @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
- switch (user.getRole()) {
- case TEACHER:
- return PageResponse.of(quizService.teacherGetQuizzesBySlide(user, slideId, key, pageable));
- case STUDENT:
- return PageResponse.of(quizService.studentGetQuizzesBySlide(user, slideId, key, pageable));
- default:
- return PageResponse.empty();
- }
- }
- /**
- * 基于状态获取测试列表
- */
- @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取测试列表")
- @GetMapping("/state")
- public PageResponse<QuizVO> getQuizzesByState(LoginUser user,
- QuizState state,
- @RequestParam(required = false, defaultValue = "") String key,
- @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
- switch (user.getRole()) {
- case TEACHER:
- return PageResponse.of(quizService.teacherGetQuizzesByState(user, state, key, pageable));
- case STUDENT:
- return PageResponse.of(quizService.studentGetQuizzesByState(user, state, key, pageable));
- default:
- return PageResponse.empty();
- }
- }
- /**
- * 获得某一测试的详细内容
- */
- @Auth(roles = {UserRole.STUDENT, UserRole.TEACHER}, message = "获得测试")
- @GetMapping("/{quizId}")
- public QuizVO getOneQuiz(LoginUser user, @PathVariable("quizId") Long quizId) {
- return quizService.getOneQuiz(user, quizId);
- }
- /**
- * 创建测试
- */
- @Auth(roles = {UserRole.TEACHER}, message = "创建测试")
- @PostMapping
- public QuizVO createQuiz(LoginUser user, @Validated(Create.class) @RequestBody QuizDTO quizDTO) {
- return quizService.createQuiz(user, quizDTO);
- }
- /**
- * 修改测试 (仅限无人提交时可以修改)
- */
- @Auth(roles = {UserRole.TEACHER}, message = "修改测试")
- @PutMapping("/{quizId}")
- public QuizVO updateQuiz(LoginUser user, @PathVariable Long quizId, @Validated(Modify.class) @RequestBody QuizDTO quizDTO) {
- return quizService.modifyQuiz(user, quizId, quizDTO);
- }
- /**
- * 删除测试 (伪删除)
- */
- @Auth(roles = {UserRole.TEACHER}, message = "删除测试")
- @DeleteMapping("/{quizId}")
- public void deleteQuiz(LoginUser user, @PathVariable("quizId") String quizId) {
- quizService.deleteQuiz(user, Long.valueOf(quizId));
- }
- /**
- * 提交作答
- */
- @ExerciseRecord
- @Event(type = EventType.QUIZ, action = EventAction.COMPLETE)
- @Auth(roles = {UserRole.STUDENT}, message = "提交作答")
- @PostMapping("/{quizId}/student-answer")
- public QuizStudentAnswerVO submitQuizStudentAnswer(LoginUser user, @PathVariable Long quizId, @Validated @RequestBody StudentAnswerDTO studentAnswerDTO) {
- return quizStudentAnswerService.submitQuizStudentAnswer(user, quizId, studentAnswerDTO);
- }
- /**
- * 获取测试作答列表
- */
- @Auth(roles = {UserRole.TEACHER}, message = "获取学生作答")
- @GetMapping("/{quizId}/student-answers")
- public PageResponse<QuizStudentAnswerVO> getQuizStudentAnswers(LoginUser user,
- @PathVariable Long quizId,
- @RequestParam(required = false, defaultValue = "") String key,
- @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
- return PageResponse.of(quizStudentAnswerService.getQuizStudentAnswers(user, quizId, key, pageable));
- }
- /**
- * 学生获取某一测试自己的作答
- */
- @Auth(roles = {UserRole.STUDENT}, message = "获取作答")
- @GetMapping("/{quizId}/student-answer")
- public QuizStudentAnswerVO getOneQuizStudentAnswer(LoginUser user, @PathVariable Long quizId) {
- return quizStudentAnswerService.getQuizStudentAnswer(user, quizId);
- }
- /**
- * 获取测试作答提交的统计信息
- */
- @Auth(roles = {UserRole.TEACHER}, message = "获取测试统计消息")
- @GetMapping("/{quizId}/statistic")
- public QuizStudentAnswerStatisticVO getQuizStatistic(LoginUser user, @PathVariable Long quizId) {
- return quizStudentAnswerService.getQuizStudentAnswerStatistic(user, quizId);
- }
- }
|