package nju.seec.helper.controller; import nju.seec.helper.aspect.auth.Auth; import nju.seec.helper.controller.response.PageResourceResponse; import nju.seec.helper.controller.response.ResourceResponse; import nju.seec.helper.dto.LoginUser; import nju.seec.helper.dto.SlideDTO; import nju.seec.helper.dto.modify.ModifySlideDTO; 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.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; /** * 幻灯片 * * @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 ResourceResponse createSlide(LoginUser user, @Valid SlideDTO slideDTO) { SlideVO slideVO = slideService.createSlide(user, slideDTO); return ResourceResponse.of(slideVO); } /** * 教师修改幻灯片 */ @Auth(roles = UserType.TEACHER, message = "修改幻灯片") @PutMapping public ResourceResponse modifySlide(LoginUser user, @Valid @RequestBody ModifySlideDTO modifySlideDTO) { SlideVO slideVO = slideService.modifySlide(user, modifySlideDTO); return ResourceResponse.of(slideVO); } /** * 教师获取幻灯片 */ @Auth(roles = UserType.TEACHER, message = "获取幻灯片列表") @GetMapping("/teacher") public PageResourceResponse teacherGetSlides(LoginUser user, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) { List slideVOList = slideService.teacherGetSlides(user, key, pageable); return PageResourceResponse.of(slideVOList, pageable.getPageNumber(), pageable.getPageSize()); } /** * 教师基于课程获取幻灯片 */ @Auth(roles = UserType.TEACHER, message = "获取幻灯片列表") @GetMapping("/teacher/course/{courseId}") public PageResourceResponse teacherGetSlidesByCourse(LoginUser user, @PathVariable Integer courseId, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) { List slideVOList = slideService.teacherGetSlidesByCourse(user, courseId, key, pageable); return PageResourceResponse.of(slideVOList, pageable.getPageNumber(), pageable.getPageSize()); } /** * 学生基于课程获取幻灯片 */ @Auth(roles = UserType.STUDENT, message = "获取幻灯片列表") @GetMapping("/student/course/{courseId}") public PageResourceResponse studentGetSlidesByCourse(LoginUser user, @PathVariable Integer courseId, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) { List slideVOList = slideService.studentGetSlidesByCourse(user, courseId, key, pageable); return PageResourceResponse.of(slideVOList, pageable.getPageNumber(), pageable.getPageSize()); } /** * 获取幻灯片链接 */ @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取幻灯片链接") @GetMapping("/{slideId}/url") public ResourceResponse getSlideUrl(LoginUser user, @PathVariable Integer slideId) { String slideUrl = slideService.getSlideUrl(user, slideId); return ResourceResponse.of(slideUrl); } }