이전 포스트에서 Emergency 알림을 구현했습니다.
다시 한번 간단히 설명하자면, Emergency 알림은 피보호자의 주변 멤버들에게 알림을 전송하는 기능입니다.
즉, 이 알림은 피보호자의 안전이 확인되지 않을 때 사용하는 기능입니다.
알림을 받은 멤버는 자신의 주변에 도움이 필요한 사람이 있다는 것을 알 수 있습니다.
만약 그 사람을 발견한다면 해당 인물의 보호자에게 제보를 할 방법이 있어야 합니다.
그럴 때 Emergency 알림에 댓글을 달아 제보할 수 있도록 기능을 구현했습니다.
가독성을 위해 일부 코드를 수정, 삭제했습니다. 코드 전문은 아래의 깃허브에서 확인하실 수 있습니다. (특히 optional null check 등의 예외 처리 + 알림을 저장하는 메서드)
public class Comment { @Id private Long commentId; @ManyToOne private Emergency emergency; @ManyToOne private Member commentator; private String comment; private LocalDateTime createdAt; }
@PostMapping("/write-comment") public ResponseEntity<Map<String, String>> writeComment(@RequestBody CommentRequestDTO commentRequestDTO) { HashMap<String, String> result = new HashMap<>(); if (! emergencyService.writeComment(commentRequestDTO)) { return addErrorStatus(result); } return addOkStatus(result); } @PostMapping("/delete-comment") public ResponseEntity<Map<String, String>> deleteComment(@RequestBody CommentIdDTO dto) { HashMap<String, String> result = new HashMap<>(); if(! emergencyService.deleteComment(dto.getCommentId())){ return addErrorStatus(result); } return addOkStatus(result); } @Transactional @PostMapping("/emergency-detail") public ResponseEntity<Map<String, CommentResponseDTO>> emergencyDetail(@RequestBody EmergencyIdDTO dto) { HashMap<String, CommentResponseDTO> result = new HashMap<>(); Emergency emergency = emergencyService.getEmergencyDetail(dto.getEmergencyId()); List<Comment> commentList = emergencyService.getCommentOfEmergency(dto.getEmergencyId()); for (Comment comment : commentList) { String format = comment.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); result.put(comment.getCommentId().toString(), CommentResponseDTO.builder() .commentator(comment.getCommentator().getMemberId()) .commentDate(format) .content(comment.getComment()) .build() ); } return ResponseEntity.ok().body(result); }
@Transactional public boolean writeComment(CommentRequestDTO commentRequestDTO) { Optional<Member> foundMember = memberRepository.findById(commentRequestDTO.getCommentatorId()); Optional<Emergency> foundEmergency = emergencyRepository.findById(Long.valueOf(commentRequestDTO.getEmergencyId())); Comment comment = Comment.builder() .commentator(foundMember.get()) .emergency(foundEmergency.get()) .comment(commentRequestDTO.getCommentContent()) .build(); commentRepository.save(comment); foundEmergency.get().commentList.add(comment); return true; } @Transactional public Emergency getEmergencyDetail(String emergencyId) { Optional<Emergency> foundEmergency = emergencyRepository.findById(Long.valueOf(emergencyId)); return foundEmergency.orElse(null); } @Transactional public List<Comment> getCommentOfEmergency(String emergencyId) { Emergency emergencyDetail = getEmergencyDetail(emergencyId); return commentRepository.findAllByEmergency(emergencyDetail); } @Transactional public boolean deleteComment(String commentId) { Optional<Comment> foundComment = commentRepository.findById(Long.valueOf(commentId)); commentRepository.delete(foundComment.get()); return true; }
Emergency에 댓글을 달아서 제보할 수 있는 기능을 구현했습니다.
크게 어려움 없이 구현하다보니 포스트의 대부분을 코드로 채우게 되었습니다.