feat(home): 팔로잉 탭 최근 소식 정책을 보강한다

This commit is contained in:
2026-07-30 19:51:30 +09:00
parent e6f56f24fe
commit f1c2e6c50b
21 changed files with 2145 additions and 19 deletions
@@ -497,12 +497,14 @@ class MemberService(
fun creatorFollow(creatorId: Long, isNotify: Boolean, isActive: Boolean, memberId: Long) {
if (creatorId == memberId) return
val creatorFollowing = creatorFollowingRepository.findByCreatorIdAndMemberId(
val creatorFollowing = creatorFollowingRepository.findByCreatorIdAndMemberIdForUpdate(
creatorId = creatorId,
memberId = memberId
)
if (creatorFollowing == null) {
if (!isActive) return
val creator = repository.findByIdOrNull(creatorId)
?: throw SodaException(messageKey = "member.validation.creator_not_found")
val member = repository.findByIdOrNull(memberId)
@@ -515,12 +517,15 @@ class MemberService(
} else {
creatorFollowing.isNotify = isNotify && isActive
creatorFollowing.isActive = isActive
if (!isActive) {
homeFollowingNewsInboxPort.deactivateByMemberIdAndCreatorId(memberId = memberId, creatorId = creatorId)
}
}
}
@Transactional
fun creatorUnFollow(creatorId: Long, memberId: Long) {
val creatorFollowing = creatorFollowingRepository.findByCreatorIdAndMemberId(
val creatorFollowing = creatorFollowingRepository.findByCreatorIdAndMemberIdForUpdate(
creatorId = creatorId,
memberId = memberId
)
@@ -4,12 +4,14 @@ import com.querydsl.jpa.impl.JPAQueryFactory
import kr.co.vividnext.sodalive.member.following.QCreatorFollowing.creatorFollowing
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository
import javax.persistence.LockModeType
@Repository
interface CreatorFollowingRepository : JpaRepository<CreatorFollowing, Long>, CreatorFollowingQueryRepository
interface CreatorFollowingQueryRepository {
fun findByCreatorIdAndMemberId(creatorId: Long, memberId: Long): CreatorFollowing?
fun findByCreatorIdAndMemberIdForUpdate(creatorId: Long, memberId: Long): CreatorFollowing?
}
@Repository
@@ -25,4 +27,15 @@ class CreatorFollowingQueryRepositoryImpl(
)
.fetchFirst()
}
override fun findByCreatorIdAndMemberIdForUpdate(creatorId: Long, memberId: Long): CreatorFollowing? {
return queryFactory
.selectFrom(creatorFollowing)
.where(
creatorFollowing.creator.id.eq(creatorId)
.and(creatorFollowing.member.id.eq(memberId))
)
.setLockMode(LockModeType.PESSIMISTIC_WRITE)
.fetchFirst()
}
}