feat(home): 홈 추천 통합 응답 DTO를 추가한다

This commit is contained in:
2026-06-01 13:49:03 +09:00
parent 227a329ae1
commit 09cba1ffeb
2 changed files with 108 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
package kr.co.vividnext.sodalive.v2.api.home.dto
data class HomeRecommendationPageResponse<T>(
val items: List<T>,
val page: Int,
val size: Int,
val hasNext: Boolean
)

View File

@@ -0,0 +1,100 @@
package kr.co.vividnext.sodalive.v2.api.home.dto
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
private val KST_ZONE: ZoneId = ZoneId.of("Asia/Seoul")
internal fun LocalDateTime.toUtcIso(): String {
val instant = this.atZone(KST_ZONE).withZoneSameInstant(ZoneOffset.UTC).toInstant()
return DateTimeFormatter.ISO_INSTANT.format(instant)
}
internal fun imageUrl(cloudFrontHost: String, path: String?): String? {
return if (path.isNullOrBlank()) null else "$cloudFrontHost/$path"
}
data class HomeRecommendationResponse(
val lives: List<HomeLiveItem>,
val banners: List<HomeBannerItem>,
val recentlyActiveCreators: List<HomeActiveCreatorItem>,
val recentDebutCreators: List<HomeCreatorItem>,
val firstAudioContents: List<HomeFirstAudioContentItem>,
val aiCharacters: List<HomeAiCharacterItem>,
val genreCreators: List<HomeGenreCreatorGroupItem>,
val cheerCreators: List<HomeCreatorItem>,
val popularCommunities: List<HomePopularCommunityItem>
)
data class HomeLiveItem(
val liveRoomId: Long,
val creatorId: Long,
val creatorNickname: String,
val creatorProfileImage: String?,
val title: String,
val coverImage: String?,
val beginDateTime: String,
val channelName: String
)
data class HomeBannerItem(
val bannerId: Long,
val type: String,
val thumbnailImage: String?,
val eventId: Long?,
val creatorId: Long?,
val seriesId: Long?,
val link: String?
)
data class HomeActiveCreatorItem(
val creatorId: Long,
val creatorNickname: String,
val creatorProfileImage: String?,
val activityType: String,
val activityAt: String,
val targetId: Long?
)
data class HomeCreatorItem(
val creatorId: Long,
val creatorNickname: String,
val creatorProfileImage: String?
)
data class HomeFirstAudioContentItem(
val contentId: Long,
val creatorId: Long,
val creatorNickname: String,
val creatorProfileImage: String?,
val title: String,
val coverImage: String?,
val releaseDate: String
)
data class HomeAiCharacterItem(
val characterId: Long,
val name: String,
val description: String,
val totalChatCount: Long,
val originalWorkTitle: String?
)
data class HomeGenreCreatorGroupItem(
val genreId: Long,
val genreName: String,
val creators: List<HomeCreatorItem>
)
data class HomePopularCommunityItem(
val communityId: Long,
val creatorId: Long,
val creatorNickname: String,
val creatorProfileImage: String?,
val content: String,
val createdAt: String,
val likeCount: Long,
val commentCount: Long
)