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.groups.Create; import nju.seec.helper.dto.groups.Modify; import nju.seec.helper.dto.slide.SlideDTO; import nju.seec.helper.dto.slide.SlideFileDTO; import nju.seec.helper.dto.slide.SlideStateDTO; import nju.seec.helper.enums.UserRole; import nju.seec.helper.service.SlideService; 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.*; /** * 课件 * * @author cst */ @RestController @RequestMapping("/api/slide") public class SlideController { private final SlideService slideService; public SlideController(SlideService slideService) { this.slideService = slideService; } /** * 教师创建课件 */ @Auth(roles = UserRole.TEACHER, message = "创建课件") @PostMapping public ResponseEntity createSlide(LoginUser user, @Validated(Create.class) SlideDTO slideDTO) { SlideVO slideVO = slideService.createSlide(user, slideDTO); return ResponseEntity.ok(slideVO); } /** * 教师修改课件 */ @Auth(roles = UserRole.TEACHER, message = "修改课件") @PutMapping("/{slideId}") public SlideVO modifySlide(LoginUser user, @PathVariable Long slideId, @Validated(Modify.class) @RequestBody SlideDTO slideDTO) { return slideService.modifySlide(user, slideId, slideDTO); } /** * 教师修改课件状态 */ @Auth(roles = UserRole.TEACHER, message = "修改课件状态") @PutMapping("/{slideId}/state") public void modifySlideState(LoginUser user, @PathVariable Long slideId, @Validated @RequestBody SlideStateDTO slideStateDTO) { slideService.modifySlideState(user, slideId, slideStateDTO); } /** * 教师修改课件文件 */ @Auth(roles = UserRole.TEACHER, message = "修改课件文件") @PutMapping("/{slideId}/file") public void modifySlideFile(LoginUser user, @PathVariable Long slideId, @Validated SlideFileDTO slideFileDTO) { slideService.modifySlideFile(user, slideId, slideFileDTO); } /** * 教师删除课件 */ @Auth(roles = UserRole.TEACHER, message = "删除课件") @DeleteMapping("/{slideId}") public void deleteSlide(LoginUser user, @PathVariable Long slideId) { slideService.deleteSlide(user, slideId); } /** * 教师获取课件 */ @Auth(roles = UserRole.TEACHER, message = "获取课件列表") @GetMapping public PageResponse getSlides(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 = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取课件列表") @GetMapping("/course/{courseId}") public PageResponse getSlidesByCourse(LoginUser user, @PathVariable Long courseId, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) { return PageResponse.of(slideService.getSlidesByCourse(user, courseId, key, pageable)); } /** * 获取课件链接 */ @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取课件链接") @GetMapping("/{slideId}/url") public String getSlideUrl(LoginUser user, @PathVariable Long slideId) { return slideService.getSlideUrl(user, slideId); } /** * 获取某课件 */ @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取课件") @GetMapping("/{slideId}") public SlideVO getOneSlide(LoginUser user, @PathVariable Long slideId) { return slideService.getOneSlide(user, slideId); } }