728x90
320x100
🎯 오늘의 목표
- 좋아요 기능을 토글기능으로 변경하기
⚙️ 진행한 작업
- LikeService 수정
- LikeController 수정
🛠️ 개발 내용
- 기존 좋아요 누르기/좋아요 취소로 나뉘어져 있던 좋아요 기능을 하나로 합쳐 토글기능으로 변경할 예정
왜 변경하나요?
- 기존에는 두 개의 엔드포인트가 필요했는데 토글 방식으로 전환하면 API 인터페이스가 단순해짐
- 기존 방식에는 좋아요 상태를 먼저 조회한 후, 상태에 따라 API 호출이 필요했는데, 토글 방식은 내부에서 상태를 확인하고, 처리하기 때문에 클라이언트가 별도의 상태를 확인없이 호출 할수 있어 로직이 명확함
📌 LikeService 수정
/**
* 좋아요 토글 기능
* - 이미 좋아요 되어 있으면 삭제 (취소)
* - 좋아요 안 되어 있으면 생성
*
* @param user 사용자
* @param feedId 피드 ID
* @return 토글 후 상태 (true: 좋아요됨, false: 좋아요 취소됨)
*/
@Transactional
public boolean toggleLike(User user, Long feedId) {
// 피드 존재 여부 확인
Feed feed = feedRepository.findById(feedId)
.orElseThrow(() -> new LikeException(ErrorCode.FEED_NOT_FOUND));
// 좋아요가 이미 존재하면 삭제, 없으면 생성
return likeRepository.findByUserIdAndFeedId(user.getId(), feedId)
.map(existingLike -> {
likeRepository.delete(existingLike);
return false;
})
.orElseGet(() -> {
likeRepository.save(Like.create(user, feed));
return true;
});
}
📌 LikeController 수정
@PostMapping("/{feedId}/likes")
public ResponseEntity<ApiResponse<String>> toggleLike(@PathVariable Long feedId,
@AuthenticationPrincipal CustomUserDetails userDetails) {
User user = userDetails.getUser();
boolean liked = likeService.toggleLike(user, feedId);
String message = liked ? "좋아요를 눌렀습니다." : "좋아요를 취소했습니다.";
return ResponseEntity.ok(ApiResponse.success(message));
}
728x90
320x100
'💻 뚝딱뚝딱 > 북북클럽' 카테고리의 다른 글
[개발일지 #027] 신고(Report) 누적 시, 블라인드 처리 (0) | 2025.05.01 |
---|---|
[개발일지 #026] 신고(Report) 도메인 구현 및 단위테스트 (0) | 2025.05.01 |
[개발일지 #024] JWT 토큰이 없는데도 200 OK 가 뜬다? (해결방법) (0) | 2025.04.30 |
[개발일지 #023] 댓글(Comment) API 구현 및 테스트 (0) | 2025.04.30 |
[개발일지 #022] 댓글(Comment) 도메인 구현 및 단위테스트 (0) | 2025.04.30 |