fix(member): 언팔로우 시 최근 소식을 비활성화한다
This commit is contained in:
@@ -53,6 +53,7 @@ import kr.co.vividnext.sodalive.member.token.MemberTokenRepository
|
|||||||
import kr.co.vividnext.sodalive.point.MemberPointRepository
|
import kr.co.vividnext.sodalive.point.MemberPointRepository
|
||||||
import kr.co.vividnext.sodalive.utils.generateFileName
|
import kr.co.vividnext.sodalive.utils.generateFileName
|
||||||
import kr.co.vividnext.sodalive.utils.generatePassword
|
import kr.co.vividnext.sodalive.utils.generatePassword
|
||||||
|
import kr.co.vividnext.sodalive.v2.home.following.port.out.HomeFollowingNewsInboxPort
|
||||||
import org.springframework.beans.factory.annotation.Value
|
import org.springframework.beans.factory.annotation.Value
|
||||||
import org.springframework.cache.CacheManager
|
import org.springframework.cache.CacheManager
|
||||||
import org.springframework.data.repository.findByIdOrNull
|
import org.springframework.data.repository.findByIdOrNull
|
||||||
@@ -109,6 +110,7 @@ class MemberService(
|
|||||||
|
|
||||||
private val objectMapper: ObjectMapper,
|
private val objectMapper: ObjectMapper,
|
||||||
private val cacheManager: CacheManager,
|
private val cacheManager: CacheManager,
|
||||||
|
private val homeFollowingNewsInboxPort: HomeFollowingNewsInboxPort,
|
||||||
|
|
||||||
@Value("\${cloud.aws.s3.bucket}")
|
@Value("\${cloud.aws.s3.bucket}")
|
||||||
private val s3Bucket: String,
|
private val s3Bucket: String,
|
||||||
@@ -525,6 +527,7 @@ class MemberService(
|
|||||||
|
|
||||||
if (creatorFollowing != null) {
|
if (creatorFollowing != null) {
|
||||||
creatorFollowing.isActive = false
|
creatorFollowing.isActive = false
|
||||||
|
homeFollowingNewsInboxPort.deactivateByMemberIdAndCreatorId(memberId = memberId, creatorId = creatorId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ class MemberServiceCacheEvictionTest {
|
|||||||
memberContentPreferenceService = mock<MemberContentPreferenceService>(),
|
memberContentPreferenceService = mock<MemberContentPreferenceService>(),
|
||||||
objectMapper = ObjectMapper(),
|
objectMapper = ObjectMapper(),
|
||||||
cacheManager = cacheManager,
|
cacheManager = cacheManager,
|
||||||
|
homeFollowingNewsInboxPort = mock(),
|
||||||
s3Bucket = "test-bucket",
|
s3Bucket = "test-bucket",
|
||||||
cloudFrontHost = "https://cdn.test"
|
cloudFrontHost = "https://cdn.test"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ class MemberServiceContentPreferenceTest {
|
|||||||
memberContentPreferenceService = memberContentPreferenceService,
|
memberContentPreferenceService = memberContentPreferenceService,
|
||||||
objectMapper = ObjectMapper(),
|
objectMapper = ObjectMapper(),
|
||||||
cacheManager = mock<CacheManager>(),
|
cacheManager = mock<CacheManager>(),
|
||||||
|
homeFollowingNewsInboxPort = mock(),
|
||||||
s3Bucket = "test-bucket",
|
s3Bucket = "test-bucket",
|
||||||
cloudFrontHost = "https://cdn.test"
|
cloudFrontHost = "https://cdn.test"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ package kr.co.vividnext.sodalive.member
|
|||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.member.login.LoginRequest
|
import kr.co.vividnext.sodalive.member.login.LoginRequest
|
||||||
import kr.co.vividnext.sodalive.support.EmbeddedRedisInitializer
|
import kr.co.vividnext.sodalive.support.EmbeddedRedisInitializer
|
||||||
|
import kr.co.vividnext.sodalive.v2.home.following.adapter.out.persistence.HomeFollowingNewsInbox
|
||||||
|
import kr.co.vividnext.sodalive.v2.home.following.adapter.out.persistence.HomeFollowingNewsInboxJpaRepository
|
||||||
|
import kr.co.vividnext.sodalive.v2.home.following.domain.FollowingNewsType
|
||||||
import org.junit.jupiter.api.Assertions.assertEquals
|
import org.junit.jupiter.api.Assertions.assertEquals
|
||||||
import org.junit.jupiter.api.Assertions.assertThrows
|
import org.junit.jupiter.api.Assertions.assertThrows
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
@@ -11,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired
|
|||||||
import org.springframework.boot.test.context.SpringBootTest
|
import org.springframework.boot.test.context.SpringBootTest
|
||||||
import org.springframework.test.context.ContextConfiguration
|
import org.springframework.test.context.ContextConfiguration
|
||||||
import org.springframework.transaction.annotation.Transactional
|
import org.springframework.transaction.annotation.Transactional
|
||||||
|
import java.time.LocalDateTime
|
||||||
import javax.persistence.EntityManager
|
import javax.persistence.EntityManager
|
||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
@@ -19,6 +23,7 @@ import javax.persistence.EntityManager
|
|||||||
class MemberServiceTest @Autowired constructor(
|
class MemberServiceTest @Autowired constructor(
|
||||||
private val service: MemberService,
|
private val service: MemberService,
|
||||||
private val memberRepository: MemberRepository,
|
private val memberRepository: MemberRepository,
|
||||||
|
private val homeFollowingNewsInboxJpaRepository: HomeFollowingNewsInboxJpaRepository,
|
||||||
private val entityManager: EntityManager
|
private val entityManager: EntityManager
|
||||||
) {
|
) {
|
||||||
@Test
|
@Test
|
||||||
@@ -42,4 +47,51 @@ class MemberServiceTest @Autowired constructor(
|
|||||||
|
|
||||||
assertEquals("common.error.bad_credentials", exception.messageKey)
|
assertEquals("common.error.bad_credentials", exception.messageKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("언팔로우 성공 시 해당 회원과 크리에이터의 활성 최근 소식을 비활성화하고 재팔로우해도 복구하지 않는다")
|
||||||
|
fun shouldDeactivateFollowingNewsInboxOnCreatorUnFollowAndKeepInactiveAfterRefollow() {
|
||||||
|
val member = memberRepository.save(Member(email = "follower@test.com", password = "password", nickname = "follower"))
|
||||||
|
val creator = memberRepository.save(
|
||||||
|
Member(
|
||||||
|
email = "creator@test.com",
|
||||||
|
password = "password",
|
||||||
|
nickname = "creator",
|
||||||
|
role = MemberRole.CREATOR
|
||||||
|
)
|
||||||
|
)
|
||||||
|
service.creatorFollow(creatorId = creator.id!!, isNotify = true, isActive = true, memberId = member.id!!)
|
||||||
|
val inbox = homeFollowingNewsInboxJpaRepository.save(
|
||||||
|
HomeFollowingNewsInbox(
|
||||||
|
memberId = member.id!!,
|
||||||
|
creatorId = creator.id!!,
|
||||||
|
newsType = FollowingNewsType.COMMUNITY_POST,
|
||||||
|
sourceKey = "COMMUNITY_POST:1",
|
||||||
|
targetId = 1L,
|
||||||
|
occurredAtUtc = LocalDateTime.of(2026, 6, 25, 1, 0),
|
||||||
|
visibleFromAtUtc = LocalDateTime.of(2026, 6, 25, 1, 0),
|
||||||
|
creatorNickname = "creator",
|
||||||
|
creatorProfileImagePath = null,
|
||||||
|
title = "title",
|
||||||
|
body = "body",
|
||||||
|
thumbnailImagePath = null,
|
||||||
|
rank = null,
|
||||||
|
isAdult = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
entityManager.flush()
|
||||||
|
entityManager.clear()
|
||||||
|
|
||||||
|
service.creatorUnFollow(creatorId = creator.id!!, memberId = member.id!!)
|
||||||
|
entityManager.flush()
|
||||||
|
entityManager.clear()
|
||||||
|
|
||||||
|
assertEquals(false, homeFollowingNewsInboxJpaRepository.findById(inbox.id!!).get().isActive)
|
||||||
|
|
||||||
|
service.creatorFollow(creatorId = creator.id!!, isNotify = true, isActive = true, memberId = member.id!!)
|
||||||
|
entityManager.flush()
|
||||||
|
entityManager.clear()
|
||||||
|
|
||||||
|
assertEquals(false, homeFollowingNewsInboxJpaRepository.findById(inbox.id!!).get().isActive)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user