Sfoglia il codice sorgente

refactor: 取消异常封装,改用ResponseEntity

ChenSiTong 6 anni fa
parent
commit
28429d4a61
31 ha cambiato i file con 210 aggiunte e 332 eliminazioni
  1. 3 2
      src/main/java/nju/seec/helper/aspect/auth/AuthAspect.java
  2. 5 7
      src/main/java/nju/seec/helper/controller/CodeController.java
  3. 14 22
      src/main/java/nju/seec/helper/controller/CommentController.java
  4. 8 6
      src/main/java/nju/seec/helper/controller/ControllerAdvice.java
  5. 22 32
      src/main/java/nju/seec/helper/controller/CourseController.java
  6. 5 9
      src/main/java/nju/seec/helper/controller/ReplyController.java
  7. 29 38
      src/main/java/nju/seec/helper/controller/SlideController.java
  8. 14 19
      src/main/java/nju/seec/helper/controller/UserController.java
  9. 0 20
      src/main/java/nju/seec/helper/controller/response/EmptyResponse.java
  10. 3 12
      src/main/java/nju/seec/helper/controller/response/ErrorResponse.java
  11. 0 29
      src/main/java/nju/seec/helper/controller/response/PageResourceResponse.java
  12. 30 0
      src/main/java/nju/seec/helper/controller/response/PageResponse.java
  13. 0 21
      src/main/java/nju/seec/helper/controller/response/ResourceResponse.java
  14. 0 11
      src/main/java/nju/seec/helper/controller/response/Response.java
  15. 0 15
      src/main/java/nju/seec/helper/controller/response/SuccessResponse.java
  16. 2 1
      src/main/java/nju/seec/helper/dao/CommentDAO.java
  17. 2 1
      src/main/java/nju/seec/helper/dao/CourseDAO.java
  18. 2 1
      src/main/java/nju/seec/helper/dao/ReplyDAO.java
  19. 2 1
      src/main/java/nju/seec/helper/dao/SlideDAO.java
  20. 2 1
      src/main/java/nju/seec/helper/dao/UserDAO.java
  21. 2 1
      src/main/java/nju/seec/helper/service/AuthUtil.java
  22. 2 3
      src/main/java/nju/seec/helper/service/CommentService.java
  23. 4 3
      src/main/java/nju/seec/helper/service/CourseService.java
  24. 4 3
      src/main/java/nju/seec/helper/service/SlideService.java
  25. 3 10
      src/main/java/nju/seec/helper/service/impl/CommentServiceImpl.java
  26. 11 22
      src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java
  27. 2 1
      src/main/java/nju/seec/helper/service/impl/ReplyServiceImpl.java
  28. 11 23
      src/main/java/nju/seec/helper/service/impl/SlideServiceImpl.java
  29. 7 6
      src/main/java/nju/seec/helper/service/impl/UserServiceImpl.java
  30. 20 0
      src/main/java/nju/seec/helper/util/enums/ExceptionType.java
  31. 1 12
      src/main/java/nju/seec/helper/util/exception/HelperException.java

+ 3 - 2
src/main/java/nju/seec/helper/aspect/auth/AuthAspect.java

@@ -2,6 +2,7 @@ package nju.seec.helper.aspect.auth;
 
 import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.util.Consts;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
@@ -31,12 +32,12 @@ public class AuthAspect {
 
         LoginUser user = (LoginUser) session.getAttribute(Consts.SESSION_USER_NAME);
         if (user == null) {
-            throw HelperException.of(HelperException.ExceptionType.NOT_LOGIN, "您未登录");
+            throw HelperException.of(ExceptionType.NOT_LOGIN, "您未登录");
         } else if (!Arrays
                 .stream(auth.roles())
                 .collect(Collectors.toSet())
                 .contains(user.getType())) {
-            throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, String.format("您暂时无法%s,请重新登录", auth.message()));
+            throw HelperException.of(ExceptionType.FORBIDDEN, String.format("您暂时无法%s,请重新登录", auth.message()));
         }
 
         Object[] objects = joinPoint.getArgs();

+ 5 - 7
src/main/java/nju/seec/helper/controller/CodeController.java

@@ -1,8 +1,8 @@
 package nju.seec.helper.controller;
 
