티스토리 뷰

팔로우 기능과 마찬가지로 게시물 좋아요도 유저와 M:N 즉 다대다 매핑이 된다.

한 게시물은 여러 명의 유저들로부터 좋아요를 받을 수 있고, 한 유저는 여러개의 게시물에 좋아요를 누를 수 있기 때문이다.

 

먼저, 데이터 모델링부터 해보자면

'

이런 식으로 구성되도록 만들었다.

post_like라는 중개테이블을 만들어서 post 테이블과 users 테이블을 각각 M:1로 연결하였다.

 

중개테이블인 PostLikeEntity 에서 @ManyToOne으로 UserEntity와 PostEntity를 연결해준 후,

다대일 양방향 매핑을 위해서 UserEntity와 PostEntity 각각 @OneToMany mappedBy를 통해 연결해주었다.

이로써 다대일 양방향 매핑이 맺어졌다.

 

다음으로 좋아요 기능을 구현해보자.

좋아요는 현재 유저의 닉네임을 받아서 유저객체를 가져오고, 좋아요할 post의 id를 받아서 post 객체를 가져와 postLikeEntity 객체를 만들었다.

 

public String like(String userNickname, int postId) {
        PostEntity postEntity = postRepository.findById(postId);
        UserEntity userEntity = userRepository.findByNickname(userNickname);

        if (postEntity == null) {
            return "게시물이 존재하지 않습니다.";
        } else if (userEntity == null) {
            return "현재 유저가 존재하지 않습니다";
        }
        PostLikeEntity postLikeEntity = new PostLikeEntity();
        postLikeEntity.setPostEntity(postEntity);
        postLikeEntity.setUserEntity(userEntity);

        postLikeRepository.save(postLikeEntity);

        return "success";
    }

 

postman으로 실행해보았을때,

닉네임이 nick3인 유저가 2번 게시물에 좋아요를 누른 요청을 보내보았다.

데이터가 잘 들어간 것을 확인할 수 있다.

그러면, 해당 게시물을 좋아요 누른 유저들을 확인해보자!

 

먼저, 코드는 다음과 같이 구현했다.

 

// 좋아요 한 사람들 리스트
    public List<UserDto> likeUserList(int postId) {
        List<UserDto> userDtos = new ArrayList<>();

        PostEntity postEntity = postRepository.findById(postId);

        for (PostLikeEntity o : postEntity.getPostLikeEntities()) {
            UserDto userDto = new ModelMapper().map(o.getUserEntity(), UserDto.class);
            userDtos.add(userDto);
        }

        return userDtos;
    }

postid가 들어오면, 해당 post 객체를 가져온 뒤, @OneToMany로 매핑했었던 postLikeEntities를 활용하여서 해당 post 객체와 관련 있는 postLikeEntity 객체들을 가져왔다. 그 객체들의 userEntity를 가져온 뒤, DTO로 변환해주고 return 하기 위해서 map을 사용하였다.

 

한번 postman으로 실행해보자.

2번 게시물을 좋아요 누른 유저들을 확인해보았을 때, 닉네임이 nick33 인 유저가 나오는 것을 확인할 수 있다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함