package nju.seec.helper.controller; import nju.seec.helper.aspect.auth.Auth; import nju.seec.helper.controller.response.PageResponse; import nju.seec.helper.dto.*; import nju.seec.helper.service.SlideService; import nju.seec.helper.util.enums.UserType; import nju.seec.helper.vo.SlideVO; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; /** * 课件 * * @author cst */ @RestController @RequestMapping("/api/slide") public class SlideController { private final SlideService slideService; public SlideController(SlideService slideService) { this.slideService = slideService; } /** * 教师创建课件 */ @Auth(roles = UserType.TEACHER, message = "创建课件") @PostMapping public ResponseEntity createSlide(LoginUser user, @Valid SlideDTO slideDTO) { SlideVO slideVO = slideService.createSlide(user, slideDTO); return ResponseEntity.ok(slideVO); } /** * 教师修改课件 */ @Auth(roles = UserType.TEACHER, message = "修改课件") @PutMapping public SlideVO modifySlide(LoginUser user, @Validated @RequestBody ModifySlideDTO modifySlideDTO) { return slideService.modifySlide(user, modifySlideDTO); } /** * 教师修改课件状态 */ @Auth(roles = UserType.TEACHER, message = "修改课件状态") @PutMapping("/state") public void modifySlideState(LoginUser user, @Validated @RequestBody SlideStateDTO slideStateDTO) { slideService.modifySlideState(user, slideStateDTO); } /** * 教师修改课件状态 */ @Auth(roles = UserType.TEACHER, message = "修改课件状态") @PutMapping("/file") public void modifySlideFile(LoginUser user, @Validated SlideFileDTO slideFileDTO) { slideService.modifySlideFile(user, slideFileDTO); } /** * 教师删除课件 */ @Auth(roles = UserType.TEACHER, message = "删除课件") @DeleteMapping("/{slideId}") public void removeSlide(LoginUser user, @PathVariable Integer slideId) { slideService.removeSlide(user, slideId); } /** * 教师获取课件 */ @Auth(roles = UserType.TEACHER, message = "获取课件") @GetMapping("/teacher") public PageResponse teacherGetSlides(LoginUser user, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) { return PageResponse.of(slideService.teacherGetSlides(user, key, pageable)); } /** * 教师基于课程获取课件 */ @Auth(roles = UserType.TEACHER, message = "获取课件") @GetMapping("/teacher/course/{courseId}") public PageResponse teacherGetSlidesByCourse(LoginUser user, @PathVariable Integer courseId, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) { return PageResponse.of(slideService.teacherGetSlidesByCourse(user, courseId, key, pageable)); } /** * 学生基于课程获取课件 */ @Auth(roles = UserType.STUDENT, message = "获取课件") @GetMapping("/student/course/{courseId}") public PageResponse studentGetSlidesByCourse(LoginUser user, @PathVariable Integer courseId, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) { return PageResponse.of(slideService.studentGetSlidesByCourse(user, courseId, key, pageable)); } /** * 获取课件链接 */ @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取课件链接") @GetMapping("/{slideId}/url") public String getSlideUrl(LoginUser user, @PathVariable Integer slideId) { return slideService.getSlideUrl(user, slideId); } /** * 获取某课件 */ @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取课件") @GetMapping("/{slideId}") public SlideVO getOneSlide(LoginUser user, @PathVariable Integer slideId) { return slideService.getOneSlide(user, slideId); } }