Explorar el Código

feat: 增加根据id获取课程、幻灯片、评论

ChenSiTong hace 6 años
padre
commit
598477c801

+ 10 - 0
src/main/java/nju/seec/helper/controller/CommentController.java

@@ -73,10 +73,20 @@ public class CommentController {
     /**
     /**
      * 取得某一页的评论信息
      * 取得某一页的评论信息
      */
      */
+    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取评论")
     @GetMapping("/slide/{slideId}")
     @GetMapping("/slide/{slideId}")
     public PageResponse<CommentVO> getComments(@PathVariable Integer slideId,
     public PageResponse<CommentVO> getComments(@PathVariable Integer slideId,
                                                @RequestParam(required = false, defaultValue = "1") Integer pageNumber,
                                                @RequestParam(required = false, defaultValue = "1") Integer pageNumber,
                                                @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
                                                @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
         return PageResponse.of(commentService.getCommentsBySlideIdAndPageNumber(slideId, pageNumber, pageable));
         return PageResponse.of(commentService.getCommentsBySlideIdAndPageNumber(slideId, pageNumber, pageable));
     }
     }
+
+    /**
+     * 取得某评论
+     */
+    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取评论")
+    @GetMapping("/{commentId}")
+    public CommentVO getOneComment(@PathVariable Integer commentId) {
+        return commentService.getOneComment(commentId);
+    }
 }
 }

+ 9 - 0
src/main/java/nju/seec/helper/controller/CourseController.java

@@ -119,4 +119,13 @@ public class CourseController {
                                 @PathVariable Integer courseId) {
                                 @PathVariable Integer courseId) {
         return courseService.getCourseCode(user, courseId);
         return courseService.getCourseCode(user, courseId);
     }
     }
+
+    /**
+     * 获取某课程
+     */
+    @Auth(roles = {UserType.STUDENT, UserType.TEACHER}, message = "获取课程")
+    @GetMapping("/{courseId}")
+    public CourseVO getOneCourse(@PathVariable Integer courseId) {
+        return courseService.getOneCourse(courseId);
+    }
 }
 }

+ 12 - 3
src/main/java/nju/seec/helper/controller/SlideController.java

@@ -74,7 +74,7 @@ public class SlideController {
     /**
     /**
      * 教师获取幻灯片
      * 教师获取幻灯片
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "获取幻灯片列表")
+    @Auth(roles = UserType.TEACHER, message = "获取幻灯片")
     @GetMapping("/teacher")
     @GetMapping("/teacher")
     public PageResponse<SlideVO> teacherGetSlides(LoginUser user,
     public PageResponse<SlideVO> teacherGetSlides(LoginUser user,
                                                   @RequestParam(required = false, defaultValue = "") String key,
                                                   @RequestParam(required = false, defaultValue = "") String key,
@@ -85,7 +85,7 @@ public class SlideController {
     /**
     /**
      * 教师基于课程获取幻灯片
      * 教师基于课程获取幻灯片
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "获取幻灯片列表")
+    @Auth(roles = UserType.TEACHER, message = "获取幻灯片")
     @GetMapping("/teacher/course/{courseId}")
     @GetMapping("/teacher/course/{courseId}")
     public PageResponse<SlideVO> teacherGetSlidesByCourse(LoginUser user,
     public PageResponse<SlideVO> teacherGetSlidesByCourse(LoginUser user,
                                                           @PathVariable Integer courseId,
                                                           @PathVariable Integer courseId,
@@ -97,7 +97,7 @@ public class SlideController {
     /**
     /**
      * 学生基于课程获取幻灯片
      * 学生基于课程获取幻灯片
      */
      */
-    @Auth(roles = UserType.STUDENT, message = "获取幻灯片列表")
+    @Auth(roles = UserType.STUDENT, message = "获取幻灯片")
     @GetMapping("/student/course/{courseId}")
     @GetMapping("/student/course/{courseId}")
     public PageResponse<SlideVO> studentGetSlidesByCourse(LoginUser user,
     public PageResponse<SlideVO> studentGetSlidesByCourse(LoginUser user,
                                                           @PathVariable Integer courseId,
                                                           @PathVariable Integer courseId,
@@ -115,4 +115,13 @@ public class SlideController {
                               @PathVariable Integer slideId) {
                               @PathVariable Integer slideId) {
         return slideService.getSlideUrl(user, 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);
+    }
 }
 }

+ 2 - 1
src/main/java/nju/seec/helper/entity/Choose.java

@@ -11,7 +11,8 @@ import javax.persistence.*;
 @Data
 @Data
 @Accessors(chain = true)
 @Accessors(chain = true)
 @Entity
 @Entity
-@Table(name = "choose")
+@Table(name = "choose",
+        uniqueConstraints = @UniqueConstraint(columnNames = {"course_id", "student_id"}))
 public class Choose {
 public class Choose {
     @Id
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @GeneratedValue(strategy = GenerationType.IDENTITY)

+ 8 - 0
src/main/java/nju/seec/helper/service/CommentService.java

@@ -52,4 +52,12 @@ public interface CommentService {
      * @return
      * @return
      */
      */
     Page<CommentVO> getCommentsBySlideIdAndPageNumber(Integer slideId, Integer pageNumber, Pageable pageable);
     Page<CommentVO> getCommentsBySlideIdAndPageNumber(Integer slideId, Integer pageNumber, Pageable pageable);
+
+    /**
+     * 获得某条评论
+     *
+     * @param commentId
+     * @return
+     */
+    CommentVO getOneComment(Integer commentId);
 }
 }

+ 8 - 0
src/main/java/nju/seec/helper/service/CourseService.java

@@ -91,4 +91,12 @@ public interface CourseService {
      * @return
      * @return
      */
      */
     String getCourseCode(LoginUser user, Integer courseId);
     String getCourseCode(LoginUser user, Integer courseId);
+
+    /**
+     * 取得某课程
+     *
+     * @param courseId
+     * @return
+     */
+    CourseVO getOneCourse(Integer courseId);
 }
 }

+ 9 - 0
src/main/java/nju/seec/helper/service/SlideService.java

@@ -86,4 +86,13 @@ public interface SlideService {
      * @return
      * @return
      */
      */
     String getSlideUrl(LoginUser user, Integer slideId);
     String getSlideUrl(LoginUser user, Integer slideId);
+
+    /**
+     * 获取某幻灯片
+     *
+     * @param user
+     * @param slideId
+     * @return
+     */
+    SlideVO getOneSlide(LoginUser user, Integer slideId);
 }
 }

