Forráskód Böngészése

feat: 增加修改课件文件

ChenSiTong 6 éve
szülő
commit
ff267e8c66
36 módosított fájl, 315 hozzáadás és 154 törlés
  1. 3 1
      src/main/java/nju/seec/helper/controller/ControllerAdvice.java
  2. 33 25
      src/main/java/nju/seec/helper/controller/SlideController.java
  3. 2 1
      src/main/java/nju/seec/helper/controller/UserController.java
  4. 5 5
      src/main/java/nju/seec/helper/dao/CourseDAO.java
  5. 20 4
      src/main/java/nju/seec/helper/dao/SlideDAO.java
  6. 5 3
      src/main/java/nju/seec/helper/dto/ChooseDTO.java
  7. 10 5
      src/main/java/nju/seec/helper/dto/CommentDTO.java
  8. 8 2
      src/main/java/nju/seec/helper/dto/CourseDTO.java
  9. 5 3
      src/main/java/nju/seec/helper/dto/LoginDTO.java
  10. 4 2
      src/main/java/nju/seec/helper/dto/MessageDTO.java
  11. 9 5
      src/main/java/nju/seec/helper/dto/ModifyCourseDTO.java
  12. 7 3
      src/main/java/nju/seec/helper/dto/ModifySlideDTO.java
  13. 5 3
      src/main/java/nju/seec/helper/dto/ModifyUserDTO.java
  14. 10 9
      src/main/java/nju/seec/helper/dto/RegisterDTO.java
  15. 7 3
      src/main/java/nju/seec/helper/dto/ReplyDTO.java
  16. 11 4
      src/main/java/nju/seec/helper/dto/ResetPasswordDTO.java
  17. 9 5
      src/main/java/nju/seec/helper/dto/SlideDTO.java
  18. 19 0
      src/main/java/nju/seec/helper/dto/SlideFileDTO.java
  19. 5 3
      src/main/java/nju/seec/helper/dto/SlideStateDTO.java
  20. 5 1
      src/main/java/nju/seec/helper/entity/Comment.java
  21. 2 0
      src/main/java/nju/seec/helper/entity/Course.java
  22. 4 0
      src/main/java/nju/seec/helper/entity/Message.java
  23. 4 0
      src/main/java/nju/seec/helper/entity/Reply.java
  24. 6 1
      src/main/java/nju/seec/helper/entity/Slide.java
  25. 4 0
      src/main/java/nju/seec/helper/entity/User.java
  26. 1 1
      src/main/java/nju/seec/helper/service/CommentService.java
  27. 18 13
      src/main/java/nju/seec/helper/service/SlideService.java
  28. 5 5
      src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java
  29. 56 32
      src/main/java/nju/seec/helper/service/impl/SlideServiceImpl.java
  30. 1 1
      src/main/java/nju/seec/helper/service/impl/UserServiceImpl.java
  31. 0 3
      src/main/java/nju/seec/helper/service/util/RefreshUtils.java
  32. 1 1
      src/main/java/nju/seec/helper/util/Consts.java
  33. 28 7
      src/main/java/nju/seec/helper/util/FileUtils.java
  34. 1 1
      src/main/java/nju/seec/helper/util/enums/MessageType.java
  35. 1 1
      src/main/java/nju/seec/helper/vo/CommentVO.java
  36. 1 1
      src/main/resources/application-dev.yml

+ 3 - 1
src/main/java/nju/seec/helper/controller/ControllerAdvice.java

@@ -9,6 +9,8 @@ import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 
+import java.util.Objects;
+
 /**
  * @author cst
  */
@@ -17,7 +19,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
 public class ControllerAdvice {
     @ExceptionHandler(MethodArgumentNotValidException.class)
     public ResponseEntity<ErrorResponse> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
-        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ErrorResponse.of("请检查您输入的数据"));
+        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ErrorResponse.of(Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage()));
     }
 
     @ExceptionHandler(HelperException.class)

+ 33 - 25
src/main/java/nju/seec/helper/controller/SlideController.java

@@ -2,22 +2,20 @@ package nju.seec.helper.controller;
 
 import nju.seec.helper.aspect.auth.Auth;
 import nju.seec.helper.controller.response.PageResponse;
-import nju.seec.helper.dto.LoginUser;
-import nju.seec.helper.dto.ModifySlideDTO;
-import nju.seec.helper.dto.SlideDTO;
-import nju.seec.helper.dto.SlideStateDTO;
+import nju.seec.helper.dto.*;
 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.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
 /**
- * 幻灯片
+ * 课件
  *
  * @author cst
  */
@@ -31,9 +29,9 @@ public class SlideController {
     }
 
     /**
-     * 教师创建幻灯片
+     * 教师创建课件
      */
