한 유저가 같은 게시글에 좋아요를 중복으로 하지 못하게 만드려고 했으나, 또 작동해도 좋아요가 생성되어 계속 중복되는 현상이 생김

public void likePost(Long postId,AuthUser authUser) {
User user = userRepository.findById(authUser.getUserId()).orElseThrow(() -> new NullPointerException("해당 유저가 존재 하지 않습니다."));
Post post = postRepository.findById(postId).orElseThrow(() -> new NullPointerException("해당 게시글이 존재하지 않습니다."));
//게시글의 유저가 있는지 확인 그리고 해당게시글의 유저id와 좋아요 하려는 유저가 같은 사람인지 확인하는 조건문
if(post.getUser() != null && ObjectUtils.nullSafeEquals(user.getId(),post.getUser().getId())) {
throw new NullPointerException("자신이 작성한 게시글에는 좋아요를 누를 수 없습니다.");
}//같은사람이 아니라면 like를 저장
likesRepository.save(new Likes(user,post));
post.increaseLikeCount();
}
좋아요를 생성하는 메서드코드인데, 코드를 만들 당시 게시글을 만든 유저가 해당게시글에는 좋아요를 못하도록 하는 조건만 주고 좋아요를 중복을 방지하는 조건을 빼먹고 끝냈다.
그래서 코드를 추가해 주었다.
public void likePost(Long postId, AuthUser authUser) {
User user = userRepository.findById(authUser.getUserId()).orElseThrow(() -> new NullPointerException("해당 유저가 존재 하지 않습니다."));
Post post = postRepository.findById(postId).orElseThrow(() -> new NullPointerException("해당 게시글이 존재하지 않습니다."));
//게시글의 유저가 있는지 확인 그리고 해당게시글의 유저id와 좋아요 하려는 유저가 같은 사람인지 확인하는 조건문
if (post.getUser() != null && ObjectUtils.nullSafeEquals(user.getId(), post.getUser().getId())) {
throw new NullPointerException("자신이 작성한 게시글에는 좋아요를 누를 수 없습니다.");
}//같은사람이 아니라면 like를 저장
if (likesRepository.findByUserAndPost(user, post).isPresent()) {
throw new NullPointerException("이미 좋아요한 게시글 입니다.");
} //이미 좋아요한 이력이 있는 게시글이면 좋아요 못하게 방지
likesRepository.save(new Likes(user, post));
post.increaseLikeCount();
}
likeRepository에서 user와 post를 찾아서 이미 같은 조건이 있으면 예외를 보내게 하는 조건문을 달아서 해결했다.
'java 배우기 > TIL' 카테고리의 다른 글
| 팀프로젝트 like 기능 구현하기 (0) | 2024.09.05 |
|---|---|
| Spring 게시판 조회수 증가 코드 넣기 (0) | 2024.09.04 |
| 깃허브 브랜치 삭제 반영하기 (0) | 2024.09.03 |
| "Unsuccessful: drop table if exists user cascade" Spring 작동 오류 해결하기 (1) | 2024.08.30 |
| Spring 익숙해지기 개인과제2 (0) | 2024.08.30 |