feat(home): 홈 추천 통합 응답 DTO를 추가한다
This commit is contained in:
@@ -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
|
||||||
|
)
|
||||||
@@ -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
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user