ReplyServiceImpl.java 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package nju.seec.helper.service.impl;
  2. import lombok.extern.slf4j.Slf4j;
  3. import nju.seec.helper.dao.CommentDAO;
  4. import nju.seec.helper.dao.ReplyDAO;
  5. import nju.seec.helper.dao.SlideDAO;
  6. import nju.seec.helper.dao.UserDAO;
  7. import nju.seec.helper.dto.reply.ReplyDTO;
  8. import nju.seec.helper.aspect.auth.LoginUser;
  9. import nju.seec.helper.entity.Comment;
  10. import nju.seec.helper.entity.Reply;
  11. import nju.seec.helper.entity.Slide;
  12. import nju.seec.helper.service.MessageService;
  13. import nju.seec.helper.service.ReplyService;
  14. import nju.seec.helper.service.util.AuthUtils;
  15. import nju.seec.helper.enums.ExceptionType;
  16. import nju.seec.helper.enums.MessageType;
  17. import nju.seec.helper.exception.HelperException;
  18. import nju.seec.helper.vo.ReplyVO;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.transaction.annotation.Transactional;
  21. import java.util.Collections;
  22. /**
  23. * @author cst
  24. */
  25. @Slf4j
  26. @Service
  27. public class ReplyServiceImpl implements ReplyService {
  28. private final SlideDAO slideDAO;
  29. private final CommentDAO commentDAO;
  30. private final ReplyDAO replyDAO;
  31. private final UserDAO userDAO;
  32. private final MessageService messageService;
  33. public ReplyServiceImpl(SlideDAO slideDAO, CommentDAO commentDAO, ReplyDAO replyDAO, UserDAO userDAO, MessageService messageService) {
  34. this.slideDAO = slideDAO;
  35. this.commentDAO = commentDAO;
  36. this.replyDAO = replyDAO;
  37. this.userDAO = userDAO;
  38. this.messageService = messageService;
  39. }
  40. @Transactional(rollbackFor = Exception.class)
  41. @Override
  42. public ReplyVO createReply(LoginUser user, ReplyDTO replyDTO) {
  43. Comment comment = commentDAO.findCommentById(replyDTO.getCommentId());
  44. AuthUtils.checkDataAuth(user.getId(), slideDAO.findSlideById(comment.getSlideId()).getTeacher().getId(), "您无权回复该评论");
  45. if (comment.getReply() != null) {
  46. throw HelperException.of(ExceptionType.CONFLICT, "该评论已回复");
  47. }
  48. Reply reply = new Reply()
  49. .setComment(comment)
  50. .setTeacher(userDAO.findUserById(user.getId()))
  51. .setContent(replyDTO.getContent());
  52. comment.setReply(reply);
  53. reply.setComment(comment);
  54. reply = replyDAO.save(reply);
  55. // 增加通知
  56. if (!user.getId().equals(comment.getUser().getId())) {
  57. Slide slide = slideDAO.findSlideById(comment.getSlideId());
  58. messageService.createMessage(Collections.singleton(comment.getUser().getId()), MessageType.COMMENT_REPLY, String.format("您在 [%s] - [%s] 第%d页发表的讨论帖已收到回复", slide.getCourse().getName(), slide.getName(), comment.getPageNumber()), slide.getId());
  59. }
  60. return new ReplyVO(reply);
  61. }
  62. @Transactional(rollbackFor = Exception.class)
  63. @Override
  64. public void deleteReply(LoginUser user, Long replyId) {
  65. Reply reply = replyDAO.findReplyById(replyId);
  66. AuthUtils.checkDataAuth(user.getId(), reply.getTeacher().getId(), "您无权删除该评论");
  67. Comment comment = reply.getComment();
  68. comment.setReply(null);
  69. replyDAO.delete(reply);
  70. }
  71. }