🍐 [이화톤] 배울림꽃 - 이화 청원 프로그램 리팩토링( 4 ) 청원 투표, 투표 취소 API

2024. 9. 22. 00:42개발/🍐 배울림꽃

 

 

 

구현할 거
✅ 청원 투표하기
✅ 청원 투표 취소하기

 

 

PostEntity / MemberEntity

@OneToMany(mappedBy = "post", cascade = CascadeType.ALL)
    private List<Vote> voteList;
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL)
    private List<Vote> voteList;
수정한 부분

- @OneToMany 설정 
:  CascadeType.ALL -> Post Entity에 변화 생겼을 때 Vote에 반영되도록

 

PostService

// 게시물 투표
    public String enableVote(Long postId) {
        Long memberId = memberService.getCurrentMemberId();
        Member member = memberRepository.findByMemberId(memberId);

        Post post = findById(postId);
        post.setVoteCount(post.getVoteCount()+1);

        Vote vote = Vote.builder()
                .member(member)
                .post(post)
                .build();
        voteRepository.save(vote);

        return postId + "Voted";
    }

    // 게시물 투표 취소
    public String disableVote(Long postId) {
        Long memberId = memberService.getCurrentMemberId();
        Member member = memberRepository.findByMemberId(memberId);

        Post post = findById(postId);
        post.setVoteCount(post.getVoteCount()-1);
        voteRepository.deleteByMemberAndPost(member, post);

        return postId + "Vote Cancelled";
    }
Vote 엔티티는 Member, Post와 각각 일대다로 연결되어 있음
-> Vote 생성할 때(투표하기 로직) Member, Post 엔티티 넣어줌
: Member는 한나가 구현해준 회원 관리 로직 - 현재 사용자 찾아서 삽입

-> Vote 삭제할 때(투표 취소 로직) Vote의 레코드 하나를 삭제함
: Vote의 특정 레코드를 Post와 Member로 찾아서 삭제함

 

 

PostController

@PutMapping("/{postId}/vote/enable")
    public String enableVote(@PathVariable Long postId) {
        return postService.enableVote(postId);
    }

    @PutMapping("/{postId}/vote/enable")
    public String disableVote(@PathVariable Long postId) {
        return postService.disableVote(postId);
    }
투표하기 / 투표 취소 Mapping

 

 

VoteRepository

public interface VoteRepository extends JpaRepository<Long, Vote> {
    Vote deleteByMemberAndPost(Member member, Post post);
}
투표 취소할 경우 Vote table에서 해당 레코드가 삭제되어야 함
-> Member, Post 엔티티로 Vote 레코드 찾기 위해 deleteByMemberAndPost 메서드 생성

 

 


 

 

아직 테스트 전....!

헤더 어떻게 넣는지 물어봐야 됨..!

나도 회원관리쪽 개발 공부해야겠당!!