Skip to content

Conversation

@PicturePark1101
Copy link
Contributor

작업내용

좋아요 등록 및 취소 API 구현

상세설명_ & 캡쳐

복합 키 유니크 제약 조건

좋아요 테이블의 (member_id, shared_note_id) 쌍으로 유니크 제약 조건을 걸어 중복 좋아요를 방지했습니다. 데이터 접근 객체에서 해당 에러 캐치하도록 처리했습니다.

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(uniqueConstraints = {
	@UniqueConstraint(
		columnNames = {
			"member_id",
			"shared_note_id"
		}
	)
})
@Entity
public class LikedNote {
@Component
@RequiredArgsConstructor
public class LikedNoteUpdater {

	private final LikedNoteRepository likedNoteRepository;

	public void save(LikedNote likedNote) {
		try {
			likedNoteRepository.save(likedNote);
		} catch (DataIntegrityViolationException e) {
			throw new LikedNoteHandler(ErrorStatus.LIKEDNOTE_CONFLICT);
		}
	}
}

총 좋아요 수 리턴 관련

  • JPA update 쿼리나가도 영속성 컨텍스트는 변경되지 않는 문제로 쿼리 한번 더 발생시켜 좋아요 수 재조회
  • 엔티티에서 증가시키는 방향을 고민했으나 이 경우 다른 유저가 좋아요 눌렀을 경우 반영되지 않기 때문에 쿼리 한 번 더 나가게 했습니다. (맨 아래 sharedNoteFinder.getLikedNoteById 부분)
  • 사실 이 부분은 동시성 문제가 더 있을 것 같은데 모든 API 구현 후 다시 확인하겠습니다.
	@Transactional
	public LikedNotePostResponse createLikedNote(Member member, Long sharedNoteId) {
		SharedNote sharedNote = sharedNoteFinder.getById(sharedNoteId);
		LikedNote likedNote = LikedNote.create(member, sharedNote);

		likedNoteUpdater.save(likedNote);
		sharedNoteUpdater.incrementLikedCountById(sharedNoteId);

		return new LikedNotePostResponse(sharedNoteFinder.getLikedNoteById(sharedNoteId));
	}

@PicturePark1101 PicturePark1101 self-assigned this Apr 24, 2025
@PicturePark1101 PicturePark1101 added ✨ feature 기능 추가 진이 작업했습니다. 👊🏻 PULL REQUEST pr날릴때 labels Apr 24, 2025
@PicturePark1101 PicturePark1101 merged commit 5a087ed into dev Apr 27, 2025
1 check passed
@PicturePark1101 PicturePark1101 deleted the feat/#343 branch April 27, 2025 03:43
PicturePark1101 added a commit that referenced this pull request Jun 1, 2025
[feat/#343] 좋아요 등록 및 취소 API 구현
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feature 기능 추가 진이 작업했습니다. 👊🏻 PULL REQUEST pr날릴때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants