feat(content): 콘텐츠 상세 조회 이력을 기록한다
This commit is contained in:
@@ -39,6 +39,7 @@ import kr.co.vividnext.sodalive.member.Member
|
|||||||
import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
|
import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.isAdultVisibleByPolicy
|
import kr.co.vividnext.sodalive.member.contentpreference.isAdultVisibleByPolicy
|
||||||
import kr.co.vividnext.sodalive.utils.generateFileName
|
import kr.co.vividnext.sodalive.utils.generateFileName
|
||||||
|
import kr.co.vividnext.sodalive.v2.recommend.application.CreatorContentViewHistoryService
|
||||||
import org.springframework.beans.factory.annotation.Value
|
import org.springframework.beans.factory.annotation.Value
|
||||||
import org.springframework.cache.annotation.Cacheable
|
import org.springframework.cache.annotation.Cacheable
|
||||||
import org.springframework.context.ApplicationEventPublisher
|
import org.springframework.context.ApplicationEventPublisher
|
||||||
@@ -63,6 +64,7 @@ class AudioContentService(
|
|||||||
private val limitedEditionOrderRepository: LimitedEditionOrderRepository,
|
private val limitedEditionOrderRepository: LimitedEditionOrderRepository,
|
||||||
private val themeQueryRepository: AudioContentThemeQueryRepository,
|
private val themeQueryRepository: AudioContentThemeQueryRepository,
|
||||||
private val playbackTrackingRepository: PlaybackTrackingRepository,
|
private val playbackTrackingRepository: PlaybackTrackingRepository,
|
||||||
|
private val creatorContentViewHistoryService: CreatorContentViewHistoryService,
|
||||||
private val commentRepository: AudioContentCommentRepository,
|
private val commentRepository: AudioContentCommentRepository,
|
||||||
private val audioContentLikeRepository: AudioContentLikeRepository,
|
private val audioContentLikeRepository: AudioContentLikeRepository,
|
||||||
private val pinContentRepository: PinContentRepository,
|
private val pinContentRepository: PinContentRepository,
|
||||||
@@ -813,6 +815,13 @@ class AudioContentService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
runCatching {
|
||||||
|
creatorContentViewHistoryService.recordView(
|
||||||
|
memberId = member.id!!,
|
||||||
|
contentId = audioContent.id!!
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return GetAudioContentDetailResponse(
|
return GetAudioContentDetailResponse(
|
||||||
contentId = audioContent.id!!,
|
contentId = audioContent.id!!,
|
||||||
title = audioContent.title,
|
title = audioContent.title,
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import kr.co.vividnext.sodalive.i18n.SodaMessageSource
|
|||||||
import kr.co.vividnext.sodalive.i18n.translation.ResourceTranslationJobScheduler
|
import kr.co.vividnext.sodalive.i18n.translation.ResourceTranslationJobScheduler
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
|
import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
|
||||||
|
import kr.co.vividnext.sodalive.v2.recommend.application.CreatorContentViewHistoryService
|
||||||
import org.junit.jupiter.api.Assertions.assertEquals
|
import org.junit.jupiter.api.Assertions.assertEquals
|
||||||
import org.junit.jupiter.api.Assertions.assertNull
|
import org.junit.jupiter.api.Assertions.assertNull
|
||||||
import org.junit.jupiter.api.Assertions.assertThrows
|
import org.junit.jupiter.api.Assertions.assertThrows
|
||||||
@@ -41,6 +42,7 @@ class AudioContentServiceTest {
|
|||||||
private lateinit var limitedEditionOrderRepository: LimitedEditionOrderRepository
|
private lateinit var limitedEditionOrderRepository: LimitedEditionOrderRepository
|
||||||
private lateinit var themeQueryRepository: AudioContentThemeQueryRepository
|
private lateinit var themeQueryRepository: AudioContentThemeQueryRepository
|
||||||
private lateinit var playbackTrackingRepository: PlaybackTrackingRepository
|
private lateinit var playbackTrackingRepository: PlaybackTrackingRepository
|
||||||
|
private lateinit var creatorContentViewHistoryService: CreatorContentViewHistoryService
|
||||||
private lateinit var commentRepository: AudioContentCommentRepository
|
private lateinit var commentRepository: AudioContentCommentRepository
|
||||||
private lateinit var audioContentLikeRepository: AudioContentLikeRepository
|
private lateinit var audioContentLikeRepository: AudioContentLikeRepository
|
||||||
private lateinit var pinContentRepository: PinContentRepository
|
private lateinit var pinContentRepository: PinContentRepository
|
||||||
@@ -63,6 +65,7 @@ class AudioContentServiceTest {
|
|||||||
limitedEditionOrderRepository = Mockito.mock(LimitedEditionOrderRepository::class.java)
|
limitedEditionOrderRepository = Mockito.mock(LimitedEditionOrderRepository::class.java)
|
||||||
themeQueryRepository = Mockito.mock(AudioContentThemeQueryRepository::class.java)
|
themeQueryRepository = Mockito.mock(AudioContentThemeQueryRepository::class.java)
|
||||||
playbackTrackingRepository = Mockito.mock(PlaybackTrackingRepository::class.java)
|
playbackTrackingRepository = Mockito.mock(PlaybackTrackingRepository::class.java)
|
||||||
|
creatorContentViewHistoryService = Mockito.mock(CreatorContentViewHistoryService::class.java)
|
||||||
commentRepository = Mockito.mock(AudioContentCommentRepository::class.java)
|
commentRepository = Mockito.mock(AudioContentCommentRepository::class.java)
|
||||||
audioContentLikeRepository = Mockito.mock(AudioContentLikeRepository::class.java)
|
audioContentLikeRepository = Mockito.mock(AudioContentLikeRepository::class.java)
|
||||||
pinContentRepository = Mockito.mock(PinContentRepository::class.java)
|
pinContentRepository = Mockito.mock(PinContentRepository::class.java)
|
||||||
@@ -82,6 +85,7 @@ class AudioContentServiceTest {
|
|||||||
limitedEditionOrderRepository = limitedEditionOrderRepository,
|
limitedEditionOrderRepository = limitedEditionOrderRepository,
|
||||||
themeQueryRepository = themeQueryRepository,
|
themeQueryRepository = themeQueryRepository,
|
||||||
playbackTrackingRepository = playbackTrackingRepository,
|
playbackTrackingRepository = playbackTrackingRepository,
|
||||||
|
creatorContentViewHistoryService = creatorContentViewHistoryService,
|
||||||
commentRepository = commentRepository,
|
commentRepository = commentRepository,
|
||||||
audioContentLikeRepository = audioContentLikeRepository,
|
audioContentLikeRepository = audioContentLikeRepository,
|
||||||
pinContentRepository = pinContentRepository,
|
pinContentRepository = pinContentRepository,
|
||||||
@@ -230,6 +234,10 @@ class AudioContentServiceTest {
|
|||||||
|
|
||||||
Mockito.verify(repository, Mockito.never()).findSeriesIdByContentId(audioContent.id!!, false)
|
Mockito.verify(repository, Mockito.never()).findSeriesIdByContentId(audioContent.id!!, false)
|
||||||
Mockito.verifyNoInteractions(commentRepository)
|
Mockito.verifyNoInteractions(commentRepository)
|
||||||
|
val recordViewInvocation = Mockito.mockingDetails(creatorContentViewHistoryService).invocations
|
||||||
|
.single { it.method.name == "recordView" }
|
||||||
|
assertEquals(viewer.id!!, recordViewInvocation.arguments[0])
|
||||||
|
assertEquals(audioContent.id!!, recordViewInvocation.arguments[1])
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createMember(id: Long, nickname: String): Member {
|
private fun createMember(id: Long, nickname: String): Member {
|
||||||
|
|||||||
Reference in New Issue
Block a user