package nju.seec.helper.controller; import nju.seec.helper.aspect.auth.Auth; import nju.seec.helper.controller.response.EmptyResponse; import nju.seec.helper.controller.response.PageResourceResponse; import nju.seec.helper.controller.response.ResourceResponse; import nju.seec.helper.dto.ChooseDTO; import nju.seec.helper.dto.CourseDTO; import nju.seec.helper.dto.LoginUser; import nju.seec.helper.dto.modify.ModifyCourseDTO; import nju.seec.helper.service.CourseService; import nju.seec.helper.util.enums.UserType; import nju.seec.helper.vo.CourseVO; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; /** * 课程 * * @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 ResourceResponse createCourse(LoginUser user, @Valid @RequestBody CourseDTO courseDTO) { CourseVO courseVO = courseService.createCourse(user, courseDTO); return ResourceResponse.of(courseVO); } /** * 教师删除课程(伪删除) */ @Auth(roles = UserType.TEACHER, message = "删除课程") @DeleteMapping("/{courseId}") public EmptyResponse removeCourse(LoginUser user, @PathVariable Integer courseId) { courseService.removeCourse(user, courseId); return EmptyResponse.getInstance(); } /** * 教师修改课程 */ @Auth(roles = UserType.TEACHER, message = "修改课程") @PutMapping public ResourceResponse modifyCourse(LoginUser user, @Valid @RequestBody ModifyCourseDTO modifyCourseDTO) { CourseVO courseVO = courseService.modifyCourse(user, modifyCourseDTO); return ResourceResponse.of(courseVO); } /** * 学生选课 */ @Auth(roles = UserType.STUDENT, message = "选课") @PostMapping("/choose") public EmptyResponse chooseCourse(LoginUser user, @Valid @RequestBody ChooseDTO chooseDTO) { courseService.chooseCourse(user, chooseDTO); return EmptyResponse.getInstance(); } /** * 获取课程信息(无需登录) */ @GetMapping public PageResourceResponse getCourses(@RequestParam(required = false, defaultValue = "") String key, @PageableDefault(Integer.MAX_VALUE) Pageable pageable) { List courseVOList = courseService.getCourses(key, pageable); return PageResourceResponse.of(courseVOList, pageable.getPageNumber(), pageable.getPageSize()); } /** * 教师获取所创课程 */ @Auth(roles = UserType.TEACHER, message = "获取所创课程") @GetMapping("/teacher") public PageResourceResponse teacherGetCourses(LoginUser user, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(Integer.MAX_VALUE) Pageable pageable) { List courseVOList = courseService.teacherGetCourses(user, key, pageable); return PageResourceResponse.of(courseVOList, pageable.getPageNumber(), pageable.getPageSize()); } /** * 学生获取所选课程 */ @Auth(roles = UserType.STUDENT, message = "获取所选课程") @GetMapping("/student") public PageResourceResponse studentGetCourses(LoginUser user, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(Integer.MAX_VALUE) Pageable pageable) { List courseVOList = courseService.studentGetCourses(user, key, pageable); return PageResourceResponse.of(courseVOList, pageable.getPageNumber(), pageable.getPageSize()); } }