Visual_Novel_iOS/crush/Crush/Src/Models/DiscoverModels.swift

237 lines
4.8 KiB
Swift
Raw Normal View History

2025-10-09 10:29:35 +00:00
//
// DiscoverModels.swift
// Crush
//
// Created by Leon on 2025/9/10.
//
// MARK: - Discover Home info
struct DiscoverHomeInfo:Codable{
var aiChatRankTop3List:[AIDiscoverTop]?
var aiHeartbeatRankTop3List:[AIDiscoverTop]?
var aiGiftRankTop3List:[AIDiscoverTop]?
var advertiseList: [AdvertiseOutput]?
}
/// 广
struct AdvertiseOutput: Codable {
/// 广
var name: String?
/// 广
var icon: String?
///
var jumpLink: String?
///
var showStartTime: String?
///
var showEndTime: String?
///
var ext: String?
///
var sort: Int?
/// 使WEB/ANDROID/IOS
var endpoint: String?
/// (1.,0.)
var isGlobal: Int?
}
/// AI Top3
struct AIDiscoverTop: Codable {
///
var rankNo: Int?
/// AI id
var aiId: Int?
///
var nickname: String?
/// (0=,1=,2=)
var sex: Sex?
///
var headImg: String?
///
var birthday: Int?
///
var roleName: String?
///
var characterName: String?
///
var tagName: String?
///
var introduction: String?
///
var homeImageUrl: String?
var likedNum: Int?
// MARK: Chat
///
var chatNum: Int?
// MARK: HeartBeat
//
var heartbeatValTotal: CGFloat?
// MARK: Gift
var giftCoinNum: Int?
func formateRankDisplayString()->String{
let rank = rankNo ?? 1
if rank == 1{
return "1st"
}else if rank == 2{
return "2nd"
}else {
return "3rd"
}
}
func formateChatDisplay() -> String{
return String.displayDouble(Double(chatNum ?? 0))
}
func formateHeartbeatDisplay() ->String {
return "\(heartbeatValTotal ?? 0.0)"
}
func formateGiftDisplay() ->String{
return String.displayDouble(Double((giftCoinNum ?? 0))*0.01)
}
}
// MARK: - Daily check
struct Day7CheckList: Codable {
///
var continuousDays: Int?
var list: [Day7CheckListItem]?
}
struct Day7CheckListItem:Codable{
/// PST yyyy-MM-dd
var dayStr: String?
///
var signIn: Bool?
/// coin
var coinNum: Int?
}
// MARK: - Meet Home
class MeetCard: Codable{
/// AI id
var aiId: Int?
///
var nickname: String?
/// (0=, 1=, 2=)
var sex: Sex?
///
var headImg: String?
///
var age: Int?
///
var likedCount: Int?
///
var role: String?
///
var character: String?
///
var tag: String?
///
var introduction: String?
///
var imageUrl: String?
var albumList:[AlbumPhotoItem]?
var heartbeatVal: CGFloat?
// MARK: Custom property
var secretAdmirer : Bool?
}
struct MeetMatchInfo: Codable{
var sex: Sex?
var introduction: String?
var characterName: String?
var likedCount: Int?
var aiId: Int?
var userId: Int?
var birthday: Int? //
var roleName: String?
var tagName: String?
var homeImageUrl: String?
var liked: Bool?
var headImg: String?
var nickname: String?
}
struct MeetCardReportResponse: Codable{
///
var bd: Bool?
///
var rc: Bool?
}
struct MeetReportAdmirerReturnAlbum: Codable{
var aiId: Int?
var albumId: Int?
var width: String?
var height: String?
var img1: String?
var img2: String?
var img3: String?
}
// MARK: - Request
enum AIRoleListRequestAge: String, Codable{
/// 18-24
case AGE_1
/// 25-34
case AGE_2
/// 35-44
case AGE_3
/// 45-54
case AGE_4
/// >54
case AGE_5
var localized: String?{
switch self {
case .AGE_1:
return "18-24"
case .AGE_2:
return "25-34"
case .AGE_3:
return "35-44"
case .AGE_4:
return "45-54"
case .AGE_5:
return ">54"
}
}
}
struct AIRoleListRequest: Codable{
var pn = 1
var ps = 20
/// aiId
var exList: [Int]?
// var sex: [Sex]? //
var sex: Sex? //
var age : AIRoleListRequestAge?
var random: Bool?
var roleCodeList: [String]?
/// Code
var characterCodeList: [String]?
/// code
var tagCodeList: [String]?
}