Sfoglia il codice sorgente

feat: 增加新增评论,评论回复消息通知

ChenSiTong 6 anni fa
parent
commit
42a81d6653

+ 17 - 2
src/main/java/nju/seec/helper/service/impl/CommentServiceImpl.java

@@ -5,14 +5,19 @@ import nju.seec.helper.dao.SlideDAO;
 import nju.seec.helper.dto.CommentDTO;
 import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.entity.Comment;
-import nju.seec.helper.service.util.AuthUtils;
+import nju.seec.helper.entity.Slide;
 import nju.seec.helper.service.CommentService;
+import nju.seec.helper.service.MessageService;
+import nju.seec.helper.service.util.AuthUtils;
+import nju.seec.helper.util.enums.MessageType;
 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.Collections;
+
 /**
  * @author cst
  */
@@ -21,9 +26,12 @@ public class CommentServiceImpl implements CommentService {
     private final CommentDAO commentDAO;
     private final SlideDAO slideDAO;
 
-    public CommentServiceImpl(CommentDAO commentDAO, SlideDAO slideDAO) {
+    private final MessageService messageService;
+
+    public CommentServiceImpl(CommentDAO commentDAO, SlideDAO slideDAO, MessageService messageService) {
         this.commentDAO = commentDAO;
         this.slideDAO = slideDAO;
+        this.messageService = messageService;
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -38,6 +46,13 @@ public class CommentServiceImpl implements CommentService {
                 .setTitle(commentDTO.getTitle())
                 .setContent(commentDTO.getContent());
         comment = commentDAO.save(comment);
+
+        // 增加通知
+        Slide slide = slideDAO.findSlideById(comment.getSlideId());
+        if (!user.getId().equals(slide.getTeacherId())) {
+            messageService.createMessage(Collections.singleton(slide.getTeacherId()), MessageType.COMMENT_NEW, String.format("【%s】课程的【%s】有新评论了,请及时回复", slide.getCourseName(), slide.getName()), slide.getId());
+        }
+
         return new CommentVO(comment);
     }
 

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

@@ -84,13 +84,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(ExceptionType.FORBIDDEN, "您已选课");
+            throw HelperException.of(ExceptionType.CONFLICT, "您已选课");
         }
 
         Course course = courseDAO.findCourseById(chooseDTO.getCourseId());
 
         if (!course.getCode().equals(EncryptUtils.encode(chooseDTO.getCode()))) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, "选课码错误");
+            throw HelperException.of(ExceptionType.NOT_FOUND, "选课码错误");
         }
 
         Choose choose = new Choose()

+ 18 - 3
src/main/java/nju/seec/helper/service/impl/ReplyServiceImpl.java

@@ -8,14 +8,19 @@ import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.dto.ReplyDTO;
 import nju.seec.helper.entity.Comment;
 import nju.seec.helper.entity.Reply;
-import nju.seec.helper.service.util.AuthUtils;
+import nju.seec.helper.entity.Slide;
+import nju.seec.helper.service.MessageService;
 import nju.seec.helper.service.ReplyService;
+import nju.seec.helper.service.util.AuthUtils;
 import nju.seec.helper.util.enums.ExceptionType;
+import nju.seec.helper.util.enums.MessageType;
 import nju.seec.helper.util.exception.HelperException;
 import nju.seec.helper.vo.ReplyVO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Collections;
+
 /**
  * @author cst
  */
