Skip to content

Commit

Permalink
feat: 비관적 락 적용
Browse files Browse the repository at this point in the history
  • Loading branch information
peeerr committed Nov 14, 2024
1 parent 731a17e commit f2ccd6e
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,18 @@

import com.potatocake.everymoment.entity.Diary;
import com.potatocake.everymoment.entity.Like;
import jakarta.persistence.LockModeType;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface LikeRepository extends JpaRepository<Like, Long> {

Optional<Like> findByMemberIdAndDiaryId(Long memberId, Long diaryId);
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("SELECT l FROM Like l WHERE l.member.id = :memberId AND l.diary.id = :diaryId")
Optional<Like> findByMemberIdAndDiaryIdWithLock(@Param("memberId") Long memberId, @Param("diaryId") Long diaryId);

Long countByDiary(Diary diary);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public void toggleLike(Long memberId, Long diaryId) {
Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new GlobalException(ErrorCode.MEMBER_NOT_FOUND));

Optional<Like> existingLike = likeRepository.findByMemberIdAndDiaryId(memberId, diaryId);
Optional<Like> existingLike = likeRepository.findByMemberIdAndDiaryIdWithLock(memberId, diaryId);

if (existingLike.isPresent()) {
// 이미 좋아요가 존재하면 삭제 (좋아요 취소)
Expand Down

0 comments on commit f2ccd6e

Please sign in to comment.