Browse Source

feat: 增加学生获取幻灯片接口

ChenSiTong 6 năm trước cách đây
mục cha
commit
b36b289d93

+ 13 - 0
src/main/java/nju/seec/helper/data/dao/SlideDAO.java

@@ -1,6 +1,7 @@
 package nju.seec.helper.data.dao;
 
 import nju.seec.helper.data.entity.Slide;
+import nju.seec.helper.util.enums.SlideState;
 import nju.seec.helper.util.exception.HelperException;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -50,4 +51,16 @@ public interface SlideDAO extends JpaRepository<Slide, Integer> {
      * @return
      */
     boolean existsByName(String name);
+
+
+    /**
+     * 根据课程ID、幻灯片状态、幻灯片名是否包含关键字分页查询
+     *
+     * @param courseId
+     * @param state
+     * @param key
+     * @param pageable
+     * @return
+     */
+    Page<Slide> findByCourseIdAndStateNotAndNameContains(String courseId, SlideState state, String key, Pageable pageable);
 }

+ 19 - 4
src/main/java/nju/seec/helper/logic/service/SlideService.java

@@ -1,5 +1,6 @@
 package nju.seec.helper.logic.service;
 
+import nju.seec.helper.data.entity.Slide;
 import nju.seec.helper.logic.vo.SlideVO;
 import nju.seec.helper.util.enums.SlideState;
 import nju.seec.helper.web.dto.SlideDTO;
@@ -11,24 +12,26 @@ import java.util.List;
  * @author cst
  */
 public interface SlideService {
+    // 教师
+
     /**
-     * 根据课程ID和关键字取得幻灯片列表
+     * 教师根据课程ID和关键字取得幻灯片列表
      *
      * @param courseId
      * @param key
      * @param pageable
      * @return
      */
-    List<SlideVO> getSlides(String courseId, String key, Pageable pageable);
+    List<SlideVO> getTeacherSlides(String courseId, String key, Pageable pageable);
 
     /**
-     * 根据关键字取得幻灯片列表
+     * 教师根据关键字取得幻灯片列表
      *
      * @param key
      * @param pageable
      * @return
      */
-    List<SlideVO> getSlides(String key, Pageable pageable);
+    List<SlideVO> getTeacherSlides(String key, Pageable pageable);
 
     /**
      * 根据ID取得幻灯片
@@ -70,4 +73,16 @@ public interface SlideService {
      * @param slideId
      */
     void delete(int slideId);
+
+    // 学生
+
+    /**
+     * 学生根据课程ID和关键字取得幻灯片列表
+     *
+     * @param courseId
+     * @param key
+     * @param pageable
+     * @return
+     */
+    List<SlideVO> getStudentSlides(String courseId, String key, Pageable pageable);
 }

+ 9 - 2
src/main/java/nju/seec/helper/logic/service/impl/SlideServiceImpl.java

@@ -34,7 +34,7 @@ public class SlideServiceImpl implements SlideService {
     }
 
     @Override
