refactor(home-recommendation): 추천 배너 응답을 공통화한다
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
package kr.co.vividnext.sodalive.v2.api.common.dto
|
||||
|
||||
import kr.co.vividnext.sodalive.event.EventItem
|
||||
import kr.co.vividnext.sodalive.v2.common.domain.RecommendationBanner
|
||||
|
||||
data class RecommendationBannerResponse(
|
||||
val imageUrl: String,
|
||||
val eventItem: EventItem?,
|
||||
val creatorId: Long?,
|
||||
val seriesId: Long?,
|
||||
val link: String?
|
||||
) {
|
||||
companion object {
|
||||
fun from(banner: RecommendationBanner): RecommendationBannerResponse {
|
||||
return RecommendationBannerResponse(
|
||||
imageUrl = banner.imageUrl,
|
||||
eventItem = banner.eventItem,
|
||||
creatorId = banner.creatorId,
|
||||
seriesId = banner.seriesId,
|
||||
link = banner.link
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,9 +4,9 @@ import kr.co.vividnext.sodalive.event.EventItem
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||
import kr.co.vividnext.sodalive.member.contentpreference.isAdultVisibleByPolicy
|
||||
import kr.co.vividnext.sodalive.v2.api.common.dto.RecommendationBannerResponse
|
||||
import kr.co.vividnext.sodalive.v2.api.home.dto.recommendation.HomeActiveCreatorItem
|
||||
import kr.co.vividnext.sodalive.v2.api.home.dto.recommendation.HomeAiCharacterItem
|
||||
import kr.co.vividnext.sodalive.v2.api.home.dto.recommendation.HomeBannerItem
|
||||
import kr.co.vividnext.sodalive.v2.api.home.dto.recommendation.HomeCreatorItem
|
||||
import kr.co.vividnext.sodalive.v2.api.home.dto.recommendation.HomeFirstAudioContentItem
|
||||
import kr.co.vividnext.sodalive.v2.api.home.dto.recommendation.HomeGenreCreatorGroupItem
|
||||
@@ -17,6 +17,7 @@ import kr.co.vividnext.sodalive.v2.api.home.dto.recommendation.HomeRecommendatio
|
||||
import kr.co.vividnext.sodalive.v2.api.home.dto.recommendation.imageUrl
|
||||
import kr.co.vividnext.sodalive.v2.api.home.dto.recommendation.profileImageUrl
|
||||
import kr.co.vividnext.sodalive.v2.api.home.dto.recommendation.toUtcIso
|
||||
import kr.co.vividnext.sodalive.v2.common.domain.RecommendationBanner
|
||||
import kr.co.vividnext.sodalive.v2.recommendation.application.HomeRecommendationQueryService
|
||||
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
|
||||
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeBannerRecommendationRecord
|
||||
@@ -53,7 +54,8 @@ class HomeRecommendationFacade(
|
||||
memberId = member?.id,
|
||||
includeAdultLives = includeAdult
|
||||
).map { it.toItem() },
|
||||
banners = queryService.findHomeBanners(HOME_BANNER_LIMIT, member?.id).map { it.toItem() },
|
||||
banners = queryService.findHomeBanners(HOME_BANNER_LIMIT, member?.id)
|
||||
.map { RecommendationBannerResponse.from(it.toBanner()) },
|
||||
recentlyActiveCreators = queryService.findRecentlyActiveCreators(
|
||||
HOME_ACTIVE_CREATOR_LIMIT,
|
||||
member?.id,
|
||||
@@ -235,7 +237,7 @@ class HomeRecommendationFacade(
|
||||
creatorProfileImage = profileImageUrl(cloudFrontHost, creatorProfileImage)
|
||||
)
|
||||
|
||||
private fun HomeBannerRecommendationRecord.toItem() = HomeBannerItem(
|
||||
private fun HomeBannerRecommendationRecord.toBanner() = RecommendationBanner(
|
||||
imageUrl = imageUrl(cloudFrontHost, thumbnailImage) ?: "",
|
||||
eventItem = eventItem(),
|
||||
creatorId = creatorId,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package kr.co.vividnext.sodalive.v2.api.home.dto.recommendation
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import kr.co.vividnext.sodalive.event.EventItem
|
||||
import kr.co.vividnext.sodalive.v2.api.common.dto.RecommendationBannerResponse
|
||||
import java.time.LocalDateTime
|
||||
import java.time.ZoneOffset
|
||||
|
||||
@@ -19,7 +19,7 @@ internal fun profileImageUrl(cloudFrontHost: String, path: String?): String {
|
||||
|
||||
data class HomeRecommendationResponse(
|
||||
val lives: List<HomeLiveItem>,
|
||||
val banners: List<HomeBannerItem>,
|
||||
val banners: List<RecommendationBannerResponse>,
|
||||
val recentlyActiveCreators: List<HomeActiveCreatorItem>,
|
||||
val recentDebutCreators: List<HomeCreatorItem>,
|
||||
val firstAudioContents: List<HomeFirstAudioContentItem>,
|
||||
@@ -35,14 +35,6 @@ data class HomeLiveItem(
|
||||
val creatorProfileImage: String
|
||||
)
|
||||
|
||||
data class HomeBannerItem(
|
||||
val imageUrl: String,
|
||||
val eventItem: EventItem?,
|
||||
val creatorId: Long?,
|
||||
val seriesId: Long?,
|
||||
val link: String?
|
||||
)
|
||||
|
||||
data class HomeActiveCreatorItem(
|
||||
val creatorNickname: String,
|
||||
val creatorProfileImage: String,
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package kr.co.vividnext.sodalive.v2.common.domain
|
||||
|
||||
import kr.co.vividnext.sodalive.event.EventItem
|
||||
|
||||
data class RecommendationBanner(
|
||||
val imageUrl: String,
|
||||
val eventItem: EventItem?,
|
||||
val creatorId: Long?,
|
||||
val seriesId: Long?,
|
||||
val link: String?
|
||||
)
|
||||
@@ -1,6 +1,7 @@
|
||||
package kr.co.vividnext.sodalive.v2.api.home.dto.recommendation
|
||||
|
||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||
import kr.co.vividnext.sodalive.v2.api.common.dto.RecommendationBannerResponse
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertFalse
|
||||
import org.junit.jupiter.api.Test
|
||||
@@ -12,7 +13,15 @@ class HomeRecommendationResponseTest {
|
||||
fun shouldSerializeNewHomeRecommendationFields() {
|
||||
val response = HomeRecommendationResponse(
|
||||
lives = emptyList(),
|
||||
banners = emptyList(),
|
||||
banners = listOf(
|
||||
RecommendationBannerResponse(
|
||||
imageUrl = "https://cdn.test/banner.png",
|
||||
eventItem = null,
|
||||
creatorId = 11L,
|
||||
seriesId = 12L,
|
||||
link = "https://banner.test"
|
||||
)
|
||||
),
|
||||
recentlyActiveCreators = emptyList(),
|
||||
recentDebutCreators = emptyList(),
|
||||
firstAudioContents = listOf(
|
||||
@@ -83,6 +92,12 @@ class HomeRecommendationResponseTest {
|
||||
|
||||
val json = objectMapper.readTree(objectMapper.writeValueAsString(response))
|
||||
|
||||
assertEquals("https://cdn.test/banner.png", json["banners"][0]["imageUrl"].asText())
|
||||
assertEquals(true, json["banners"][0]["eventItem"].isNull)
|
||||
assertEquals(11L, json["banners"][0]["creatorId"].asLong())
|
||||
assertEquals(12L, json["banners"][0]["seriesId"].asLong())
|
||||
assertEquals("https://banner.test", json["banners"][0]["link"].asText())
|
||||
assertEquals(5, json["banners"][0].size())
|
||||
assertEquals(9, json["firstAudioContents"][0]["price"].asInt())
|
||||
assertEquals(true, json["firstAudioContents"][0]["isPointAvailable"].asBoolean())
|
||||
assertFalse(json["firstAudioContents"][0].has("pointAvailable"))
|
||||
|
||||
Reference in New Issue
Block a user