diff --git a/src/main/java/sopt/univoice/domain/notice/repository/NoticeLikeRepository.java b/src/main/java/sopt/univoice/domain/notice/repository/NoticeLikeRepository.java index 56e9160..38d9f56 100644 --- a/src/main/java/sopt/univoice/domain/notice/repository/NoticeLikeRepository.java +++ b/src/main/java/sopt/univoice/domain/notice/repository/NoticeLikeRepository.java @@ -9,4 +9,6 @@ public interface NoticeLikeRepository extends JpaRepository { Optional findByNoticeAndMember(Notice notice, Member member); + + boolean existsByNoticeAndMember(Notice notice, Member member); } diff --git a/src/main/java/sopt/univoice/domain/notice/service/NoticeService.java b/src/main/java/sopt/univoice/domain/notice/service/NoticeService.java index b3ddcc6..f7d34df 100644 --- a/src/main/java/sopt/univoice/domain/notice/service/NoticeService.java +++ b/src/main/java/sopt/univoice/domain/notice/service/NoticeService.java @@ -129,6 +129,12 @@ public void likeNotice(Long noticeId) { Notice notice = noticeRepository.findById(noticeId) .orElseThrow(() -> new RuntimeException("공지사항이 존재하지 않습니다.")); + // 이미 좋아요를 누른 것인지 확인 + boolean alreadyLiked = noticeLikeRepository.existsByNoticeAndMember(notice, member); + if (alreadyLiked) { + throw new BusinessException(ErrorMessage.ALREADY_LIKED); + } + // noticeLike를 1 증가시킵니다. notice.setNoticeLike(notice.getNoticeLike() + 1); noticeRepository.save(notice); diff --git a/src/main/java/sopt/univoice/infra/common/exception/message/ErrorMessage.java b/src/main/java/sopt/univoice/infra/common/exception/message/ErrorMessage.java index f719d16..d9581d2 100644 --- a/src/main/java/sopt/univoice/infra/common/exception/message/ErrorMessage.java +++ b/src/main/java/sopt/univoice/infra/common/exception/message/ErrorMessage.java @@ -13,6 +13,7 @@ public enum ErrorMessage { JWT_UNAUTHORIZED_EXCEPTION(HttpStatus.UNAUTHORIZED.value(), "사용자의 로그인 검증을 실패했습니다."), APPROVEADMIN_UNAUTHORIZED_EXCEPTION(HttpStatus.UNAUTHORIZED.value(), "승인된 관리자의 로그인 검증을 실패했습니다."), ALREADY_SAVED(HttpStatus.CONFLICT.value(), "이미 저장한 공지입니다."), + ALREADY_LIKED(HttpStatus.CONFLICT.value(), "이미 좋아요한 공지입니다."), ; private final int status; private final String message;