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.service.CourseService; import nju.seec.helper.util.enums.UserType; import nju.seec.helper.util.exception.HelperException; 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 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, @RequestBody CourseDTO courseDTO) { CourseVO courseVO = courseService.createCourse(user, courseDTO); return ResourceResponse.of(courseVO); } @Auth(roles = UserType.STUDENT, message = "选课") @PostMapping("/choose") public EmptyResponse chooseCourse(LoginUser user, @RequestBody ChooseDTO chooseDTO) { courseService.chooseCourse(user, chooseDTO); return EmptyResponse.getInstance(); } @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "查看课程") @GetMapping public PageResourceResponse teacherGetCourses(LoginUser user, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(Integer.MAX_VALUE) Pageable pageable) { List courseVOList; switch (user.getType()) { case TEACHER: courseVOList = courseService.teacherGetCourses(user, key, pageable); break; case STUDENT: courseVOList = courseService.studentGetCourses(user, key, pageable); break; default: throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "您暂时无法查看课程"); } return PageResourceResponse.of(courseVOList, pageable.getPageNumber(), pageable.getPageSize()); } @Auth(roles = UserType.STUDENT, message = "获取所选课程") @GetMapping("/choose") public PageResourceResponse studentGetChooseCourses(LoginUser user, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(Integer.MAX_VALUE) Pageable pageable) { List courseVOList = courseService.studentGetChooseCourses(user, key, pageable); return PageResourceResponse.of(courseVOList, pageable.getPageNumber(), pageable.getPageSize()); } }