+ 6 - 0
src/main/java/nju/seec/helper/service/impl/CommentServiceImpl.java

@@ -88,4 +88,10 @@ public class CommentServiceImpl implements CommentService {
     public Page<CommentVO> getCommentsBySlideIdAndPageNumber(Integer slideId, Integer pageNumber, Pageable pageable) {
     public Page<CommentVO> getCommentsBySlideIdAndPageNumber(Integer slideId, Integer pageNumber, Pageable pageable) {
         return commentDAO.findComments(slideId, pageNumber, pageable).map(CommentVO::new);
         return commentDAO.findComments(slideId, pageNumber, pageable).map(CommentVO::new);
     }
     }
+
+    @Transactional(readOnly = true)
+    @Override
+    public CommentVO getOneComment(Integer commentId) {
+        return new CommentVO(commentDAO.findCommentById(commentId));
+    }
 }
 }

+ 7 - 0
src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java

@@ -130,6 +130,7 @@ public class CourseServiceImpl implements CourseService {
                 .map(CourseVO::new);
                 .map(CourseVO::new);
     }
     }
 
 
+    @Transactional(readOnly = true)
     @Override
     @Override
     public String getCourseCode(LoginUser user, Integer courseId) {
     public String getCourseCode(LoginUser user, Integer courseId) {
         Course course = courseDAO.findCourseById(courseId);
         Course course = courseDAO.findCourseById(courseId);
@@ -138,6 +139,12 @@ public class CourseServiceImpl implements CourseService {
         return EncryptUtils.decode(course.getCode());
         return EncryptUtils.decode(course.getCode());
     }
     }
 
 
+    @Transactional(readOnly = true)
+    @Override
+    public CourseVO getOneCourse(Integer courseId) {
+        return new CourseVO(courseDAO.findCourseById(courseId));
+    }
+
     /**
     /**
      * 检查同名课程
      * 检查同名课程
      */
      */

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

@@ -114,6 +114,7 @@ public class SlideServiceImpl implements SlideService {
         slideDAO.save(slide);
         slideDAO.save(slide);
     }
     }
 
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
     public void removeSlide(LoginUser user, Integer slideId) {
     public void removeSlide(LoginUser user, Integer slideId) {
         Slide slide = slideDAO.findSlideById(slideId);
         Slide slide = slideDAO.findSlideById(slideId);
@@ -148,7 +149,6 @@ public class SlideServiceImpl implements SlideService {
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
     @Override
     @Override
     public String getSlideUrl(LoginUser user, Integer slideId) {
     public String getSlideUrl(LoginUser user, Integer slideId) {
-
         Slide slide = slideDAO.findSlideById(slideId);
         Slide slide = slideDAO.findSlideById(slideId);
         checkDataAccessAuth(user, slide);
         checkDataAccessAuth(user, slide);
 
 
@@ -161,6 +161,14 @@ public class SlideServiceImpl implements SlideService {
         return url;
         return url;
     }
     }
 
 
+    @Transactional(readOnly = true)
+    @Override
+    public SlideVO getOneSlide(LoginUser user, Integer slideId) {
+        Slide slide = slideDAO.findSlideById(slideId);
+        checkDataAccessAuth(user, slide);
+        return new SlideVO(slide);
+    }
+
     private void checkDataAccessAuth(LoginUser user, Slide slide) {
     private void checkDataAccessAuth(LoginUser user, Slide slide) {
         HelperException forbiddenEx = HelperException.of(ExceptionType.FORBIDDEN, "您无权访问该幻灯片");
         HelperException forbiddenEx = HelperException.of(ExceptionType.FORBIDDEN, "您无权访问该幻灯片");
 
 
@@ -171,7 +179,8 @@ public class SlideServiceImpl implements SlideService {
                 }
                 }
                 break;
                 break;
             case STUDENT:
             case STUDENT:
-                if (!chooseDAO.existsByStudentIdAndCourseId(user.getId(), slide.getCourseId())) {
+                if (!chooseDAO.existsByStudentIdAndCourseId(user.getId(), slide.getCourseId())
+                        || slide.getState() == SlideState.DRAFT) {
                     throw forbiddenEx;
                     throw forbiddenEx;
                 }
                 }
                 break;
                 break;