-    public List<SlideVO> getSlides(String courseId, String key, Pageable pageable) {
+    public List<SlideVO> getTeacherSlides(String courseId, String key, Pageable pageable) {
         Page<Slide> slidePage = slideDAO.findByCourseIdAndNameContains(courseId, key, pageable);
 
         return slidePage.getContent().stream()
@@ -43,7 +43,7 @@ public class SlideServiceImpl implements SlideService {
     }
 
     @Override
-    public List<SlideVO> getSlides(String key, Pageable pageable) {
+    public List<SlideVO> getTeacherSlides(String key, Pageable pageable) {
         Page<Slide> slidePage = slideDAO.findByNameContains(key, pageable);
 
         return slidePage.getContent().stream()
@@ -93,6 +93,13 @@ public class SlideServiceImpl implements SlideService {
         slideDAO.deleteById(slideId);
     }
 
+    @Override
+    public List<SlideVO> getStudentSlides(String courseId, String key, Pageable pageable) {
+        Page<Slide> slidePage = slideDAO.findByCourseIdAndStateNotAndNameContains(courseId, SlideState.DRAFT, key, pageable);
+        return slidePage.getContent().stream()
+                .map(this::copySlideToSlideVO)
+                .collect(Collectors.toList());
+    }
 
     private SlideVO copySlideToSlideVO(Slide slide) {
         SlideVO slideVO = new SlideVO();

+ 23 - 14
src/main/java/nju/seec/helper/web/controller/SlideController.java

@@ -32,26 +32,26 @@ public class SlideController {
         this.slideService = slideService;
     }
 
-    @ApiOperation(value = "根据课程ID和关键字获取创建的幻灯片列表", notes = "支持定制化分页排序,例:?page=3&size=10&sort=id,asc&sort=name,desc,即以id正向排序再以name倒序排序,请求第3页,返回10条数据")
-    @GetMapping("/course/{courseId}")
-    public PageResourceResponse<SlideVO> getSlides(@PathVariable String courseId,
-                                                   @RequestParam(required = false, defaultValue = "") String key,
-                                                   @ApiParam(hidden = true) @PageableDefault(size = Integer.MAX_VALUE, sort = "updateTime", direction = Sort.Direction.DESC) Pageable pageable) {
-        List<SlideVO> slideVOs = slideService.getSlides(courseId, key, pageable);
+    @ApiOperation(value = "教师根据课程ID和关键字获取创建的幻灯片列表", notes = "支持定制化分页排序,例:?page=3&size=10&sort=id,asc&sort=name,desc,即以id正向排序再以name倒序排序,请求第3页,返回10条数据")
+    @GetMapping("/teacher/course/{courseId}")
+    public PageResourceResponse<SlideVO> getTeacherSlides(@PathVariable String courseId,
+                                                          @RequestParam(required = false, defaultValue = "") String key,
+                                                          @ApiParam(hidden = true) @PageableDefault(size = Integer.MAX_VALUE, sort = "updateTime", direction = Sort.Direction.DESC) Pageable pageable) {
+        List<SlideVO> slideVOs = slideService.getTeacherSlides(courseId, key, pageable);
         return PageResourceResponse.of(slideVOs, PageResourceResponse.PageInfo.of(pageable.getPageNumber(), slideVOs.size()));
     }
 
 
-    @ApiOperation(value = "根据关键字获取创建的幻灯片列表", notes = "支持定制化分页排序,例:?page=3&size=10&sort=id,asc&sort=name,desc,即以id正向排序再以name倒序排序,请求第3页,返回10条数据")
-    @GetMapping("")
-    public PageResourceResponse<SlideVO> getSlides(@RequestParam(required = false, defaultValue = "") String key,
-                                                   @ApiParam(hidden = true) @PageableDefault(size = Integer.MAX_VALUE, sort = "updateTime", direction = Sort.Direction.DESC) Pageable pageable) {
-        List<SlideVO> slideVOs = slideService.getSlides(key, pageable);
+    @ApiOperation(value = "教师根据关键字获取创建的幻灯片列表", notes = "支持定制化分页排序,例:?page=3&size=10&sort=id,asc&sort=name,desc,即以id正向排序再以name倒序排序,请求第3页,返回10条数据")
+    @GetMapping("/teacher")
+    public PageResourceResponse<SlideVO> getTeacherSlides(@RequestParam(required = false, defaultValue = "") String key,
+                                                          @ApiParam(hidden = true) @PageableDefault(size = Integer.MAX_VALUE, sort = "updateTime", direction = Sort.Direction.DESC) Pageable pageable) {
+        List<SlideVO> slideVOs = slideService.getTeacherSlides(key, pageable);
         return PageResourceResponse.of(slideVOs, PageResourceResponse.PageInfo.of(pageable.getPageNumber(), slideVOs.size()));
     }
 
-    @ApiOperation(value = "根据ID获取幻灯片")
-    @GetMapping("/{slideId:\\d+}")
+    @ApiOperation(value = "教师根据ID获取幻灯片")
+    @GetMapping("/teacher/{slideId:\\d+}")
     public ResourceResponse<SlideVO> getSlide(@PathVariable int slideId) {
         return ResourceResponse.of(slideService.getOneSlide(slideId));
     }
@@ -70,7 +70,7 @@ public class SlideController {
     }
 
     @ApiOperation(value = "更新幻灯片状态")
-    @PostMapping("/updateState/{slideId:\\d+}")
+    @PostMapping("/{slideId:\\d+}/updateState")
     public ResourceResponse<SlideVO> updateState(@PathVariable("slideId") int slideId, String state) {
         return ResourceResponse.of(slideService.updateState(slideId, SlideState.valueOf(state)));
     }
@@ -81,4 +81,13 @@ public class SlideController {
         slideService.delete(slideId);
         return EmptyResponse.getInstance();
     }
+
+    @ApiOperation(value = "学生根据课程ID和关键字获取可阅读的幻灯片列表", notes = "支持定制化分页排序,例:?page=3&size=10&sort=id,asc&sort=name,desc,即以id正向排序再以name倒序排序,请求第3页,返回10条数据")
+    @GetMapping("/student/course/{courseId}")
+    public PageResourceResponse<SlideVO> getStudentSlides(@PathVariable String courseId,
+                                                          @RequestParam(required = false, defaultValue = "") String key,
+                                                          @ApiParam(hidden = true) @PageableDefault(size = Integer.MAX_VALUE, sort = "updateTime", direction = Sort.Direction.DESC) Pageable pageable) {
+        List<SlideVO> slideVOs = slideService.getStudentSlides(courseId, key, pageable);
+        return PageResourceResponse.of(slideVOs, PageResourceResponse.PageInfo.of(pageable.getPageNumber(), slideVOs.size()));
+    }
 }