refactor(home-recommendation): 추천 배너 응답을 공통화한다

This commit is contained in:
2026-06-23 16:11:26 +09:00
parent 2dbe339245
commit d387030a38
5 changed files with 58 additions and 14 deletions

View File

@@ -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
)
}
}
}

View File

@@ -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,

View File

@@ -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,

View File

@@ -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?
)