package nju.seec.helper.controller; import nju.seec.helper.aspect.auth.Auth; import nju.seec.helper.aspect.auth.LoginUser; import nju.seec.helper.controller.response.PageResponse; import nju.seec.helper.dto.course.ChooseDTO; import nju.seec.helper.dto.course.CourseDTO; import nju.seec.helper.dto.groups.Create; import nju.seec.helper.dto.groups.Modify; import nju.seec.helper.enums.UserType; import nju.seec.helper.service.CourseService; import nju.seec.helper.vo.CourseVO; import nju.seec.helper.vo.UserVO; 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 cst */ @RestController @RequestMapping("/api/course") public class CourseController { private final CourseService courseService; public CourseController(CourseService courseService) { this.courseService = courseService; } /** * 教师创建课程 */ @Auth(roles = UserType.TEACHER, message = "创建课程") @PostMapping public CourseVO createCourse(LoginUser user, @Validated(Create.class) @RequestBody CourseDTO courseDTO) { return courseService.createCourse(user, courseDTO); } /** * 教师删除课程(伪删除) */ @Auth(roles = UserType.TEACHER, message = "删除课程") @DeleteMapping("/{courseId}") public void deleteCourse(LoginUser user, @PathVariable Long courseId) { courseService.deleteCourse(user, courseId); } /** * 教师修改课程 */ @Auth(roles = UserType.TEACHER, message = "修改课程") @PutMapping("/{courseId}") public CourseVO modifyCourse(LoginUser user, @PathVariable Long courseId, @Validated(Modify.class) @RequestBody CourseDTO courseDTO) { return courseService.modifyCourse(user, courseId, courseDTO); } /** * 学生选课 */ @Auth(roles = UserType.STUDENT, message = "选课") @PostMapping("/{courseId}/choose") public void chooseCourse(LoginUser user, @PathVariable Long courseId, @Validated @RequestBody ChooseDTO chooseDTO) { courseService.chooseCourse(user, courseId, chooseDTO); } /** * 学生退课 */ @Auth(roles = UserType.STUDENT, message = "退课") @PostMapping("/{courseId}/quit") public void quitCourse(LoginUser user, @PathVariable Long courseId) { courseService.quitCourse(user, courseId); } /** * 获取课程列表(无需登录) */ @GetMapping public PageResponse getCourses(@RequestParam(required = false, defaultValue = "") String key, @PageableDefault(Integer.MAX_VALUE) Pageable pageable) { return PageResponse.of(courseService.getCourses(key, pageable)); } /** * 获取创建课程列表 */ @Auth(roles = UserType.TEACHER, message = "获取创建课程列表") @GetMapping("/created") public PageResponse getCreatedCourses(LoginUser user, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(Integer.MAX_VALUE) Pageable pageable) { return PageResponse.of(courseService.getCreatedCourses(user, key, pageable)); } /** * 获取选课列表 */ @Auth(roles = UserType.STUDENT, message = "获取选课列表") @GetMapping("/chosen") public PageResponse getChosenCourses(LoginUser user, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(Integer.MAX_VALUE) Pageable pageable) { return PageResponse.of(courseService.getChosenCourses(user, key, pageable)); } /** * 获取课程选课码 */ @Auth(roles = UserType.TEACHER, message = "获取选课码") @GetMapping("/{courseId}/code") public String getCourseCode(LoginUser user, @PathVariable Long courseId) { return courseService.getCourseCode(user, courseId); } /** * 获取某课程 */ @GetMapping("/{courseId}") public CourseVO getOneCourse(@PathVariable Long courseId) { return courseService.getOneCourse(courseId); } /** * 获取选课名单 */ @Auth(roles = UserType.TEACHER, message = "获取选课名单") @GetMapping("/{courseId}/students") public PageResponse getChooseStudents(LoginUser user, @PathVariable Long courseId, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) { return PageResponse.of(courseService.getChooseStudents(user, courseId, key, pageable)); } }