// // LNProfileResponse.swift // Lanu // // Created by OneeChan on 2025/11/12. // import Foundation import AutoCodable enum LNUserGender: Int, Decodable { case unknow = 0 case male = 1 case female = 2 var desc: String { switch self { case .unknow: .init(key: "A00016") case .male: .init(key: "A00014") case .female: .init(key: "A00015") } } } @AutoCodable class LNUserInterestVO: Decodable, Equatable { var code: String = "" var name: String = "" init(code: String, name: String) { self.code = code self.name = name } static func == (lhs: LNUserInterestVO, rhs: LNUserInterestVO) -> Bool { lhs.code == rhs.code && lhs.name == rhs.name } } @AutoCodable class LNUserProfileVO: Decodable, Copyable { var avatar: String = "" var nickname: String = "" var age: Int = 0 var gender: LNUserGender = .unknow var star: Double = 0.0 var area: String = "" var userNo: String = "" var languageNames: [String] = [] var photos: [String] = [] var intro: String = "" var playmate: Bool = false var skills: [LNGameMateSkillVO] = [] var follow: Bool = false var fansCount: Int = 0 var voiceBar: String = "" var birthday: Int = 0 var rated: Bool = false var interests: [LNUserInterestVO] = [] var isAvailable: Bool { !avatar.isEmpty && !nickname.isEmpty } init() { } func update(_ info: LNUserProfileVO) -> Bool { if avatar != info.avatar || userNo != info.userNo || nickname != info.nickname || age != info.age || gender != info.gender || star != info.star || area != info.area || languageNames != info.languageNames || photos != info.photos || intro != info.intro || playmate != info.playmate || skills != info.skills || fansCount != info.fansCount || voiceBar != info.voiceBar || birthday != info.birthday || interests != info.interests { userNo = info.userNo avatar = info.avatar nickname = info.nickname age = info.age gender = info.gender star = info.star area = info.area languageNames = info.languageNames photos = info.photos intro = info.intro playmate = info.playmate skills = info.skills fansCount = info.fansCount voiceBar = info.voiceBar birthday = info.birthday interests = info.interests return true } return false } } @AutoCodable class LNUserRelationStatVO: Decodable { var fansCount: Int = 0 var followCount: Int = 0 var visitCount: Int = 0 init() { } } enum LNUserVoiceBarState: Int, Decodable { case none = 0 case review = 1 case done = 2 } @AutoCodable class LNUserVoiceStateVO: Decodable { var status: LNUserVoiceBarState = .none var voiceBar: String = "" var voiceBarDuration: Int = 0 init() { } } @AutoCodable class LNMyProfileResponseVO: Decodable { var userProfile: LNUserProfileVO? var userFollowStat: LNUserRelationStatVO? var userVoice: LNUserVoiceStateVO? } @AutoCodable class LNUsersProfileResponse: Decodable { var list: [LNUserProfileVO] = [] } @AutoCodable class LNProfileRandomInfoVO: Decodable { var nicknames: [String] = [] var avatars: [String] = [] init() { } } @AutoCodable class LNRandomProfileResponse: Decodable { var male: LNProfileRandomInfoVO = LNProfileRandomInfoVO() var female: LNProfileRandomInfoVO = LNProfileRandomInfoVO() } @AutoCodable class LNUserOnlineStateVO: Decodable { var userNo: String = "" var online: Bool = false } @AutoCodable class LNUserOnlineStateResponse: Decodable { var list: [LNUserOnlineStateVO] = [] }