-import nju.seec.helper.controller.response.EmptyResponse;
 import nju.seec.helper.service.CodeService;
 import nju.seec.helper.util.Consts;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -31,12 +31,11 @@ public class CodeController {
      * @return
      */
     @PostMapping("/email")
-    public EmptyResponse sendEmailCode(String email) {
+    public void sendEmailCode(String email) {
         if (email == null || !Pattern.matches(Consts.SCHOOL_EMAIL_REGEX, email)) {
-            throw HelperException.of(HelperException.ExceptionType.PARAM_ERROR, "该邮箱不是南大校邮");
+            throw HelperException.of(ExceptionType.PARAM_ERROR, "该邮箱不是南大校邮");
         }
         codeService.sendEmailCode(email);
-        return EmptyResponse.getInstance();
     }
 
     /**
@@ -46,11 +45,10 @@ public class CodeController {
      * @return
      */
     @PostMapping("/phone")
-    public EmptyResponse sendPhoneCode(String phone) {
+    public void sendPhoneCode(String phone) {
         if (phone == null || !Pattern.matches(Consts.PHONE_REGEX, phone)) {
-            throw HelperException.of(HelperException.ExceptionType.PARAM_ERROR, "手机号格式错误");
+            throw HelperException.of(ExceptionType.PARAM_ERROR, "手机号格式错误");
         }
         codeService.sendPhoneCode(phone);
-        return EmptyResponse.getInstance();
     }
 }

+ 14 - 22
src/main/java/nju/seec/helper/controller/CommentController.java

@@ -1,9 +1,7 @@
 package nju.seec.helper.controller;
 
 import nju.seec.helper.aspect.auth.Auth;
-import nju.seec.helper.controller.response.EmptyResponse;
-import nju.seec.helper.controller.response.PageResourceResponse;
-import nju.seec.helper.controller.response.ResourceResponse;
+import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.CommentDTO;
 import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.service.CommentService;
@@ -14,7 +12,6 @@ import org.springframework.data.web.PageableDefault;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.List;
 
 /**
  * 评论
@@ -35,10 +32,9 @@ public class CommentController {
      */
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "发表评论")
     @PostMapping
-    public ResourceResponse<CommentVO> createComment(LoginUser user,
-                                                     @Valid @RequestBody CommentDTO commentDTO) {
-        CommentVO commentVO = commentService.createComment(user, commentDTO);
-        return ResourceResponse.of(commentVO);
+    public CommentVO createComment(LoginUser user,
+                                   @Valid @RequestBody CommentDTO commentDTO) {
+        return commentService.createComment(user, commentDTO);
     }
 
     /**
@@ -46,10 +42,9 @@ public class CommentController {
      */
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "删除评论")
     @DeleteMapping("/{commentId}")
-    public EmptyResponse removeComment(LoginUser user,
-                                       @PathVariable Integer commentId) {
+    public void removeComment(LoginUser user,
+                              @PathVariable Integer commentId) {
         commentService.removeComment(user, commentId);
-        return EmptyResponse.getInstance();
     }
 
     /**
@@ -57,10 +52,9 @@ public class CommentController {
      */
     @Auth(roles = UserType.TEACHER, message = "置顶评论")
     @PostMapping("/{commentId}/top")
-    public EmptyResponse topComment(LoginUser user,
-                                    @PathVariable Integer commentId) {
+    public void topComment(LoginUser user,
+                           @PathVariable Integer commentId) {
         commentService.topComment(user, commentId);
-        return EmptyResponse.getInstance();
     }
 
     /**
@@ -68,20 +62,18 @@ public class CommentController {
      */
     @Auth(roles = UserType.TEACHER, message = "取消置顶评论")
     @PostMapping("/{commentId}/unTop")
-    public EmptyResponse unTopComment(LoginUser user,
-                                      @PathVariable Integer commentId) {
+    public void unTopComment(LoginUser user,
+                             @PathVariable Integer commentId) {
         commentService.unTopComment(user, commentId);
-        return EmptyResponse.getInstance();
     }
 
     /**
      * 取得某一页的评论信息
      */
     @GetMapping("/slide/{slideId}")
-    public PageResourceResponse<CommentVO> getComments(@PathVariable Integer slideId,
-                                                       @RequestParam(required = false, defaultValue = "1") Integer pageNumber,
-                                                       @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
-        List<CommentVO> commentVOList = commentService.getCommentsBySlideIdAndPageNumber(slideId, pageNumber, pageable);
-        return PageResourceResponse.of(commentVOList, pageable.getPageNumber(), pageable.getPageSize());
+    public PageResponse<CommentVO> getComments(@PathVariable Integer slideId,
+                                               @RequestParam(required = false, defaultValue = "1") Integer pageNumber,
+                                               @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
+        return PageResponse.of(commentService.getCommentsBySlideIdAndPageNumber(slideId, pageNumber, pageable));
     }
 }

+ 8 - 6
src/main/java/nju/seec/helper/controller/ControllerAdvice.java

@@ -3,6 +3,8 @@ package nju.seec.helper.controller;
 import lombok.extern.slf4j.Slf4j;
 import nju.seec.helper.controller.response.ErrorResponse;
 import nju.seec.helper.util.exception.HelperException;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -14,18 +16,18 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
 @RestControllerAdvice
 public class ControllerAdvice {
     @ExceptionHandler(MethodArgumentNotValidException.class)
-    public ErrorResponse handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
-        return ErrorResponse.of(400, "请检查您输入的数据");
+    public ResponseEntity<ErrorResponse> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
+        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ErrorResponse.of("请检查您输入的数据"));
     }
 
     @ExceptionHandler(HelperException.class)
-    public ErrorResponse handleHelperException(HelperException ex) {
-        return ErrorResponse.of(ex.getType().getCode(), ex.getMsg());
+    public ResponseEntity<ErrorResponse> handleHelperException(HelperException e) {
+        return ResponseEntity.status(e.getType().getStatus()).body(ErrorResponse.of(e.getMsg()));
     }
 
     @ExceptionHandler(Exception.class)
-    public ErrorResponse handleException(Exception e) {
+    public ResponseEntity<ErrorResponse> handleException(Exception e) {
         log.error(e.getLocalizedMessage());
-        return ErrorResponse.of(500, "系统异常,请重试");
+        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ErrorResponse.of("系统异常,请重试"));
     }
 }

+ 22 - 32
src/main/java/nju/seec/helper/controller/CourseController.java

@@ -1,9 +1,7 @@
 package nju.seec.helper.controller;
 
 import nju.seec.helper.aspect.auth.Auth;
-import nju.seec.helper.controller.response.EmptyResponse;
-import nju.seec.helper.controller.response.PageResourceResponse;
-import nju.seec.helper.controller.response.ResourceResponse;
+import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.ChooseDTO;
 import nju.seec.helper.dto.CourseDTO;
 import nju.seec.helper.dto.LoginUser;
@@ -16,7 +14,6 @@ import org.springframework.data.web.PageableDefault;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.List;
 
 /**
  * 课程
@@ -37,10 +34,9 @@ public class CourseController {
      */
     @Auth(roles = UserType.TEACHER, message = "创建课程")
     @PostMapping
-    public ResourceResponse<CourseVO> createCourse(LoginUser user,
-                                                   @Valid @RequestBody CourseDTO courseDTO) {
-        CourseVO courseVO = courseService.createCourse(user, courseDTO);
-        return ResourceResponse.of(courseVO);
+    public CourseVO createCourse(LoginUser user,
+                                 @Valid @RequestBody CourseDTO courseDTO) {
+        return courseService.createCourse(user, courseDTO);
     }
 
     /**
@@ -48,10 +44,9 @@ public class CourseController {
      */
     @Auth(roles = UserType.TEACHER, message = "删除课程")
     @DeleteMapping("/{courseId}")
-    public EmptyResponse removeCourse(LoginUser user,
-                                      @PathVariable Integer courseId) {
+    public void removeCourse(LoginUser user,
+                             @PathVariable Integer courseId) {
         courseService.removeCourse(user, courseId);
-        return EmptyResponse.getInstance();
     }
 
     /**
@@ -59,10 +54,9 @@ public class CourseController {
      */
     @Auth(roles = UserType.TEACHER, message = "修改课程")
     @PutMapping
-    public ResourceResponse<CourseVO> modifyCourse(LoginUser user,
-                                                   @Valid @RequestBody ModifyCourseDTO modifyCourseDTO) {
-        CourseVO courseVO = courseService.modifyCourse(user, modifyCourseDTO);
-        return ResourceResponse.of(courseVO);
+    public CourseVO modifyCourse(LoginUser user,
+                                 @Valid @RequestBody ModifyCourseDTO modifyCourseDTO) {
+        return courseService.modifyCourse(user, modifyCourseDTO);
     }
 
     /**
@@ -70,20 +64,18 @@ public class CourseController {
      */
     @Auth(roles = UserType.STUDENT, message = "选课")
     @PostMapping("/choose")
-    public EmptyResponse chooseCourse(LoginUser user,
-                                      @Valid @RequestBody ChooseDTO chooseDTO) {
+    public void chooseCourse(LoginUser user,
+                             @Valid @RequestBody ChooseDTO chooseDTO) {
         courseService.chooseCourse(user, chooseDTO);
-        return EmptyResponse.getInstance();
     }
 
     /**
      * 获取课程信息(无需登录)
      */
     @GetMapping
-    public PageResourceResponse<CourseVO> getCourses(@RequestParam(required = false, defaultValue = "") String key,
-                                                     @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
-        List<CourseVO> courseVOList = courseService.getCourses(key, pageable);
-        return PageResourceResponse.of(courseVOList, pageable.getPageNumber(), pageable.getPageSize());
+    public PageResponse<CourseVO> getCourses(@RequestParam(required = false, defaultValue = "") String key,
+                                             @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
+        return PageResponse.of(courseService.getCourses(key, pageable));
     }
 
     /**
@@ -91,11 +83,10 @@ public class CourseController {
      */
     @Auth(roles = UserType.TEACHER, message = "获取所创课程")
     @GetMapping("/teacher")
-    public PageResourceResponse<CourseVO> teacherGetCourses(LoginUser user,
-                                                            @RequestParam(required = false, defaultValue = "") String key,
-                                                            @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
-        List<CourseVO> courseVOList = courseService.teacherGetCourses(user, key, pageable);
-        return PageResourceResponse.of(courseVOList, pageable.getPageNumber(), pageable.getPageSize());
+    public PageResponse<CourseVO> teacherGetCourses(LoginUser user,
+                                                    @RequestParam(required = false, defaultValue = "") String key,
+                                                    @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
+        return PageResponse.of(courseService.teacherGetCourses(user, key, pageable));
     }
 
     /**
@@ -103,10 +94,9 @@ public class CourseController {
      */
     @Auth(roles = UserType.STUDENT, message = "获取所选课程")
     @GetMapping("/student")
-    public PageResourceResponse<CourseVO> studentGetCourses(LoginUser user,
-                                                            @RequestParam(required = false, defaultValue = "") String key,
-                                                            @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
-        List<CourseVO> courseVOList = courseService.studentGetCourses(user, key, pageable);
-        return PageResourceResponse.of(courseVOList, pageable.getPageNumber(), pageable.getPageSize());
+    public PageResponse<CourseVO> studentGetCourses(LoginUser user,
+                                                    @RequestParam(required = false, defaultValue = "") String key,
+                                                    @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
+        return PageResponse.of(courseService.studentGetCourses(user, key, pageable));
     }
 }

+ 5 - 9
src/main/java/nju/seec/helper/controller/ReplyController.java

@@ -1,8 +1,6 @@
 package nju.seec.helper.controller;
 
 import nju.seec.helper.aspect.auth.Auth;
-import nju.seec.helper.controller.response.EmptyResponse;
-import nju.seec.helper.controller.response.ResourceResponse;
 import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.dto.ReplyDTO;
 import nju.seec.helper.service.ReplyService;
@@ -29,10 +27,9 @@ public class ReplyController {
      */
     @Auth(roles = UserType.TEACHER, message = "回复")
     @PostMapping
-    public ResourceResponse<ReplyVO> createReply(LoginUser user,
-                                                 @Valid @RequestBody ReplyDTO replyDTO) {
-        ReplyVO replyVO = replyService.createReply(user, replyDTO);
-        return ResourceResponse.of(replyVO);
+    public ReplyVO createReply(LoginUser user,
+                               @Valid @RequestBody ReplyDTO replyDTO) {
+        return replyService.createReply(user, replyDTO);
     }
 
     /**
@@ -40,9 +37,8 @@ public class ReplyController {
      */
     @Auth(roles = UserType.TEACHER, message = "删除回复")
     @DeleteMapping("/{replyId}")
-    public EmptyResponse removeReply(LoginUser user,
-                                     @PathVariable Integer replyId) {
+    public void removeReply(LoginUser user,
+                            @PathVariable Integer replyId) {
         replyService.removeReply(user, replyId);
-        return EmptyResponse.getInstance();
     }
 }

+ 29 - 38
src/main/java/nju/seec/helper/controller/SlideController.java

@@ -1,9 +1,7 @@
 package nju.seec.helper.controller;
 
 import nju.seec.helper.aspect.auth.Auth;
-import nju.seec.helper.controller.response.EmptyResponse;
-import nju.seec.helper.controller.response.PageResourceResponse;
-import nju.seec.helper.controller.response.ResourceResponse;
+import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.dto.SlideDTO;
 import nju.seec.helper.dto.modify.ModifySlideDTO;
@@ -13,10 +11,10 @@ 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.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.List;
 
 /**
  * 幻灯片
@@ -37,10 +35,10 @@ public class SlideController {
      */
     @Auth(roles = UserType.TEACHER, message = "创建幻灯片")
     @PostMapping
-    public ResourceResponse<SlideVO> createSlide(LoginUser user,
-                                                 @Valid SlideDTO slideDTO) {
+    public ResponseEntity<SlideVO> createSlide(LoginUser user,
+                                               @Valid SlideDTO slideDTO) {
         SlideVO slideVO = slideService.createSlide(user, slideDTO);
-        return ResourceResponse.of(slideVO);
+        return ResponseEntity.ok(slideVO);
     }
 
     /**
@@ -48,10 +46,9 @@ public class SlideController {
      */
     @Auth(roles = UserType.TEACHER, message = "修改幻灯片")
     @PutMapping
-    public ResourceResponse<SlideVO> modifySlide(LoginUser user,
-                                                 @Valid @RequestBody ModifySlideDTO modifySlideDTO) {
-        SlideVO slideVO = slideService.modifySlide(user, modifySlideDTO);
-        return ResourceResponse.of(slideVO);
+    public SlideVO modifySlide(LoginUser user,
+                               @Valid @RequestBody ModifySlideDTO modifySlideDTO) {
+        return slideService.modifySlide(user, modifySlideDTO);
     }
 
     /**
@@ -59,10 +56,9 @@ public class SlideController {
      */
     @Auth(roles = UserType.TEACHER, message = "修改幻灯片状态")
     @PutMapping("/state")
-    public EmptyResponse modifySlideState(LoginUser user,
-                                          @Valid @RequestBody ModifySlideStateDTO modifySlideStateDTO) {
+    public void modifySlideState(LoginUser user,
+                                 @Valid @RequestBody ModifySlideStateDTO modifySlideStateDTO) {
         slideService.modifySlideState(user, modifySlideStateDTO);
-        return EmptyResponse.getInstance();
     }
 
     /**
@@ -70,10 +66,9 @@ public class SlideController {
      */
     @Auth(roles = UserType.TEACHER, message = "删除幻灯片")
     @DeleteMapping("/{slideId}")
-    public EmptyResponse removeSlide(LoginUser user,
-                                     @PathVariable Integer slideId) {
+    public void removeSlide(LoginUser user,
+                            @PathVariable Integer slideId) {
         slideService.removeSlide(user, slideId);
-        return EmptyResponse.getInstance();
     }
 
     /**
@@ -81,11 +76,10 @@ public class SlideController {
      */
     @Auth(roles = UserType.TEACHER, message = "获取幻灯片列表")
     @GetMapping("/teacher")
-    public PageResourceResponse<SlideVO> teacherGetSlides(LoginUser user,
-                                                          @RequestParam(required = false, defaultValue = "") String key,
-                                                          @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
-        List<SlideVO> slideVOList = slideService.teacherGetSlides(user, key, pageable);
-        return PageResourceResponse.of(slideVOList, pageable.getPageNumber(), pageable.getPageSize());
+    public PageResponse<SlideVO> teacherGetSlides(LoginUser user,
+                                                  @RequestParam(required = false, defaultValue = "") String key,
+                                                  @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
+        return PageResponse.of(slideService.teacherGetSlides(user, key, pageable));
     }
 
     /**
@@ -93,12 +87,11 @@ public class SlideController {
      */
     @Auth(roles = UserType.TEACHER, message = "获取幻灯片列表")
     @GetMapping("/teacher/course/{courseId}")
-    public PageResourceResponse<SlideVO> teacherGetSlidesByCourse(LoginUser user,
-                                                                  @PathVariable Integer courseId,
-                                                                  @RequestParam(required = false, defaultValue = "") String key,
-                                                                  @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
-        List<SlideVO> slideVOList = slideService.teacherGetSlidesByCourse(user, courseId, key, pageable);
-        return PageResourceResponse.of(slideVOList, pageable.getPageNumber(), pageable.getPageSize());
+    public PageResponse<SlideVO> 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));
     }
 
     /**
@@ -106,12 +99,11 @@ public class SlideController {
      */
     @Auth(roles = UserType.STUDENT, message = "获取幻灯片列表")
     @GetMapping("/student/course/{courseId}")
-    public PageResourceResponse<SlideVO> studentGetSlidesByCourse(LoginUser user,
-                                                                  @PathVariable Integer courseId,
-                                                                  @RequestParam(required = false, defaultValue = "") String key,
-                                                                  @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
-        List<SlideVO> slideVOList = slideService.studentGetSlidesByCourse(user, courseId, key, pageable);
-        return PageResourceResponse.of(slideVOList, pageable.getPageNumber(), pageable.getPageSize());
+    public PageResponse<SlideVO> 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));
     }
 
     /**
@@ -119,9 +111,8 @@ public class SlideController {
      */
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取幻灯片链接")
     @GetMapping("/{slideId}/url")
-    public ResourceResponse<String> getSlideUrl(LoginUser user,
-                                                @PathVariable Integer slideId) {
-        String slideUrl = slideService.getSlideUrl(user, slideId);
-        return ResourceResponse.of(slideUrl);
+    public String getSlideUrl(LoginUser user,
+                              @PathVariable Integer slideId) {
+        return slideService.getSlideUrl(user, slideId);
     }
 }

+ 14 - 19
src/main/java/nju/seec/helper/controller/UserController.java

@@ -1,8 +1,6 @@
 package nju.seec.helper.controller;
 
 import nju.seec.helper.aspect.auth.Auth;
-import nju.seec.helper.controller.response.EmptyResponse;
-import nju.seec.helper.controller.response.ResourceResponse;
 import nju.seec.helper.dto.LoginDTO;
 import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.dto.RegisterDTO;
@@ -12,6 +10,7 @@ import nju.seec.helper.service.UserService;
 import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.enums.UserType;
 import nju.seec.helper.vo.UserVO;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpSession;
@@ -35,17 +34,16 @@ public class UserController {
      * 注册
      */
     @PostMapping("/register")
-    public ResourceResponse<UserVO> register(@Valid @RequestBody RegisterDTO registerDTO) {
-        UserVO userVO = userService.createUser(registerDTO);
-        return ResourceResponse.of(userVO);
+    public UserVO register(@Valid @RequestBody RegisterDTO registerDTO) {
+        return userService.createUser(registerDTO);
     }
 
     /**
      * 邮箱登录
      */
     @PostMapping("/login/email")
-    public ResourceResponse<UserVO> loginByEmail(@Valid @RequestBody LoginDTO loginDTO,
-                                                 HttpSession session) {
+    public UserVO loginByEmail(@Valid @RequestBody LoginDTO loginDTO,
+                               HttpSession session) {
         UserVO userVO = userService.getUserByEmailAndPassword(loginDTO.getUsername(), loginDTO.getPassword());
 
         LoginUser user = new LoginUser()
@@ -56,7 +54,7 @@ public class UserController {
         session.setAttribute(Consts.SESSION_USER_NAME, user);
         // 20分钟有效期
         session.setMaxInactiveInterval(1200);
-        return ResourceResponse.of(userVO);
+        return userVO;
     }
 
     /**
@@ -64,9 +62,8 @@ public class UserController {
      */
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "登出")
     @PostMapping("/logout")
-    public EmptyResponse logout(HttpSession session) {
+    public void logout(HttpSession session) {
         session.removeAttribute(Consts.SESSION_USER_NAME);
-        return EmptyResponse.getInstance();
     }
 
     /**
@@ -74,25 +71,24 @@ public class UserController {
      */
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "修改个人信息")
     @PutMapping
-    public ResourceResponse<UserVO> modifyUser(LoginUser user,
-                                               @Valid @RequestBody ModifyUserDTO modifyUserDTO,
-                                               HttpSession session) {
+    public UserVO modifyUser(LoginUser user,
+                             @Valid @RequestBody ModifyUserDTO modifyUserDTO,
+                             HttpSession session) {
         UserVO userVO = userService.modifyUser(user, modifyUserDTO);
         user = ((LoginUser) session.getAttribute(Consts.SESSION_USER_NAME))
                 .setId(userVO.getId())
                 .setName(userVO.getName())
                 .setType(userVO.getType());
         session.setAttribute(Consts.SESSION_USER_NAME, user);
-        return ResourceResponse.of(userVO);
+        return userVO;
     }
 
     /**
      * 重设密码
      */
     @PutMapping("/resetPassword/email")
-    public EmptyResponse resetPasswordByEmail(@Valid @RequestBody ResetPasswordDTO resetPasswordDTO) {
+    public void resetPasswordByEmail(@Valid @RequestBody ResetPasswordDTO resetPasswordDTO) {
         userService.resetPasswordByEmail(resetPasswordDTO);
-        return EmptyResponse.getInstance();
     }
 
     /**
@@ -100,8 +96,7 @@ public class UserController {
      */
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取个人信息")
     @GetMapping
-    public ResourceResponse<UserVO> getUserInfo(LoginUser user) {
-        UserVO userVO = userService.getUserById(user.getId());
-        return ResourceResponse.of(userVO);
+    public UserVO getUserInfo(LoginUser user) {
+        return userService.getUserById(user.getId());
     }
 }

+ 0 - 20
src/main/java/nju/seec/helper/controller/response/EmptyResponse.java

@@ -1,20 +0,0 @@
-package nju.seec.helper.controller.response;
-
-import lombok.AccessLevel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-/**
- * @author cst
- */
-@Data
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@EqualsAndHashCode(callSuper = true)
-public class EmptyResponse extends SuccessResponse {
-    private static EmptyResponse instance = new EmptyResponse();
-
-    public static EmptyResponse getInstance() {
-        return instance;
-    }
-}

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

@@ -1,22 +1,13 @@
 package nju.seec.helper.controller.response;
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 
 /**
  * @author cst
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
-public class ErrorResponse extends Response {
+@AllArgsConstructor(staticName = "of")
+public class ErrorResponse {
     private String msg;
-
-    private ErrorResponse(int code, String msg) {
-        this.code = code;
-        this.msg = msg;
-    }
-
-    public static ErrorResponse of(int code, String msg) {
-        return new ErrorResponse(code, msg);
-    }
 }

+ 0 - 29
src/main/java/nju/seec/helper/controller/response/PageResourceResponse.java

@@ -1,29 +0,0 @@
-package nju.seec.helper.controller.response;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.util.List;
-
-/**
- * @author cst
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@AllArgsConstructor
-public class PageResourceResponse<T> extends SuccessResponse {
-    private List<T> data;
-    private PageInfo pager;
-
-    public static <T> PageResourceResponse<T> of(List<T> data, int page, int size) {
-        return new PageResourceResponse<>(data, PageInfo.of(page, size));
-    }
-
-    @Data
-    @AllArgsConstructor(staticName = "of")
-    public static class PageInfo {
-        private int page;
-        private int size;
-    }
-}

+ 30 - 0
src/main/java/nju/seec/helper/controller/response/PageResponse.java

@@ -0,0 +1,30 @@
+package nju.seec.helper.controller.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+/**
+ * @author cst
+ */
+@Data
+@AllArgsConstructor
+public class PageResponse<T> {
+    private List<T> data;
+    private PageInfo page;
+
+    public static <T> PageResponse<T> of(Page<T> page) {
+        return new PageResponse<>(page.getContent(), PageInfo.of(page.getNumber(), page.getSize(), page.getTotalPages(), page.getNumberOfElements()));
+    }
+
+    @Data
+    @AllArgsConstructor(staticName = "of")
+    public static class PageInfo {
+        private int number;
+        private int size;
+        private int totalPages;
+        private int totalElements;
+    }
+}

+ 0 - 21
src/main/java/nju/seec/helper/controller/response/ResourceResponse.java

@@ -1,21 +0,0 @@
-package nju.seec.helper.controller.response;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * @author cst
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class ResourceResponse<T> extends SuccessResponse {
-    private T data;
-
-    public static <T> ResourceResponse<T> of(T data) {
-        return new ResourceResponse<>(data);
-    }
-
-    private ResourceResponse(T data) {
-        this.data = data;
-    }
-}

+ 0 - 11
src/main/java/nju/seec/helper/controller/response/Response.java

@@ -1,11 +0,0 @@
-package nju.seec.helper.controller.response;
-
-import lombok.Data;
-
-/**
- * @author cst
- */
-@Data
-public class Response {
-    protected int code;
-}

+ 0 - 15
src/main/java/nju/seec/helper/controller/response/SuccessResponse.java

@@ -1,15 +0,0 @@
-package nju.seec.helper.controller.response;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * @author cst
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class SuccessResponse extends Response {
-    public SuccessResponse() {
-        this.code = 200;
-    }
-}

+ 2 - 1
src/main/java/nju/seec/helper/dao/CommentDAO.java

@@ -1,6 +1,7 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Comment;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -23,7 +24,7 @@ public interface CommentDAO extends JpaRepository<Comment, Integer> {
      */
     default Comment findCommentById(Integer id) {
         return this.findById(id)
-                .orElseThrow(() -> HelperException.of(HelperException.ExceptionType.NOT_FOUND, "找不到评论"));
+                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到评论"));
     }
 
     /**

+ 2 - 1
src/main/java/nju/seec/helper/dao/CourseDAO.java

@@ -1,6 +1,7 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Course;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -23,7 +24,7 @@ public interface CourseDAO extends JpaRepository<Course, Integer> {
      */
     default Course findCourseById(Integer id) {
         return this.findById(id)
-                .orElseThrow(() -> HelperException.of(HelperException.ExceptionType.NOT_FOUND, "找不到课程"));
+                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到课程"));
     }
 
     /**

+ 2 - 1
src/main/java/nju/seec/helper/dao/ReplyDAO.java

@@ -1,6 +1,7 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Reply;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
@@ -18,6 +19,6 @@ public interface ReplyDAO extends JpaRepository<Reply, Integer> {
      */
     default Reply findReplyById(Integer id) {
         return this.findById(id)
-                .orElseThrow(() -> HelperException.of(HelperException.ExceptionType.NOT_FOUND, "找不到回复"));
+                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到回复"));
     }
 }

+ 2 - 1
src/main/java/nju/seec/helper/dao/SlideDAO.java

@@ -1,6 +1,7 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Slide;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.enums.SlideState;
 import nju.seec.helper.util.exception.HelperException;
 import org.springframework.data.domain.Page;
@@ -24,7 +25,7 @@ public interface SlideDAO extends JpaRepository<Slide, Integer> {
      */
     default Slide findSlideById(Integer id) {
         return this.findById(id)
-                .orElseThrow(() -> HelperException.of(HelperException.ExceptionType.NOT_FOUND, "找不到幻灯片"));
+                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到幻灯片"));
     }
 
     /**

+ 2 - 1
src/main/java/nju/seec/helper/dao/UserDAO.java

@@ -1,6 +1,7 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.User;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
@@ -20,7 +21,7 @@ public interface UserDAO extends JpaRepository<User, Integer> {
      */
     default User findUserById(Integer id) {
         return this.findById(id)
-                .orElseThrow(() -> HelperException.of(HelperException.ExceptionType.NOT_FOUND, "找不到用户信息"));
+                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到用户信息"));
     }
 
     /**

+ 2 - 1
src/main/java/nju/seec/helper/service/AuthUtil.java

@@ -2,6 +2,7 @@ package nju.seec.helper.service;
 
 import lombok.NonNull;
 import lombok.experimental.UtilityClass;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
 
 /**
@@ -11,7 +12,7 @@ import nju.seec.helper.util.exception.HelperException;
 public class AuthUtil {
     public void checkDataAuth(@NonNull Integer userId, @NonNull Integer dateUserId, String errMsg) {
         if (!userId.equals(dateUserId)) {
-            throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, errMsg);
+            throw HelperException.of(ExceptionType.FORBIDDEN, errMsg);
         }
     }
 }

+ 2 - 3
src/main/java/nju/seec/helper/service/CommentService.java

@@ -3,10 +3,9 @@ package nju.seec.helper.service;
 import nju.seec.helper.dto.CommentDTO;
 import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.vo.CommentVO;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
-import java.util.List;
-
 /**
  * @author cst
  */
@@ -52,5 +51,5 @@ public interface CommentService {
      * @param pageable
      * @return
      */
-    List<CommentVO> getCommentsBySlideIdAndPageNumber(Integer slideId, Integer pageNumber, Pageable pageable);
+    Page<CommentVO> getCommentsBySlideIdAndPageNumber(Integer slideId, Integer pageNumber, Pageable pageable);
 }

+ 4 - 3
src/main/java/nju/seec/helper/service/CourseService.java

@@ -5,6 +5,7 @@ import nju.seec.helper.dto.CourseDTO;
 import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.dto.modify.ModifyCourseDTO;
 import nju.seec.helper.vo.CourseVO;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
 import java.util.List;
@@ -54,7 +55,7 @@ public interface CourseService {
      * @param pageable
      * @return
      */
-    List<CourseVO> getCourses(String key, Pageable pageable);
+    Page<CourseVO> getCourses(String key, Pageable pageable);
 
     /**
      * 教师获取创建课程
@@ -64,7 +65,7 @@ public interface CourseService {
      * @param pageable
      * @return
      */
-    List<CourseVO> teacherGetCourses(LoginUser teacher, String key, Pageable pageable);
+    Page<CourseVO> teacherGetCourses(LoginUser teacher, String key, Pageable pageable);
 
     /**
      * 学生获取已选课程
@@ -74,5 +75,5 @@ public interface CourseService {
      * @param pageable
      * @return
      */
-    List<CourseVO> studentGetCourses(LoginUser student, String key, Pageable pageable);
+    Page<CourseVO> studentGetCourses(LoginUser student, String key, Pageable pageable);
 }

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

@@ -5,6 +5,7 @@ import nju.seec.helper.dto.SlideDTO;
 import nju.seec.helper.dto.modify.ModifySlideDTO;
 import nju.seec.helper.dto.modify.ModifySlideStateDTO;
 import nju.seec.helper.vo.SlideVO;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
 import java.util.List;
@@ -55,7 +56,7 @@ public interface SlideService {
      * @param pageable
      * @return
      */
-    List<SlideVO> teacherGetSlides(LoginUser teacher, String key, Pageable pageable);
+    Page<SlideVO> teacherGetSlides(LoginUser teacher, String key, Pageable pageable);
 
     /**
      * 教师基于课程获取幻灯片
@@ -66,7 +67,7 @@ public interface SlideService {
      * @param pageable
      * @return
      */
-    List<SlideVO> teacherGetSlidesByCourse(LoginUser teacher, Integer courseId, String key, Pageable pageable);
+    Page<SlideVO> teacherGetSlidesByCourse(LoginUser teacher, Integer courseId, String key, Pageable pageable);
 
     /**
      * 教师获取幻灯片
@@ -77,7 +78,7 @@ public interface SlideService {
      * @param pageable
      * @return
      */
-    List<SlideVO> studentGetSlidesByCourse(LoginUser student, Integer courseId, String key, Pageable pageable);
+    Page<SlideVO> studentGetSlidesByCourse(LoginUser student, Integer courseId, String key, Pageable pageable);
 
     /**
      * 获取幻灯片链接

+ 3 - 10
src/main/java/nju/seec/helper/service/impl/CommentServiceImpl.java

@@ -8,13 +8,11 @@ import nju.seec.helper.entity.Comment;
 import nju.seec.helper.service.AuthUtil;
 import nju.seec.helper.service.CommentService;
 import nju.seec.helper.vo.CommentVO;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
-import java.util.stream.Collectors;
-
 /**
  * @author cst
  */
@@ -87,12 +85,7 @@ public class CommentServiceImpl implements CommentService {
 
     @Transactional(readOnly = true)
     @Override
-    public List<CommentVO> getCommentsBySlideIdAndPageNumber(Integer slideId, Integer pageNumber, Pageable pageable) {
-        return commentDAO
-                .findComments(slideId, pageNumber, pageable)
-                .getContent()
-                .stream()
-                .map(CommentVO::new)
-                .collect(Collectors.toList());
+    public Page<CommentVO> getCommentsBySlideIdAndPageNumber(Integer slideId, Integer pageNumber, Pageable pageable) {
+        return commentDAO.findComments(slideId, pageNumber, pageable).map(CommentVO::new);
     }
 }

+ 11 - 22
src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java

@@ -11,15 +11,14 @@ import nju.seec.helper.entity.Course;
 import nju.seec.helper.service.AuthUtil;
 import nju.seec.helper.service.CourseService;
 import nju.seec.helper.util.EncryptUtils;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
 import nju.seec.helper.vo.CourseVO;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
-import java.util.stream.Collectors;
-
 /**
  * @author cst
  */
@@ -78,13 +77,13 @@ public class CourseServiceImpl implements CourseService {
     public void chooseCourse(LoginUser student, ChooseDTO chooseDTO) {
         Integer studentId = student.getId();
         if (chooseDAO.existsByStudentIdAndCourseId(studentId, chooseDTO.getCourseId())) {
-            throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "您已选课");
+            throw HelperException.of(ExceptionType.FORBIDDEN, "您已选课");
         }
 
         Course course = courseDAO.findCourseById(chooseDTO.getCourseId());
 
         if (!course.getCode().equals(EncryptUtils.encode(chooseDTO.getCode()))) {
-            throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "选课码错误");
+            throw HelperException.of(ExceptionType.FORBIDDEN, "选课码错误");
         }
 
         Choose choose = new Choose()
@@ -95,35 +94,25 @@ public class CourseServiceImpl implements CourseService {
 
     @Transactional(readOnly = true)
     @Override
-    public List<CourseVO> getCourses(String key, Pageable pageable) {
-        return courseDAO
-                .findByKey(key, pageable)
-                .stream()
-                .map(CourseVO::new)
-                .collect(Collectors.toList());
+    public Page<CourseVO> getCourses(String key, Pageable pageable) {
+        return courseDAO.findByKey(key, pageable).map(CourseVO::new);
     }
 
     @Transactional(readOnly = true)
     @Override
-    public List<CourseVO> teacherGetCourses(LoginUser teacher, String key, Pageable pageable) {
-        return courseDAO
-                .findByTeacherIdAndKey(teacher.getId(), key, pageable)
-                .stream()
-                .map(CourseVO::new)
-                .collect(Collectors.toList());
+    public Page<CourseVO> teacherGetCourses(LoginUser teacher, String key, Pageable pageable) {
+        return courseDAO.findByTeacherIdAndKey(teacher.getId(), key, pageable).map(CourseVO::new);
     }
 
     @Transactional(readOnly = true)
     @Override
-    public List<CourseVO> studentGetCourses(LoginUser student, String key, Pageable pageable) {
+    public Page<CourseVO> studentGetCourses(LoginUser student, String key, Pageable pageable) {
         return courseDAO
                 .findByIdsAndKey(
                         chooseDAO.findCourseIdsByStudentId(student.getId()),
                         key,
                         pageable)
-                .stream()
-                .map(CourseVO::new)
-                .collect(Collectors.toList());
+                .map(CourseVO::new);
     }
 
     /**
@@ -131,7 +120,7 @@ public class CourseServiceImpl implements CourseService {
      */
     private void checkSameCourseName(Integer teacherId, String name) {
         if (courseDAO.existsByTeacherIdAndName(teacherId, name)) {
-            throw HelperException.of(HelperException.ExceptionType.CONFLICT, "该课程名已使用");
+            throw HelperException.of(ExceptionType.CONFLICT, "该课程名已使用");
         }
     }
 }

+ 2 - 1
src/main/java/nju/seec/helper/service/impl/ReplyServiceImpl.java

@@ -10,6 +10,7 @@ import nju.seec.helper.entity.Comment;
 import nju.seec.helper.entity.Reply;
 import nju.seec.helper.service.AuthUtil;
 import nju.seec.helper.service.ReplyService;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
 import nju.seec.helper.vo.ReplyVO;
 import org.springframework.stereotype.Service;
@@ -38,7 +39,7 @@ public class ReplyServiceImpl implements ReplyService {
         AuthUtil.checkDataAuth(user.getId(), slideDAO.findSlideById(comment.getSlideId()).getTeacherId(), "您无权回复该评论");
 
         if (comment.getReply() != null) {
-            throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "您已回复该评论");
+            throw HelperException.of(ExceptionType.FORBIDDEN, "您已回复该评论");
         }
         Reply reply = new Reply()
                 .setComment(comment)

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

@@ -17,10 +17,12 @@ import nju.seec.helper.service.SlideService;
 import nju.seec.helper.util.CacheUtils;
 import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.FileUtils;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.enums.SlideState;
 import nju.seec.helper.util.exception.HelperException;
 import nju.seec.helper.vo.SlideVO;
 import org.apache.pdfbox.pdmodel.PDDocument;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -28,10 +30,8 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.InputStream;
 import java.time.LocalDateTime;
-import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
 
 /**
  * @author cst
@@ -79,7 +79,7 @@ public class SlideServiceImpl implements SlideService {
                 pages = doc.getNumberOfPages();
                 break;
             default:
-                throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "不支持的文件类型");
+                throw HelperException.of(ExceptionType.FORBIDDEN, "不支持的文件类型");
         }
 
         slide.setPages(pages);
@@ -123,36 +123,24 @@ public class SlideServiceImpl implements SlideService {
 
     @Transactional(readOnly = true)
     @Override
-    public List<SlideVO> teacherGetSlides(LoginUser teacher, String key, Pageable pageable) {
-        return slideDAO
-                .findByTeacherIdAndNameContains(teacher.getId(), key, pageable)
-                .stream()
-                .map(SlideVO::new)
-                .collect(Collectors.toList());
+    public Page<SlideVO> teacherGetSlides(LoginUser teacher, String key, Pageable pageable) {
+        return slideDAO.findByTeacherIdAndNameContains(teacher.getId(), key, pageable).map(SlideVO::new);
     }
 
     @Transactional(readOnly = true)
     @Override
-    public List<SlideVO> teacherGetSlidesByCourse(LoginUser teacher, Integer courseId, String key, Pageable pageable) {
-        return slideDAO
-                .findByCourseIdAndTeacherIdAndNameContains(courseId, teacher.getId(), key, pageable)
-                .stream()
-                .map(SlideVO::new)
-                .collect(Collectors.toList());
+    public Page<SlideVO> teacherGetSlidesByCourse(LoginUser teacher, Integer courseId, String key, Pageable pageable) {
+        return slideDAO.findByCourseIdAndTeacherIdAndNameContains(courseId, teacher.getId(), key, pageable).map(SlideVO::new);
     }
 
     @Transactional(readOnly = true)
     @Override
-    public List<SlideVO> studentGetSlidesByCourse(LoginUser student, Integer courseId, String key, Pageable pageable) {
+    public Page<SlideVO> studentGetSlidesByCourse(LoginUser student, Integer courseId, String key, Pageable pageable) {
         if (!chooseDAO.existsByStudentIdAndCourseId(student.getId(), courseId)) {
-            throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "你无权查看该课程下的幻灯片");
+            throw HelperException.of(ExceptionType.FORBIDDEN, "你无权查看该课程下的幻灯片");
         }
 
-        return slideDAO
-                .findByCourseIdAndStateNotInAndNameContains(courseId, ImmutableSet.of(SlideState.DRAFT), key, pageable)
-                .stream()
-                .map(SlideVO::new)
-                .collect(Collectors.toList());
+        return slideDAO.findByCourseIdAndStateNotInAndNameContains(courseId, ImmutableSet.of(SlideState.DRAFT), key, pageable).map(SlideVO::new);
     }
 
     @Transactional(readOnly = true)
@@ -172,7 +160,7 @@ public class SlideServiceImpl implements SlideService {
     }
 
     private void checkDataAccessAuth(LoginUser user, Slide slide) {
-        HelperException forbiddenEx = HelperException.of(HelperException.ExceptionType.FORBIDDEN, "您无权访问该幻灯片");
+        HelperException forbiddenEx = HelperException.of(ExceptionType.FORBIDDEN, "您无权访问该幻灯片");
 
         switch (user.getType()) {
             case TEACHER:

+ 7 - 6
src/main/java/nju/seec/helper/service/impl/UserServiceImpl.java

@@ -12,6 +12,7 @@ import nju.seec.helper.service.UserService;
 import nju.seec.helper.util.CacheUtils;
 import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.EncryptUtils;
+import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.enums.UserType;
 import nju.seec.helper.util.exception.HelperException;
 import nju.seec.helper.vo.UserVO;
@@ -46,7 +47,7 @@ public class UserServiceImpl implements UserService {
 
         String email = registerDTO.getEmail();
         if (!registerDTO.getEmailCode().equals(cacheUtils.get(Consts.EMAIL_CACHE_NAME, email))) {
-            throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "邮箱或验证码错误");
+            throw HelperException.of(ExceptionType.FORBIDDEN, "邮箱或验证码错误");
         }
 
         User user = new User()
@@ -77,10 +78,10 @@ public class UserServiceImpl implements UserService {
     @Override
     public void resetPasswordByEmail(ResetPasswordDTO resetPasswordDTO) {
         User user = userDAO.findByEmail(resetPasswordDTO.getUsername())
-                .orElseThrow(() -> HelperException.of(HelperException.ExceptionType.FORBIDDEN, "该邮箱未在系统中注册"));
+                .orElseThrow(() -> HelperException.of(ExceptionType.FORBIDDEN, "该邮箱未在系统中注册"));
 
         if (!resetPasswordDTO.getCode().equals(cacheUtils.get(Consts.EMAIL_CACHE_NAME, resetPasswordDTO.getUsername()))) {
-            throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "邮箱或验证码错误");
+            throw HelperException.of(ExceptionType.FORBIDDEN, "邮箱或验证码错误");
         }
 
         user.setPassword(EncryptUtils.encode(resetPasswordDTO.getPassword()));
@@ -94,7 +95,7 @@ public class UserServiceImpl implements UserService {
         return userDAO
                 .findByEmailAndPassword(email, EncryptUtils.encode(password))
                 .map(UserVO::new)
-                .orElseThrow(() -> HelperException.of(HelperException.ExceptionType.FORBIDDEN, "邮箱或密码错误"));
+                .orElseThrow(() -> HelperException.of(ExceptionType.FORBIDDEN, "邮箱或密码错误"));
     }
 
     @Transactional(readOnly = true)
@@ -105,13 +106,13 @@ public class UserServiceImpl implements UserService {
 
     private void checkSameEmail(String email) {
         if (userDAO.existsByEmail(email)) {
-            throw HelperException.of(HelperException.ExceptionType.CONFLICT, "该邮箱已注册");
+            throw HelperException.of(ExceptionType.CONFLICT, "该邮箱已注册");
         }
     }
 
     private void checkSamePhone(String phone) {
         if (userDAO.existsByPhone(phone)) {
-            throw HelperException.of(HelperException.ExceptionType.CONFLICT, "该手机号已注册");
+            throw HelperException.of(ExceptionType.CONFLICT, "该手机号已注册");
         }
     }
 }

+ 20 - 0
src/main/java/nju/seec/helper/util/enums/ExceptionType.java

@@ -0,0 +1,20 @@
+package nju.seec.helper.util.enums;
+
+import lombok.Getter;
+import org.springframework.http.HttpStatus;
+
+/**
+ * @author cst
+ */
+
+@Getter
+public enum ExceptionType {
+    // http code
+    PARAM_ERROR(HttpStatus.BAD_REQUEST), NOT_LOGIN(HttpStatus.UNAUTHORIZED), FORBIDDEN(HttpStatus.FORBIDDEN), NOT_FOUND(HttpStatus.NOT_FOUND), CONFLICT(HttpStatus.CONFLICT), ERROR(HttpStatus.INTERNAL_SERVER_ERROR);
+
+    private HttpStatus status;
+
+    ExceptionType(HttpStatus status) {
+        this.status = status;
+    }
+}

+ 1 - 12
src/main/java/nju/seec/helper/util/exception/HelperException.java

@@ -2,6 +2,7 @@ package nju.seec.helper.util.exception;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
+import nju.seec.helper.util.enums.ExceptionType;
 
 /**
  * @author cst
@@ -12,18 +13,6 @@ public class HelperException extends RuntimeException {
     private final ExceptionType type;
     private final String msg;
 
-    @Getter
-    public enum ExceptionType {
-        // http code
-        PARAM_ERROR(400), NOT_LOGIN(401), FORBIDDEN(403), NOT_FOUND(404), CONFLICT(409), ERROR(500);
-
-        private int code;
-
-        ExceptionType(int code) {
-            this.code = code;
-        }
-    }
-
     @Override
     public String getMessage() {
         return msg;