fix search model

This commit is contained in:
cheykrym 2025-10-21 01:04:28 +03:00
parent c81337646a
commit 2baf7ae2cb
2 changed files with 33 additions and 21 deletions

View File

@ -6,10 +6,10 @@ struct SearchDataPayload: Decodable {
struct UserSearchResult: Decodable, Identifiable {
let userId: UUID
let login: String
let fullName: String?
let customName: String?
let createdAt: Date?
// let login: String
// let fullName: String?
// let customName: String?
// let createdAt: Date?
let profile: SearchProfile?
var id: UUID { userId }
@ -17,25 +17,36 @@ struct UserSearchResult: Decodable, Identifiable {
struct SearchProfile: Decodable {
let userId: UUID
let login: String?
let login: String
let fullName: String?
let customName: String?
let bio: String?
let isVerified: Bool
let isSystem: Bool
let lastSeen: Int?
let createdAt: Date?
}
extension UserSearchResult {
var officialFullName: String? {
trimmed(fullName) ?? trimmed(profile?.fullName)
trimmed(profile?.fullName)
}
var preferredCustomName: String? {
trimmed(customName) ?? trimmed(profile?.customName)
trimmed(profile?.customName)
}
var login: String? {
trimmed(profile?.login)
}
var loginHandle: String {
"@\(login)"
if let login {
return "@\(login)"
}
return "@\(userId.uuidString)"
}
var displayName: String {
@ -45,20 +56,17 @@ extension UserSearchResult {
if let custom = preferredCustomName {
return custom
}
if let profileFull = trimmed(profile?.fullName) {
return profileFull
if let login = login {
return "@\(login)"
}
if let profileCustom = trimmed(profile?.customName) {
return profileCustom
}
return loginHandle
return "@\(userId.uuidString)"
}
var avatarInitial: String {
let source = officialFullName
?? preferredCustomName
?? trimmed(profile?.login)
?? login
?? userId.uuidString
if let character = source.first(where: { !$0.isWhitespace && $0 != "@" }) {
return String(character).uppercased()
@ -67,7 +75,11 @@ extension UserSearchResult {
}
var isOfficial: Bool {
officialFullName != nil
profile?.isVerified ?? false
}
var createdAt: Date? {
profile?.createdAt
}
private func trimmed(_ value: String?) -> String? {

View File

@ -583,7 +583,7 @@ private extension ChatsTab {
return custom
}
if let profileLogin = user.profile?.login?.trimmingCharacters(in: .whitespacesAndNewlines), !profileLogin.isEmpty {
if let profileLogin = user.profile?.login.trimmingCharacters(in: .whitespacesAndNewlines), !profileLogin.isEmpty {
let handle = "@\(profileLogin)"
if handle != user.loginHandle {
return handle
@ -630,9 +630,9 @@ private extension ChatsTab {
func chatProfile(from user: UserSearchResult) -> ChatProfile {
let profile = user.profile
let login = profile?.login ?? user.login
let fullName = user.officialFullName ?? user.fullName ?? profile?.fullName
let customName = user.preferredCustomName ?? user.customName ?? profile?.customName
let login = user.login ?? profile?.login
let fullName = user.officialFullName ?? profile?.fullName
let customName = user.preferredCustomName ?? profile?.customName
return ChatProfile(
userId: user.userId.uuidString,
@ -641,7 +641,7 @@ private extension ChatsTab {
customName: customName,
bio: profile?.bio,
lastSeen: profile?.lastSeen,
createdAt: profile?.createdAt
createdAt: user.createdAt ?? profile?.createdAt
)
}