오늘은 오전 회의를 생략하고 각자 작업을 진행하였다.
우선, review delete시 reviewLike가 같이 delete되지 않아 review entity쪽 연관관계 매핑 코드에 cascade 설정을 추가해주었다.
@OneToMany(mappedBy = "review", cascade = CascadeType.ALL)
private List<ReviewLike> reviewLikes;
그리고 팀원들과 코드에 대한 리뷰를 진행하였는데 기존 reviewLike를 Post 메서드로 Like를 추가하고, Delete로 Like를 제거하는 로직을 Post 메서드 1개를 통해 ON/OFF 방식으로 리팩토링하기로 결정했다.
따라서, 코드 수정이 필요했다.
@PostMapping
public ResponseEntity createReviewLike(@RequestBody ReviewLikeDto reviewLikeDto, Principal principal) {
Member member = memberService.findLoginMemberByEmail(principal.getName());
reviewLikeDto.setMember(member);
Long reviewId = reviewLikeDto.getReviewId();
ReviewLike existingReviewLike = reviewLikeService.findByMemberIdAndReviewId(member.getMemberId(), reviewId);
if(existingReviewLike != null) {
reviewLikeService.deleteReviewLike(existingReviewLike.getId(), member.getMemberId());
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} else {
ReviewLike reviewLike = mapper.reviewLikeDtoToReviewLike(reviewLikeDto);
ReviewLike response = reviewLikeService.addReviewLike(reviewLike);
return new ResponseEntity<>(mapper.ReviewLikeToReviewLikeResponseDto(response), HttpStatus.CREATED);
}
다음과 같이 Controller 클래스에서 reviewLike Post 메서드 로직을 수정하고, Delete 메서드를 제거해줬다.
ReviewLike findByMember_memberIdAndReviewId(Long memberId, Long reviewId);
Repository에 memberId와 reviewId를 찾을 수 있는 메서드를 만들어주고,
public ReviewLike findByMemberIdAndReviewId(Long memberId, Long reviewId) {
return reviewLikeRepository.findByMember_memberIdAndReviewId(memberId, reviewId);
}
Service 클래스에서 해당 메서드를 이용해 Controller단에서 사용할 수 있도록 코드를 짜줬다.
간단히 코드를 소개하자면 해당 memberId, 해당 reviewId가 있다는 로직을 짜주고, 없으면 Post를 통해 Like를 삽입시키고 이미 존재한다면 Like를 삭제시키는 로직이다.
코드 리뷰를 토대로 로직을 수정해준 뒤, 첫 배포작업을 하기 위해 BE 코드를 dev_be브랜치에 합치는 작업을 진행해주었다.
내일부터 해당 합친 코드로부터 멘토링 시간에 피드백받았던 Composite 패턴으로 디렉토리 구조를 수정 후, 각자 코드를 가져가서 필요한 기능에 따른 브랜치를 파서 작업을 다시 시작하기로!!!