-    @Auth(roles = UserType.TEACHER, message = "创建幻灯片")
+    @Auth(roles = UserType.TEACHER, message = "创建课件")
     @PostMapping
     public ResponseEntity<SlideVO> createSlide(LoginUser user,
                                                @Valid SlideDTO slideDTO) {
@@ -42,29 +40,39 @@ public class SlideController {
     }
 
     /**
-     * 教师修改幻灯片
+     * 教师修改课件
      */
-    @Auth(roles = UserType.TEACHER, message = "修改幻灯片")
+    @Auth(roles = UserType.TEACHER, message = "修改课件")
     @PutMapping
     public SlideVO modifySlide(LoginUser user,
-                               @Valid @RequestBody ModifySlideDTO modifySlideDTO) {
+                               @Validated @RequestBody ModifySlideDTO modifySlideDTO) {
         return slideService.modifySlide(user, modifySlideDTO);
     }
 
     /**
-     * 教师修改幻灯片状态
+     * 教师修改课件状态
      */
-    @Auth(roles = UserType.TEACHER, message = "修改幻灯片状态")
+    @Auth(roles = UserType.TEACHER, message = "修改课件状态")
     @PutMapping("/state")
     public void modifySlideState(LoginUser user,
-                                 @Valid @RequestBody SlideStateDTO slideStateDTO) {
+                                 @Validated @RequestBody SlideStateDTO slideStateDTO) {
         slideService.modifySlideState(user, slideStateDTO);
     }
 
     /**
-     * 教师删除幻灯片
+     * 教师修改课件状态
      */
-    @Auth(roles = UserType.TEACHER, message = "删除幻灯片")
+    @Auth(roles = UserType.TEACHER, message = "修改课件状态")
+    @PutMapping("/file")
+    public void modifySlideFile(LoginUser user,
+                                @Validated SlideFileDTO slideFileDTO) {
+        slideService.modifySlideFile(user, slideFileDTO);
+    }
+
+    /**
+     * 教师删除课件
+     */
+    @Auth(roles = UserType.TEACHER, message = "删除课件")
     @DeleteMapping("/{slideId}")
     public void removeSlide(LoginUser user,
                             @PathVariable Integer slideId) {
@@ -72,9 +80,9 @@ public class SlideController {
     }
 
     /**
-     * 教师获取幻灯片
+     * 教师获取课件
      */
-    @Auth(roles = UserType.TEACHER, message = "获取幻灯片")
+    @Auth(roles = UserType.TEACHER, message = "获取课件")
     @GetMapping("/teacher")
     public PageResponse<SlideVO> teacherGetSlides(LoginUser user,
                                                   @RequestParam(required = false, defaultValue = "") String key,
@@ -83,9 +91,9 @@ public class SlideController {
     }
 
     /**
-     * 教师基于课程获取幻灯片
+     * 教师基于课程获取课件
      */
-    @Auth(roles = UserType.TEACHER, message = "获取幻灯片")
+    @Auth(roles = UserType.TEACHER, message = "获取课件")
     @GetMapping("/teacher/course/{courseId}")
     public PageResponse<SlideVO> teacherGetSlidesByCourse(LoginUser user,
                                                           @PathVariable Integer courseId,
@@ -95,9 +103,9 @@ public class SlideController {
     }
 
     /**
-     * 学生基于课程获取幻灯片
+     * 学生基于课程获取课件
      */
-    @Auth(roles = UserType.STUDENT, message = "获取幻灯片")
+    @Auth(roles = UserType.STUDENT, message = "获取课件")
     @GetMapping("/student/course/{courseId}")
     public PageResponse<SlideVO> studentGetSlidesByCourse(LoginUser user,
                                                           @PathVariable Integer courseId,
@@ -107,9 +115,9 @@ public class SlideController {
     }
 
     /**
-     * 获取幻灯片链接
+     * 获取课件链接
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取幻灯片链接")
+    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取课件链接")
     @GetMapping("/{slideId}/url")
     public String getSlideUrl(LoginUser user,
                               @PathVariable Integer slideId) {
@@ -117,9 +125,9 @@ public class SlideController {
     }
 
     /**
-     * 获取某幻灯片
+     * 获取某课件
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取幻灯片")
+    @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/controller/UserController.java

@@ -6,6 +6,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.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpSession;
@@ -29,7 +30,7 @@ public class UserController {
      * 注册
      */
     @PostMapping("/register")
-    public UserVO register(@Valid @RequestBody RegisterDTO registerDTO) {
+    public UserVO register(@Validated @RequestBody RegisterDTO registerDTO) {
         return userService.createUser(registerDTO);
     }
 

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

@@ -39,11 +39,11 @@ public interface CourseDAO extends JpaRepository<Course, Integer> {
      */
     @Query("select case when count(c.id)>0 then true else false end " +
             "from Course c " +
-            "where c.teacherId=?1 " +
-            "and c.name=?2 " +
-            "and c.deleteAt=0 " +
-            "and c.id <> ?3 ")
-    boolean existsByTeacherIdAndName(Integer teacherId, String name, Integer courseId);
+            "where c.id<>?1 " +
+            "and c.teacherId=?2 " +
+            "and c.name=?3 " +
+            "and c.deleteAt=0 ")
+    boolean existsByTeacherIdAndName(Integer courseId, Integer teacherId, String name);
 
     /**
      * 查询老师创建的课程

+ 20 - 4
src/main/java/nju/seec/helper/dao/SlideDAO.java

@@ -27,11 +27,11 @@ public interface SlideDAO extends JpaRepository<Slide, Integer> {
      */
     default Slide findSlideById(Integer id) {
         return this.findById(id)
-                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到幻灯片"));
+                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到课件"));
     }
 
     /**
-     * 查询教师创建的幻灯片
+     * 查询教师创建的课件
      *
      * @param teacherId
      * @param key
@@ -45,7 +45,7 @@ public interface SlideDAO extends JpaRepository<Slide, Integer> {
     Page<Slide> findByTeacherIdAndNameContains(Integer teacherId, String key, Pageable pageable);
 
     /**
-     * 查询教师创建的该课程的幻灯片
+     * 查询教师创建的该课程的课件
      *
      * @param courseId
      * @param teacherId
@@ -61,7 +61,7 @@ public interface SlideDAO extends JpaRepository<Slide, Integer> {
     Page<Slide> findByCourseIdAndTeacherIdAndNameContains(Integer courseId, Integer teacherId, String key, Pageable pageable);
 
     /**
-     * 根据课程和幻灯片状态查询
+     * 根据课程和课件状态查询
      *
      * @param courseId
      * @param exclusiveStates
@@ -101,4 +101,20 @@ public interface SlideDAO extends JpaRepository<Slide, Integer> {
             "set s.courseName=?2 " +
             "where s.courseId=?1 ")
     void updateCourse(Integer courseId, String courseName);
+
+    /**
+     * 检查同名课件
+     *
+     * @param slideId
+     * @param courseId
+     * @param name
+     * @return
+     */
+    @Query("select case when count(s.id)>0 then true else false end " +
+            "from Slide s " +
+            "where s.id<>?1 " +
+            "and s.courseId=?2 " +
+            "and s.name=?3 " +
+            "and s.deleteAt=0 ")
+    boolean existsByCourseIdAndName(Integer slideId, Integer courseId, String name);
 }

+ 5 - 3
src/main/java/nju/seec/helper/dto/ChooseDTO.java

@@ -4,14 +4,16 @@ import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class ChooseDTO {
-    @NotNull
+public class ChooseDTO implements Serializable {
+    private static final long serialVersionUID = -5102844543057338777L;
+    @NotNull(message = "缺少课程ID")
     private Integer courseId;
-    @NotBlank
+    @NotBlank(message = "选课码不能为空")
     private String code;
 }

+ 10 - 5
src/main/java/nju/seec/helper/dto/CommentDTO.java

@@ -1,21 +1,26 @@
 package nju.seec.helper.dto;
 
 import lombok.Data;
+import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class CommentDTO {
-    @NotNull
+public class CommentDTO implements Serializable {
+    private static final long serialVersionUID = 5433422677493471323L;
+    @NotNull(message = "缺少课件ID")
     private Integer slideId;
-    @NotNull
+    @NotNull(message = "缺少页码")
     private Integer pageNumber;
-    @NotBlank
+    @NotBlank(message = "标题不能为空")
+    @Length(max = 50, message = "标题长度不能超过50")
     private String title;
-    @NotBlank
+    @NotBlank(message = "内容不能为空")
+    @Length(max = 250, message = "内容长度不能超过250")
     private String content;
 }

+ 8 - 2
src/main/java/nju/seec/helper/dto/CourseDTO.java

@@ -1,19 +1,25 @@
 package nju.seec.helper.dto;
 
 import lombok.Data;
+import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class CourseDTO {
-    @NotBlank
+public class CourseDTO implements Serializable {
+    private static final long serialVersionUID = -5583485560614228661L;
+    @NotBlank(message = "课程名不能为空")
+    @Length(max = 50, message = "课程名长度不能超过50")
     private String name;
     @NotNull
+    @Length(max = 200, message = "课程简介长度不能超过200")
     private String bio;
     @NotBlank
+    @Length(max = 50, message = "选课码长度不能超过50")
     private String code;
 }

+ 5 - 3
src/main/java/nju/seec/helper/dto/LoginDTO.java

@@ -3,17 +3,19 @@ package nju.seec.helper.dto;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class LoginDTO {
+public class LoginDTO implements Serializable {
+    private static final long serialVersionUID = -3359173125836901241L;
     /**
      * 邮箱或手机号
      */
-    @NotBlank
+    @NotBlank(message = "邮箱不能为空")
     private String username;
-    @NotBlank
+    @NotBlank(message = "密码不能为空")
     private String password;
 }

+ 4 - 2
src/main/java/nju/seec/helper/dto/MessageDTO.java

@@ -3,13 +3,15 @@ package nju.seec.helper.dto;
 import lombok.Data;
 
 import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
 import java.util.Set;
 
 /**
  * @author cst
  */
 @Data
-public class MessageDTO {
-    @NotEmpty
+public class MessageDTO implements Serializable {
+    private static final long serialVersionUID = -4467691441630551772L;
+    @NotEmpty(message = "消息列表不能为空")
     private Set<Integer> ids;
 }

+ 9 - 5
src/main/java/nju/seec/helper/dto/ModifyCourseDTO.java

@@ -1,23 +1,27 @@
 package nju.seec.helper.dto;
 
 import lombok.Data;
+import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class ModifyCourseDTO {
-    @NotNull
+public class ModifyCourseDTO implements Serializable {
+    private static final long serialVersionUID = -6732295262720425577L;
+    @NotNull(message = "缺少课程ID")
     private Integer id;
-    @NotBlank
+    @NotBlank(message = "课程名不能为空")
+    @Length(max = 50, message = "课程名长度不能超过50")
     private String name;
     @NotNull
+    @Length(max = 200, message = "课程简介长度不能超过200")
     private String bio;
     @NotBlank
+    @Length(max = 50, message = "选课码长度不能超过50")
     private String code;
-
-    private String cover;
 }

+ 7 - 3
src/main/java/nju/seec/helper/dto/ModifySlideDTO.java

@@ -1,17 +1,21 @@
 package nju.seec.helper.dto;
 
 import lombok.Data;
+import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class ModifySlideDTO {
-    @NotNull
+public class ModifySlideDTO implements Serializable {
+    private static final long serialVersionUID = 7417738035207797449L;
+    @NotNull(message = "缺少课件ID")
     private Integer id;
-    @NotBlank
+    @NotBlank(message = "课件名不能为空")
+    @Length(max = 50, message = "课件名长度不能超过50")
     private String name;
 }

+ 5 - 3
src/main/java/nju/seec/helper/dto/ModifyUserDTO.java

@@ -4,13 +4,15 @@ import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class ModifyUserDTO {
-    @NotBlank
-    @Length(min = 2)
+public class ModifyUserDTO implements Serializable {
+    private static final long serialVersionUID = 445794055111374104L;
+    @NotBlank(message = "姓名不能为空")
+    @Length(min = 2, max = 50, message = "姓名长度必须在2到50之间")
     private String name;
 }

+ 10 - 9
src/main/java/nju/seec/helper/dto/RegisterDTO.java

@@ -6,28 +6,29 @@ import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.Email;
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class RegisterDTO {
+public class RegisterDTO implements Serializable {
+    private static final long serialVersionUID = -5962331511813309322L;
     @NotBlank(message = "姓名不能为空")
-    @Length(min = 2)
+    @Length(min = 2, max = 50, message = "姓名长度必须在2到50之间")
     private String name;
-    @Email(message = "邮箱格式错误")
-    @Pattern(regexp = Consts.SCHOOL_EMAIL_REGEX, message = "该邮箱不是南大校邮")
+    @NotBlank(message = "邮箱不能为空")
+    @Email(regexp = Consts.SCHOOL_EMAIL_REGEX, message = "该邮箱不是南大校邮")
     private String email;
-    @NotBlank(message = "验证码不能为空")
+    @NotBlank(message = "邮箱验证码不能为空")
     private String emailCode;
-    @NotBlank
+    @NotBlank(message = "手机号不能为空")
     @Pattern(regexp = Consts.PHONE_REGEX, message = "手机号格式错误")
     private String phone;
-    @NotNull
+    @NotBlank(message = "手机号验证码不能为空")
     private String phoneCode;
-
     @NotBlank(message = "密码不能为空")
+    @Length(max = 50, message = "密码长度不能超过50位")
     private String password;
 }

+ 7 - 3
src/main/java/nju/seec/helper/dto/ReplyDTO.java

@@ -1,17 +1,21 @@
 package nju.seec.helper.dto;
 
 import lombok.Data;
+import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class ReplyDTO {
-    @NotNull
+public class ReplyDTO implements Serializable {
+    private static final long serialVersionUID = -8012723244114871873L;
+    @NotNull(message = "缺少评论ID")
     private Integer commentId;
-    @NotBlank
+    @NotBlank(message = "内容不能为空")
+    @Length(max = 250, message = "内容长度不能超过250")
     private String content;
 }

+ 11 - 4
src/main/java/nju/seec/helper/dto/ResetPasswordDTO.java

@@ -1,27 +1,34 @@
 package nju.seec.helper.dto;
 
 import lombok.Data;
+import nju.seec.helper.util.Consts;
+import org.hibernate.validator.constraints.Length;
 
+import javax.validation.constraints.Email;
 import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class ResetPasswordDTO {
+public class ResetPasswordDTO implements Serializable {
+    private static final long serialVersionUID = 3884011149489695206L;
     /**
      * 邮箱或手机号
      */
-    @NotBlank
+    @NotBlank(message = "邮箱不能为空")
+    @Email(regexp = Consts.SCHOOL_EMAIL_REGEX, message = "该邮箱不是南大校邮")
     private String username;
     /**
      * 验证码
      */
-    @NotBlank
+    @NotBlank(message = "邮箱验证码不能为空")
     private String code;
     /**
      * 密码
      */
-    @NotBlank
+    @NotBlank(message = "密码不能为空")
+    @Length(max = 50, message = "密码长度不能超过50位")
     private String password;
 }

+ 9 - 5
src/main/java/nju/seec/helper/dto/SlideDTO.java

@@ -2,22 +2,26 @@ package nju.seec.helper.dto;
 
 import lombok.Data;
 import nju.seec.helper.util.enums.SlideState;
+import org.hibernate.validator.constraints.Length;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class SlideDTO {
-    @NotNull
+public class SlideDTO implements Serializable {
+    private static final long serialVersionUID = 1346490046140163371L;
+    @NotNull(message = "缺少课程ID")
     private Integer courseId;
-    @NotBlank
+    @NotBlank(message = "课件名不能为空")
+    @Length(max = 50, message = "课件名长度不能超过50")
     private String name;
-    @NotNull
+    @NotNull(message = "缺少状态")
     private SlideState state;
-    @NotNull
+    @NotNull(message = "缺少文件")
     private MultipartFile file;
 }

+ 19 - 0
src/main/java/nju/seec/helper/dto/SlideFileDTO.java

@@ -0,0 +1,19 @@
+package nju.seec.helper.dto;
+
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author cst
+ */
+@Data
+public class SlideFileDTO implements Serializable {
+    private static final long serialVersionUID = -3477483332353577715L;
+    @NotNull(message = "缺少课件ID")
+    private Integer id;
+    @NotNull(message = "缺少文件")
+    private MultipartFile file;
+}

+ 5 - 3
src/main/java/nju/seec/helper/dto/SlideStateDTO.java

@@ -4,14 +4,16 @@ import lombok.Data;
 import nju.seec.helper.util.enums.SlideState;
 
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 
 /**
  * @author cst
  */
 @Data
-public class SlideStateDTO {
-    @NotNull
+public class SlideStateDTO implements Serializable {
+    private static final long serialVersionUID = 8163158733090757629L;
+    @NotNull(message = "缺少课件ID")
     private Integer id;
-    @NotNull
+    @NotNull(message = "缺少状态")
     private SlideState state;
 }

+ 5 - 1
src/main/java/nju/seec/helper/entity/Comment.java

@@ -4,6 +4,8 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 import nju.seec.helper.util.enums.UserType;
 import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
 
 import javax.persistence.*;
 import java.time.LocalDateTime;
@@ -15,6 +17,8 @@ import java.time.LocalDateTime;
 @Accessors(chain = true)
 @Entity
 @Table(name = "comment")
+@DynamicUpdate
+@DynamicInsert
 public class Comment {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -45,7 +49,7 @@ public class Comment {
     @Column(name = "user_type", nullable = false)
     private UserType userType;
 
-    @Column(name = "create_at", updatable = false)
+    @Column(name = "create_at", updatable = false, nullable = false)
     @CreationTimestamp
     private LocalDateTime createAt;
 

+ 2 - 0
src/main/java/nju/seec/helper/entity/Course.java

@@ -3,6 +3,7 @@ package nju.seec.helper.entity;
 import lombok.Data;
 import lombok.experimental.Accessors;
 import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
 
 import javax.persistence.*;
@@ -17,6 +18,7 @@ import java.time.LocalDateTime;
 @Table(name = "course",
         uniqueConstraints = @UniqueConstraint(name = "课程名唯一约束", columnNames = {"teacher_id", "name", "delete_at"}))
 @DynamicUpdate
+@DynamicInsert
 public class Course {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

+ 4 - 0
src/main/java/nju/seec/helper/entity/Message.java

@@ -4,6 +4,8 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 import nju.seec.helper.util.enums.MessageType;
 import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
 
 import javax.persistence.*;
 import java.time.LocalDateTime;
@@ -16,6 +18,8 @@ import java.time.LocalDateTime;
 @Entity
 @Table(name = "message")
 @Inheritance(strategy = InheritanceType.JOINED)
+@DynamicUpdate
+@DynamicInsert
 public class Message {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

+ 4 - 0
src/main/java/nju/seec/helper/entity/Reply.java

@@ -3,6 +3,8 @@ package nju.seec.helper.entity;
 import lombok.Data;
 import lombok.experimental.Accessors;
 import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
 
 import javax.persistence.*;
 import java.time.LocalDateTime;
@@ -14,6 +16,8 @@ import java.time.LocalDateTime;
 @Accessors(chain = true)
 @Entity
 @Table(name = "reply")
+@DynamicUpdate
+@DynamicInsert
 public class Reply {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

+ 6 - 1
src/main/java/nju/seec/helper/entity/Slide.java

@@ -4,6 +4,8 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 import nju.seec.helper.util.enums.SlideState;
 import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
 import org.hibernate.annotations.UpdateTimestamp;
 
 import javax.persistence.*;
@@ -15,7 +17,10 @@ import java.time.LocalDateTime;
 @Data
 @Accessors(chain = true)
 @Entity
-@Table(name = "slide")
+@Table(name = "slide",
+        uniqueConstraints = @UniqueConstraint(name = "课件名唯一约束", columnNames = {"course_id", "name", "delete_at"}))
+@DynamicUpdate
+@DynamicInsert
 public class Slide {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

+ 4 - 0
src/main/java/nju/seec/helper/entity/User.java

@@ -4,6 +4,8 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 import nju.seec.helper.util.enums.UserType;
 import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
 
 import javax.persistence.*;
 import java.time.LocalDateTime;
@@ -15,6 +17,8 @@ import java.time.LocalDateTime;
 @Accessors(chain = true)
 @Entity
 @Table(name = "user")
+@DynamicUpdate
+@DynamicInsert
 public class User {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

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

@@ -44,7 +44,7 @@ public interface CommentService {
     void unTopComment(LoginUser user, Integer commentId);
 
     /**
-     * 基于幻灯片和页码数获取评论
+     * 基于课件和页码数获取评论
      *
      * @param slideId
      * @param pageNumber

+ 18 - 13
src/main/java/nju/seec/helper/service/SlideService.java

@@ -1,9 +1,6 @@
 package nju.seec.helper.service;
 
-import nju.seec.helper.dto.LoginUser;
-import nju.seec.helper.dto.ModifySlideDTO;
-import nju.seec.helper.dto.SlideDTO;
-import nju.seec.helper.dto.SlideStateDTO;
+import nju.seec.helper.dto.*;
 import nju.seec.helper.vo.SlideVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -13,7 +10,7 @@ import org.springframework.data.domain.Pageable;
  */
 public interface SlideService {
     /**
-     * 创建幻灯片
+     * 创建课件
      *
      * @param teacher
      * @param slideDTO
@@ -22,7 +19,7 @@ public interface SlideService {
     SlideVO createSlide(LoginUser teacher, SlideDTO slideDTO);
 
     /**
-     * 修改幻灯片
+     * 修改课件
      *
      * @param user
      * @param modifySlideDTO
@@ -31,7 +28,7 @@ public interface SlideService {
     SlideVO modifySlide(LoginUser user, ModifySlideDTO modifySlideDTO);
 
     /**
-     * 修改幻灯片状态
+     * 修改课件状态
      *
      * @param user
      * @param slideStateDTO
@@ -39,7 +36,15 @@ public interface SlideService {
     void modifySlideState(LoginUser user, SlideStateDTO slideStateDTO);
 
     /**
-     * 删除幻灯片(伪删除)
+     * 修改课件文件
+     *
+     * @param user
+     * @param slideFileDTO
+     */
+    void modifySlideFile(LoginUser user, SlideFileDTO slideFileDTO);
+
+    /**
+     * 删除课件(伪删除)
      *
      * @param user
      * @param slideId
@@ -47,7 +52,7 @@ public interface SlideService {
     void removeSlide(LoginUser user, Integer slideId);
 
     /**
-     * 教师获取幻灯片
+     * 教师获取课件
      *
      * @param teacher
      * @param key
@@ -57,7 +62,7 @@ public interface SlideService {
     Page<SlideVO> teacherGetSlides(LoginUser teacher, String key, Pageable pageable);
 
     /**
-     * 教师基于课程获取幻灯片
+     * 教师基于课程获取课件
      *
      * @param teacher
      * @param courseId
@@ -68,7 +73,7 @@ public interface SlideService {
     Page<SlideVO> teacherGetSlidesByCourse(LoginUser teacher, Integer courseId, String key, Pageable pageable);
 
     /**
-     * 教师获取幻灯片
+     * 教师获取课件
      *
      * @param student
      * @param courseId
@@ -79,7 +84,7 @@ public interface SlideService {
     Page<SlideVO> studentGetSlidesByCourse(LoginUser student, Integer courseId, String key, Pageable pageable);
 
     /**
-     * 获取幻灯片链接
+     * 获取课件链接
      *
      * @param user
      * @param slideId
@@ -88,7 +93,7 @@ public interface SlideService {
     String getSlideUrl(LoginUser user, Integer slideId);
 
     /**
-     * 获取某幻灯片
+     * 获取某课件
      *
      * @param user
      * @param slideId

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

@@ -8,8 +8,8 @@ import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.dto.ModifyCourseDTO;
 import nju.seec.helper.entity.Choose;
 import nju.seec.helper.entity.Course;
-import nju.seec.helper.service.util.AuthUtils;
 import nju.seec.helper.service.CourseService;
+import nju.seec.helper.service.util.AuthUtils;
 import nju.seec.helper.service.util.RefreshUtils;
 import nju.seec.helper.util.EncryptUtils;
 import nju.seec.helper.util.enums.ExceptionType;
@@ -40,7 +40,7 @@ public class CourseServiceImpl implements CourseService {
     @Override
     public CourseVO createCourse(LoginUser teacher, CourseDTO courseDTO) {
         // 检查
-        checkSameCourseName(teacher.getId(), courseDTO.getName(), 0);
+        checkSameCourseName(0, teacher.getId(), courseDTO.getName());
 
         Course course = new Course()
                 .setTeacherId(teacher.getId())
@@ -59,7 +59,7 @@ public class CourseServiceImpl implements CourseService {
 
         // 检查
         AuthUtils.checkDataAuth(user.getId(), course.getTeacherId(), "您无权修改该课程");
-        checkSameCourseName(user.getId(), modifyCourseDTO.getName(), course.getId());
+        checkSameCourseName(course.getId(), user.getId(), modifyCourseDTO.getName());
 
         course.setName(modifyCourseDTO.getName())
                 .setBio(modifyCourseDTO.getBio())
@@ -148,8 +148,8 @@ public class CourseServiceImpl implements CourseService {
     /**
      * 检查同名课程
      */
-    private void checkSameCourseName(Integer teacherId, String name, Integer courseId) {
-        if (courseDAO.existsByTeacherIdAndName(teacherId, name, courseId)) {
+    private void checkSameCourseName(Integer courseId, Integer teacherId, String name) {
+        if (courseDAO.existsByTeacherIdAndName(courseId, teacherId, name)) {
             throw HelperException.of(ExceptionType.CONFLICT, "该课程名已使用");
         }
     }

+ 56 - 32
src/main/java/nju/seec/helper/service/impl/SlideServiceImpl.java

@@ -1,15 +1,11 @@
 package nju.seec.helper.service.impl;
 
 import com.google.common.collect.ImmutableSet;
-import lombok.Cleanup;
 import lombok.SneakyThrows;
 import nju.seec.helper.dao.ChooseDAO;
 import nju.seec.helper.dao.CourseDAO;
 import nju.seec.helper.dao.SlideDAO;
-import nju.seec.helper.dto.LoginUser;
-import nju.seec.helper.dto.ModifySlideDTO;
-import nju.seec.helper.dto.SlideDTO;
-import nju.seec.helper.dto.SlideStateDTO;
+import nju.seec.helper.dto.*;
 import nju.seec.helper.entity.Course;
 import nju.seec.helper.entity.Slide;
 import nju.seec.helper.service.MessageService;
@@ -30,8 +26,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.InputStream;
-import java.time.LocalDateTime;
+import java.io.File;
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -66,7 +61,9 @@ public class SlideServiceImpl implements SlideService {
     @Override
     public SlideVO createSlide(LoginUser teacher, SlideDTO slideDTO) {
         Course course = courseDAO.findCourseById(slideDTO.getCourseId());
-        AuthUtils.checkDataAuth(teacher.getId(), course.getTeacherId(), "您无权创建该课程的幻灯片");
+        AuthUtils.checkDataAuth(teacher.getId(), course.getTeacherId(), "您无权创建该课程的课件");
+
+        checkSameName(0, slideDTO.getCourseId(), slideDTO.getName());
 
         Slide slide = new Slide()
                 .setCourseId(slideDTO.getCourseId())
@@ -76,25 +73,7 @@ public class SlideServiceImpl implements SlideService {
                 .setName(slideDTO.getName())
                 .setState(slideDTO.getState());
 
-        // 解析文件页数
-        MultipartFile file = slideDTO.getFile();
-        int pages;
-        switch (Objects.requireNonNull(file.getContentType())) {
-            // pdf
-            case "application/pdf":
-                @Cleanup InputStream fileInputStream = file.getInputStream();
-                PDDocument doc = PDDocument.load(fileInputStream);
-                pages = doc.getNumberOfPages();
-                break;
-            default:
-                throw HelperException.of(ExceptionType.PARAM_ERROR, "不支持的文件类型");
-        }
-
-        slide.setPages(pages);
-
-        // 上传文件
-        String objectName = fileUtils.upload(LocalDateTime.now().toString() + "-" + file.getOriginalFilename(), file.getInputStream());
-        slide.setObjectName(objectName);
+        handleFile(slide, slideDTO.getFile());
 
         return new SlideVO(slideDAO.save(slide));
     }
@@ -103,8 +82,9 @@ public class SlideServiceImpl implements SlideService {
     @Override
     public SlideVO modifySlide(LoginUser user, ModifySlideDTO modifySlideDTO) {
         Slide slide = slideDAO.findSlideById(modifySlideDTO.getId());
-        AuthUtils.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权修改该幻灯片");
+        AuthUtils.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权修改该课件");
 
+        checkSameName(slide.getId(), slide.getCourseId(), modifySlideDTO.getName());
         slide.setName(modifySlideDTO.getName());
         slide = slideDAO.save(slide);
         return new SlideVO(slide);
@@ -114,7 +94,7 @@ public class SlideServiceImpl implements SlideService {
     @Override
     public void modifySlideState(LoginUser user, SlideStateDTO slideStateDTO) {
         Slide slide = slideDAO.findSlideById(slideStateDTO.getId());
-        AuthUtils.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权修改该幻灯片状态");
+        AuthUtils.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权修改该课件状态");
 
         slide.setState(slideStateDTO.getState());
         slide = slideDAO.save(slide);
@@ -126,11 +106,46 @@ public class SlideServiceImpl implements SlideService {
         }
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void modifySlideFile(LoginUser user, SlideFileDTO slideFileDTO) {
+        Slide slide = slideDAO.findSlideById(slideFileDTO.getId());
+        AuthUtils.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权修改该课件文件");
+
+        if (slide.getState() != SlideState.DRAFT) {
+            throw HelperException.of(ExceptionType.FORBIDDEN, "该课件非草稿状态,无法修改其文件");
+        }
+
+        handleFile(slide, slideFileDTO.getFile());
+
+        slideDAO.save(slide);
+    }
+
+    @SneakyThrows
+    private void handleFile(Slide slide, MultipartFile file) {
+        switch (Objects.requireNonNull(file.getContentType())) {
+            case "application/pdf":
+                // 解析页数
+                PDDocument doc = PDDocument.load(file.getInputStream());
+                int pages = doc.getNumberOfPages();
+                slide.setPages(pages);
+
+                // 上传文件
+                String objectName = slide.getCourseId() + File.separator + slide.getName() + ".pdf";
+                fileUtils.upload(objectName, file.getInputStream());
+                slide.setObjectName(objectName);
+
+                break;
+            default:
+                throw HelperException.of(ExceptionType.PARAM_ERROR, "不支持的文件类型");
+        }
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void removeSlide(LoginUser user, Integer slideId) {
         Slide slide = slideDAO.findSlideById(slideId);
-        AuthUtils.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权删除该幻灯片");
+        AuthUtils.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权删除该课件");
 
         slide.setDeleteAt(System.currentTimeMillis());
         slideDAO.save(slide);
@@ -152,7 +167,7 @@ public class SlideServiceImpl implements SlideService {
     @Override
     public Page<SlideVO> studentGetSlidesByCourse(LoginUser student, Integer courseId, String key, Pageable pageable) {
         if (!chooseDAO.existsByStudentIdAndCourseId(student.getId(), courseId)) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, "你无权查看该课程下的幻灯片");
+            throw HelperException.of(ExceptionType.FORBIDDEN, "你无权查看该课程下的课件");
         }
 
         return slideDAO.findByCourseIdAndStateNotInAndNameContains(courseId, ImmutableSet.of(SlideState.DRAFT), key, pageable).map(SlideVO::new);
@@ -181,8 +196,17 @@ public class SlideServiceImpl implements SlideService {
         return new SlideVO(slide);
     }
 
+    /**
+     * 检查同名课件
+     */
+    private void checkSameName(Integer slideId, Integer courseId, String name) {
+        if (slideDAO.existsByCourseIdAndName(slideId, courseId, name)) {
+            throw HelperException.of(ExceptionType.CONFLICT, "该课件名已使用");
+        }
+    }
+
     private void checkDataAccessAuth(LoginUser user, Slide slide) {
-        HelperException forbiddenEx = HelperException.of(ExceptionType.FORBIDDEN, "您无权访问该幻灯片");
+        HelperException forbiddenEx = HelperException.of(ExceptionType.FORBIDDEN, "您无权访问该课件");
 
         switch (user.getType()) {
             case TEACHER:

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

@@ -7,9 +7,9 @@ import nju.seec.helper.dto.ModifyUserDTO;
 import nju.seec.helper.dto.RegisterDTO;
 import nju.seec.helper.dto.ResetPasswordDTO;
 import nju.seec.helper.entity.User;
+import nju.seec.helper.service.UserService;
 import nju.seec.helper.service.util.AuthUtils;
 import nju.seec.helper.service.util.RefreshUtils;
-import nju.seec.helper.service.UserService;
 import nju.seec.helper.util.CacheUtils;
 import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.EncryptUtils;

+ 0 - 3
src/main/java/nju/seec/helper/service/util/RefreshUtils.java

@@ -5,7 +5,6 @@ import nju.seec.helper.dao.CourseDAO;
 import nju.seec.helper.dao.SlideDAO;
 import nju.seec.helper.entity.Course;
 import nju.seec.helper.entity.User;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 /**
@@ -23,14 +22,12 @@ public class RefreshUtils {
         this.commentDAO = commentDAO;
     }
 
-    @Async
     public void refreshUser(User user) {
         courseDAO.updateUser(user.getId(), user.getName());
         slideDAO.updateUser(user.getId(), user.getName());
         commentDAO.updateUser(user.getId(), user.getName(), user.getType());
     }
 
-    @Async
     public void refreshCourse(Course course) {
         slideDAO.updateCourse(course.getId(), course.getName());
     }

+ 1 - 1
src/main/java/nju/seec/helper/util/Consts.java

@@ -7,7 +7,7 @@ public class Consts {
     public static final String SESSION_USER_NAME = "helper_user";
 
     public static final String SCHOOL_EMAIL_REGEX = ".+@(nju.edu.cn|smail.nju.edu.cn)";
-    public static final String PHONE_REGEX = "1[3|4|5|6|7|8|9]\\d{9}";
+    public static final String PHONE_REGEX = "1[3-9]\\d{9}";
 
     public static final String EMAIL_CACHE_NAME = "email";
     public static final String PHONE_CACHE_NAME = "phone";

+ 28 - 7
src/main/java/nju/seec/helper/util/FileUtils.java

@@ -1,9 +1,14 @@
 package nju.seec.helper.util;
 
+import com.aliyun.oss.ClientException;
 import com.aliyun.oss.OSS;
 import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.OSSException;
 import com.aliyun.oss.model.PutObjectRequest;
+import lombok.extern.slf4j.Slf4j;
 import nju.seec.helper.config.properties.OssProperties;
+import nju.seec.helper.util.enums.ExceptionType;
+import nju.seec.helper.util.exception.HelperException;
 import org.springframework.stereotype.Component;
 
 import java.io.InputStream;
@@ -15,6 +20,7 @@ import java.util.Date;
  *
  * @author cst
  */
+@Slf4j
 @Component
 public class FileUtils {
     private final OssProperties ossProperties;
@@ -23,19 +29,34 @@ public class FileUtils {
         this.ossProperties = ossProperties;
     }
 
-    public String upload(String objectName, InputStream inputStream) {
+    public void upload(String objectName, InputStream inputStream) {
         OSS ossClient = new OSSClientBuilder().build(ossProperties.getEndpoint(), ossProperties.getAccessKeyId(), ossProperties.getAccessKeySecret());
         PutObjectRequest putObjectRequest = new PutObjectRequest(ossProperties.getBucketName(), objectName, inputStream);
-        ossClient.putObject(putObjectRequest);
-        ossClient.shutdown();
-        return objectName;
+        try {
+            ossClient.putObject(putObjectRequest);
+        } catch (OSSException | ClientException e) {
+            log.error(e.getMessage());
+            throw HelperException.of(ExceptionType.ERROR, "文件上传失败");
+        } finally {
+            if (ossClient != null) {
+                ossClient.shutdown();
+            }
+        }
     }
 
     public String getUrl(String objectName, long seconds) {
         OSS ossClient = new OSSClientBuilder().build(ossProperties.getEndpoint(), ossProperties.getAccessKeyId(), ossProperties.getAccessKeySecret());
         Date expiration = new Date(System.currentTimeMillis() + seconds * 1000);
-        URL url = ossClient.generatePresignedUrl(ossProperties.getBucketName(), objectName, expiration);
-        ossClient.shutdown();
-        return url.toString();
+        try {
+            URL url = ossClient.generatePresignedUrl(ossProperties.getBucketName(), objectName, expiration);
+            return url.toString();
+        } catch (OSSException | ClientException e) {
+            log.error(e.getMessage());
+            throw HelperException.of(ExceptionType.ERROR, "获取文件链接失败");
+        } finally {
+            if (ossClient != null) {
+                ossClient.shutdown();
+            }
+        }
     }
 }

+ 1 - 1
src/main/java/nju/seec/helper/util/enums/MessageType.java

@@ -5,7 +5,7 @@ package nju.seec.helper.util.enums;
  */
 public enum MessageType {
     /**
-     * 幻灯片开课
+     * 课件开课
      */
     SLIDE_IN_CLASS,
     /**

+ 1 - 1
src/main/java/nju/seec/helper/vo/CommentVO.java

@@ -14,7 +14,7 @@ import java.time.LocalDateTime;
 public class CommentVO {
     private Integer id;
     /**
-     * 幻灯片ID
+     * 课件ID
      */
     private Integer slideId;
     /**

+ 1 - 1
src/main/resources/application-dev.yml

@@ -10,7 +10,7 @@ spring:
       ddl-auto: update
     database: mysql
     database-platform: org.hibernate.dialect.MySQL8Dialect
-    show-sql: true
+    show-sql: false
   http:
     encoding:
       force: true