fix(member): 회원 차단을 요청 ID 단건만 적용한다
This commit is contained in:
@@ -528,35 +528,25 @@ class MemberService(
|
||||
|
||||
@Transactional
|
||||
fun memberBlock(request: MemberBlockRequest, memberId: Long) {
|
||||
// 요청자와 차단 대상 회원이 실제로 존재하는지 검증한다.
|
||||
val member = repository.findByIdOrNull(id = memberId)
|
||||
?: throw SodaException(messageKey = "common.error.invalid_request")
|
||||
val blockedMember = repository.findByIdOrNull(id = request.blockMemberId)
|
||||
?: throw SodaException(messageKey = "common.error.invalid_request")
|
||||
|
||||
val blockTargetMemberIds = mutableSetOf(request.blockMemberId)
|
||||
blockedMember.auth?.let { auth ->
|
||||
val verifiedMemberIds = authRepository.getMemberIdsByNameAndBirthAndDiAndGender(
|
||||
name = auth.name,
|
||||
birth = auth.birth,
|
||||
di = auth.di,
|
||||
gender = auth.gender
|
||||
)
|
||||
blockTargetMemberIds.addAll(verifiedMemberIds)
|
||||
}
|
||||
blockTargetMemberIds.remove(memberId)
|
||||
|
||||
blockTargetMemberIds.forEach { targetMemberId ->
|
||||
val targetMember = repository.findByIdOrNull(id = targetMemberId) ?: return@forEach
|
||||
|
||||
// 요청자 본인을 차단하려는 경우에는 차단 레코드를 생성하지 않는다.
|
||||
if (memberId != request.blockMemberId) {
|
||||
// 요청한 blockMemberId 한 건만 대상으로 기존 차단 여부를 조회한다.
|
||||
var blockMember = blockMemberRepository.getBlockAccount(
|
||||
blockedMemberId = targetMemberId,
|
||||
blockedMemberId = request.blockMemberId,
|
||||
memberId = memberId
|
||||
)
|
||||
|
||||
// 기존 레코드가 없으면 생성하고, 있으면 활성 상태로 전환한다.
|
||||
if (blockMember == null) {
|
||||
blockMember = BlockMember()
|
||||
blockMember.member = member
|
||||
blockMember.blockedMember = targetMember
|
||||
blockMember.blockedMember = blockedMember
|
||||
|
||||
blockMemberRepository.save(blockMember)
|
||||
} else {
|
||||
@@ -564,11 +554,14 @@ class MemberService(
|
||||
}
|
||||
}
|
||||
|
||||
// 차단 반영 후 요청자 기준 캐시를 즉시 무효화한다.
|
||||
evictRecommendLiveCache(memberId)
|
||||
evictLatestFinishedLiveCache(memberId)
|
||||
blockTargetMemberIds.forEach {
|
||||
evictRecommendLiveCache(it)
|
||||
evictLatestFinishedLiveCache(it)
|
||||
|
||||
// 본인 차단이 아닌 경우 요청한 대상 회원의 캐시도 함께 무효화한다.
|
||||
if (memberId != request.blockMemberId) {
|
||||
evictRecommendLiveCache(request.blockMemberId)
|
||||
evictLatestFinishedLiveCache(request.blockMemberId)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user