@@ -26,10 +31,13 @@ public class ReplyServiceImpl implements ReplyService {
     private final CommentDAO commentDAO;
     private final ReplyDAO replyDAO;
 
-    public ReplyServiceImpl(SlideDAO slideDAO, CommentDAO commentDAO, ReplyDAO replyDAO) {
+    private final MessageService messageService;
+
+    public ReplyServiceImpl(SlideDAO slideDAO, CommentDAO commentDAO, ReplyDAO replyDAO, MessageService messageService) {
         this.slideDAO = slideDAO;
         this.commentDAO = commentDAO;
         this.replyDAO = replyDAO;
+        this.messageService = messageService;
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -39,7 +47,7 @@ public class ReplyServiceImpl implements ReplyService {
         AuthUtils.checkDataAuth(user.getId(), slideDAO.findSlideById(comment.getSlideId()).getTeacherId(), "您无权回复该评论");
 
         if (comment.getReply() != null) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, "您已回复该评论");
+            throw HelperException.of(ExceptionType.CONFLICT, "您已回复该评论");
         }
         Reply reply = new Reply()
                 .setComment(comment)
@@ -47,6 +55,13 @@ public class ReplyServiceImpl implements ReplyService {
                 .setContent(replyDTO.getContent());
         reply.setComment(comment);
         reply = replyDAO.save(reply);
+
+        // 增加通知
+        if (!user.getId().equals(comment.getUserId())) {
+            Slide slide = slideDAO.findSlideById(comment.getSlideId());
+            messageService.createMessage(Collections.singleton(comment.getUserId()), MessageType.COMMENT_REPLY, String.format("您在【%s】课程的【%s】的评论被回复了,请及时查看", slide.getCourseName(), slide.getName()), slide.getId());
+        }
+
         return new ReplyVO(reply);
     }
 

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

@@ -87,7 +87,7 @@ public class SlideServiceImpl implements SlideService {
                 pages = doc.getNumberOfPages();
                 break;
             default:
-                throw HelperException.of(ExceptionType.FORBIDDEN, "不支持的文件类型");
+                throw HelperException.of(ExceptionType.PARAM_ERROR, "不支持的文件类型");
         }
 
         slide.setPages(pages);
@@ -117,11 +117,13 @@ public class SlideServiceImpl implements SlideService {
         AuthUtils.checkDataAuth(user.getId(), slide.getTeacherId(), "您无权修改该幻灯片状态");
 
         slide.setState(slideStateDTO.getState());
+        slide = slideDAO.save(slide);
+
+        // 增加通知
         if (slide.getState() == SlideState.IN_CLASS) {
             Set<Integer> studentIds = chooseDAO.findStudentIdsByCourseId(slide.getCourseId());
-            messageService.createMessage(studentIds, MessageType.SLIDE_IN_CLASS, String.format("【%s】课程的【%s】已开课,请及时学习", slide.getCourseName(), slide.getName()), slide.getId());
+            messageService.createMessage(studentIds, MessageType.SLIDE_IN_CLASS, String.format("【%s】课程的【%s】开课,请及时学习", slide.getCourseName(), slide.getName()), slide.getId());
         }
-        slideDAO.save(slide);
     }
 
     @Transactional(rollbackFor = Exception.class)

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

@@ -50,12 +50,12 @@ public class UserServiceImpl implements UserService {
 
         String email = registerDTO.getEmail();
         if (!registerDTO.getEmailCode().equals(cacheUtils.get(Consts.EMAIL_CACHE_NAME, email))) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, "邮箱或验证码错误");
+            throw HelperException.of(ExceptionType.NOT_FOUND, "邮箱或验证码错误");
         }
 
         String phone = registerDTO.getPhone();
         if (!registerDTO.getPhoneCode().equals(cacheUtils.get(Consts.PHONE_CACHE_NAME, phone))) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, "手机号或验证码错误");
+            throw HelperException.of(ExceptionType.NOT_FOUND, "手机号或验证码错误");
         }
 
         User user = new User()
@@ -90,10 +90,10 @@ public class UserServiceImpl implements UserService {
     @Override
     public void resetPasswordByEmail(ResetPasswordDTO resetPasswordDTO) {
         User user = userDAO.findByEmail(resetPasswordDTO.getUsername())
-                .orElseThrow(() -> HelperException.of(ExceptionType.FORBIDDEN, "该邮箱未在系统中注册"));
+                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "该邮箱未在系统中注册"));
 
         if (!resetPasswordDTO.getCode().equals(cacheUtils.get(Consts.EMAIL_CACHE_NAME, resetPasswordDTO.getUsername()))) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, "邮箱或验证码错误");
+            throw HelperException.of(ExceptionType.NOT_FOUND, "邮箱或验证码错误");
         }
 
         user.setPassword(EncryptUtils.encode(resetPasswordDTO.getPassword()));
@@ -107,7 +107,7 @@ public class UserServiceImpl implements UserService {
         return userDAO
                 .findByEmailAndPassword(email, EncryptUtils.encode(password))
                 .map(UserVO::new)
-                .orElseThrow(() -> HelperException.of(ExceptionType.FORBIDDEN, "邮箱或密码错误"));
+                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "邮箱或密码错误"));
     }
 
     @Transactional(readOnly = true)

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

@@ -12,10 +12,6 @@ public enum MessageType {
      * 新的评论
      */
     COMMENT_NEW,
-    /**
-     * 评论被置顶
-     */
-    COMMENT_TOP,
     /**
      * 评论被老师回复
      */