[TIL] 230724 좋아요 기능 구현하기

CountryGirl·2023년 7월 24일
0

TIL

목록 보기
32/80

📌 문제점 & 시도 & 해결

getNewHeart 메서드를 처음엔 이렇게 구현하였다.

public NewsHeartResponseDto getNewsHeart(Long newsId, String userEmail) {
	User loginUser = userRepository.findByUserEmail(userEmail).orElseThrow(
			() -> new IllegalArgumentException("존재하지 않는 사용자입니다."));
	News news = newsRepository.findById(newsId).orElseThrow(
			() -> new IllegalArgumentException("존재하지 않는 뉴스입니다.")
	);

    NewsHeart existHeart = newsHeartRepository.findByHeartUserAndHeartNews(loginUser, news);

    if(existHeart == null) {
        NewsHeart newsHeart = new NewsHeart(loginUser, news);
        news.increaseHeartCount();
        newsHeartRepository.save(newsHeart);
    } else {
        NewsHeart newsHeart = new NewsHeart(loginUser, news);
        news.decreaseHeartCount();
        newsHeartRepository.delete(newsHeart);
    }
    return new NewsHeartResponseDto(news.getHeartCount());
}

Postman으로 테스트를 해보았다.
내가 의도한 것은 계속 요청을 보내면 0 ➡️ 1 ➡️ 0 ➡️ 1 ➡️ 0 ...
이렇게 좋아요 count가 하는 것이다.
좋아요를 눌렀다가 취소했다가 눌렀다가 취소했다가 이렇게 된다면 0과 1이 반복되어야 한다.
하지만 테스트 결과 0 ➡️ 1 ➡️ 0 ➡️ -1 ➡️ -2 ➡️ -3 ...

이렇게 되었다..

내 코드를 다시 자세히 살펴보았다....
어디서 잘못되었는가...
else 구문에서는 if 구문에서 save()delete() 로만 바꾸면 될 줄 알았다.

💡💡 유 레 카 💡💡

좋아요를 취소하려면 이미 존재하는 NewsHeart를 찾아 삭제해야하지만, 위에 코드에서는 새로운 NewsHeart를 만들어서 삭제한다....
이렇게 되면 삭제되지 않은 기존 '좋아요'가 남아있어서, 실제 좋아요 개수가 이상하게 나온 것 같다..
else 구문에서
NewsHeart newsHeart = new NewsHeart(loginUser, news);
다시 생성을 한다. 그리고는 새로 생성한 것을 지운다........

착각했던 것 같다.

if (existHeart == null) {
	NewsHeart newsHeart = new NewsHeart(loginUser, news);
	news.increaseHeartCount();
	newsHeartRepository.save(newsHeart);
} else {
    news.decreaseHeartCount();
    newsHeartRepository.delete(existHeart);
}

위 코드와 같이 수정해주었더니 내가 원하는 결과가 나왔다.
0 ➡️ 1 ➡️ 0 ➡️ 1 ➡️ 0 ...

profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글