Files
sodalive-ios/SodaLive/Sources/V2/Main/Home/Recommendation/Models/MainHomeRecommendationResponse.swift

103 lines
2.7 KiB
Swift

import Foundation
struct HomeRecommendationResponse: Decodable {
let lives: [HomeLiveItem]
let banners: [RecommendationBannerResponse]
let recentlyActiveCreators: [HomeActiveCreatorItem]
let recentDebutCreators: [HomeCreatorItem]
let aiCharacters: [HomeAiCharacterItem]
let genreCreators: [HomeGenreCreatorGroupItem]
let cheerCreators: [HomeCreatorItem]
let popularCommunityPosts: [HomePopularCommunityPostItem]
}
struct HomeLiveItem: Decodable, Hashable {
let roomId: Int
let creatorNickname: String
let creatorProfileImage: String
}
struct RecommendationBannerResponse: Decodable, Hashable {
let imageUrl: String
let eventItem: EventItem?
let creatorId: Int?
let seriesId: Int?
let link: String?
}
struct HomeActiveCreatorItem: Decodable, Hashable {
let creatorId: Int
let creatorNickname: String
let creatorProfileImage: String
let activityType: RecommendedActivityType
let activityAt: String
let targetId: Int?
}
enum HomeActiveCreatorTapDestination: Equatable {
case live(Int)
case creator(Int)
case content(Int)
case communityPost(Int)
}
extension HomeActiveCreatorItem {
var activeCreatorTapDestination: HomeActiveCreatorTapDestination? {
switch activityType {
case .live:
if let targetId {
return .live(targetId)
}
return creatorId > 0 ? .creator(creatorId) : nil
case .liveReplay, .audio:
return targetId.map(HomeActiveCreatorTapDestination.content)
case .community:
return targetId.map(HomeActiveCreatorTapDestination.communityPost)
case .unknown:
return nil
}
}
}
struct HomeCreatorItem: Decodable, Hashable {
let creatorId: Int
let creatorNickname: String
let creatorProfileImage: String
}
struct HomeAiCharacterItem: Decodable, Hashable {
let characterId: Int
let creatorId: Int
let name: String
let description: String
let profileImage: String?
let totalChatCount: Int
let originalWorkTitle: String?
}
struct HomeGenreCreatorGroupItem: Decodable, Hashable {
let genreName: String
let creators: [HomeCreatorItem]
}
struct HomePopularCommunityPostItem: Decodable, Hashable {
let postId: Int
let creatorId: Int
let creatorNickname: String
let creatorProfileImage: String?
let content: String
let imageUrl: String?
let audioUrl: String?
let price: Int
let existOrdered: Bool
let likeCount: Int
let commentCount: Int
let createdAt: String
let isLiked: Bool
func relativeCreatedAtText(now: Date = Date()) -> String {
DateParser.relativeTimeText(fromUTC: createdAt, fallback: createdAt, now: now)
}
}