diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt index 07fb6a5f..400cd1ad 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -207,8 +207,14 @@ class AudioContentService( val audioContent = repository.findByIdAndCreatorId(audioContentId, member.id!!) ?: throw SodaException(messageKey = "content.error.invalid_content_retry") + val pinContent = pinContentRepository.findByContentIdAndMemberId( + contentId = audioContentId, + memberId = member.id!! + ) + audioContent.isActive = false audioContent.releaseDate = null + pinContent?.isActive = false } @Transactional diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/pin/PinContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/pin/PinContentRepository.kt index 18198210..be375d54 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/pin/PinContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/pin/PinContentRepository.kt @@ -15,6 +15,7 @@ interface PinContentQueryRepository { class PinContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : PinContentQueryRepository { override fun getPinContentList(memberId: Long, active: Boolean?): List { var where = pinContent.member.id.eq(memberId) + .and(pinContent.content.isActive.eq(true)) if (active != null) { where = where.and(pinContent.isActive.eq(active)) @@ -30,6 +31,7 @@ class PinContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : override fun findByContentIdAndMemberId(contentId: Long, memberId: Long, active: Boolean?): PinContent? { var where = pinContent.content.id.eq(contentId) .and(pinContent.member.id.eq(memberId)) + .and(pinContent.content.isActive.eq(true)) if (active != null) { where = where diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/content/AudioContentServiceTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/content/AudioContentServiceTest.kt index 7e526f1d..be775ab6 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/content/AudioContentServiceTest.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/content/AudioContentServiceTest.kt @@ -572,6 +572,28 @@ class AudioContentServiceTest { assertTrue(inactivePinContent.isActive) } + @Test + @DisplayName("콘텐츠 삭제 시 해당 콘텐츠의 상단 고정도 함께 비활성화한다") + fun shouldDeactivatePinContentWhenDeletingAudioContent() { + val creator = createMember(id = 2430L, nickname = "pin-delete-creator") + val audioContent = createAudioContent(creator = creator) + val pinContent = PinContent(isActive = true) + pinContent.member = creator + pinContent.content = audioContent + Mockito.`when`(repository.findByIdAndCreatorId(audioContent.id!!, creator.id!!)).thenReturn(audioContent) + Mockito.`when`( + pinContentRepository.findByContentIdAndMemberId( + contentId = audioContent.id!!, + memberId = creator.id!! + ) + ).thenReturn(pinContent) + + service.deleteAudioContent(audioContentId = audioContent.id!!, member = creator) + + assertEquals(false, audioContent.isActive) + assertEquals(false, pinContent.isActive) + } + private fun createMember(id: Long, nickname: String): Member { val member = Member( email = "$nickname@test.com",