diff --git a/JanitorialQC/API/APIModels.swift b/JanitorialQC/API/APIModels.swift index e6da3dc..8264558 100644 --- a/JanitorialQC/API/APIModels.swift +++ b/JanitorialQC/API/APIModels.swift @@ -71,21 +71,25 @@ struct APIResponse: Decodable, Sendable { struct APIUser: Decodable, Sendable { let id: Int let username: String + let fullName: String // empty string when not set; never nil let email: String let role: String let createdAt: String? - var displayName: String { username } + /// Returns full_name when set, otherwise falls back to username. + /// Mirrors User.display_name on the server. + var displayName: String { fullName.isEmpty ? username : fullName } nonisolated init(from decoder: any Decoder) throws { let c = try decoder.container(keyedBy: CodingKeys.self) - id = try c.decode(Int.self, forKey: .id) - username = try c.decode(String.self, forKey: .username) - email = try c.decode(String.self, forKey: .email) - role = try c.decode(String.self, forKey: .role) + id = try c.decode(Int.self, forKey: .id) + username = try c.decode(String.self, forKey: .username) + fullName = (try? c.decode(String.self, forKey: .fullName)) ?? "" + email = try c.decode(String.self, forKey: .email) + role = try c.decode(String.self, forKey: .role) createdAt = try? c.decode(String.self, forKey: .createdAt) } private enum CodingKeys: String, CodingKey { - case id, username, email, role, createdAt + case id, username, fullName, email, role, createdAt } }