diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/api/content/ranking/application/AudioRankingFacade.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/api/content/ranking/application/AudioRankingFacade.kt new file mode 100644 index 00000000..40333589 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/api/content/ranking/application/AudioRankingFacade.kt @@ -0,0 +1,16 @@ +package kr.co.vividnext.sodalive.v2.api.content.ranking.application + +import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.v2.api.content.ranking.dto.AudioRankingResponse +import kr.co.vividnext.sodalive.v2.content.ranking.application.AudioRankingQueryService +import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingType +import org.springframework.stereotype.Component + +@Component +class AudioRankingFacade( + private val queryService: AudioRankingQueryService +) { + fun getRankings(type: AudioRankingType, member: Member?): AudioRankingResponse { + return AudioRankingResponse.from(queryService.getRankings(type, member)) + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/application/AudioRankingQueryService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/application/AudioRankingQueryService.kt new file mode 100644 index 00000000..144fcae2 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/application/AudioRankingQueryService.kt @@ -0,0 +1,17 @@ +package kr.co.vividnext.sodalive.v2.content.ranking.application + +import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRanking +import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingType +import org.springframework.stereotype.Service + +@Service +class AudioRankingQueryService { + fun getRankings(type: AudioRankingType, member: Member?): AudioRanking { + return AudioRanking( + showRankChange = false, + type = type, + items = emptyList() + ) + } +} diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/v2/api/content/ranking/application/AudioRankingFacadeTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/v2/api/content/ranking/application/AudioRankingFacadeTest.kt new file mode 100644 index 00000000..85c5178c --- /dev/null +++ b/src/test/kotlin/kr/co/vividnext/sodalive/v2/api/content/ranking/application/AudioRankingFacadeTest.kt @@ -0,0 +1,52 @@ +package kr.co.vividnext.sodalive.v2.api.content.ranking.application + +import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.v2.content.ranking.application.AudioRankingQueryService +import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRanking +import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingItem +import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingType +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test +import org.mockito.Mockito + +class AudioRankingFacadeTest { + private val queryService = Mockito.mock(AudioRankingQueryService::class.java) + private val facade = AudioRankingFacade(queryService) + + @Test + @DisplayName("facade는 랭킹 타입과 회원을 쿼리 서비스에 그대로 전달하고 공개 응답으로 변환한다") + fun shouldDelegateTypeAndMemberAndConvertDomainRankingToResponse() { + val member = Mockito.mock(Member::class.java) + val ranking = AudioRanking( + showRankChange = true, + type = AudioRankingType.RISING, + items = listOf( + AudioRankingItem( + contentId = 1L, + title = "audio", + creatorNickname = "creator", + rank = 1, + rankChange = 2, + isNew = false, + coverImageUrl = "https://cdn.test/audio.png" + ) + ) + ) + Mockito.doReturn(ranking).`when`(queryService).getRankings(AudioRankingType.RISING, member) + + val response = facade.getRankings(AudioRankingType.RISING, member) + + Mockito.verify(queryService).getRankings(AudioRankingType.RISING, member) + assertEquals(true, response.showRankChange) + assertEquals(AudioRankingType.RISING, response.type) + assertEquals(1, response.items.size) + assertEquals(1L, response.items[0].contentId) + assertEquals("audio", response.items[0].title) + assertEquals("creator", response.items[0].creatorNickname) + assertEquals(1, response.items[0].rank) + assertEquals(2, response.items[0].rankChange) + assertEquals(false, response.items[0].isNew) + assertEquals("https://cdn.test/audio.png", response.items[0].coverImageUrl) + } +}