53 lines
1.9 KiB
Swift
53 lines
1.9 KiB
Swift
import Foundation
|
|
|
|
struct ChatMessage: Identifiable {
|
|
let messageId: Int
|
|
let taskId: Int
|
|
let senderUserId: Int
|
|
let senderType: String // "customer" or "worker"
|
|
let senderName: String
|
|
let text: String
|
|
let createdOn: Date
|
|
let isRead: Bool
|
|
|
|
var id: Int { messageId }
|
|
|
|
/// Manual init for creating messages locally (e.g. WebSocket)
|
|
init(messageId: Int, taskId: Int, senderUserId: Int, senderType: String,
|
|
senderName: String, text: String, createdOn: Date, isRead: Bool = false) {
|
|
self.messageId = messageId
|
|
self.taskId = taskId
|
|
self.senderUserId = senderUserId
|
|
self.senderType = senderType
|
|
self.senderName = senderName
|
|
self.text = text
|
|
self.createdOn = createdOn
|
|
self.isRead = isRead
|
|
}
|
|
|
|
/// Decode directly from a [String: Any] dictionary
|
|
init(json: [String: Any]) {
|
|
messageId = WorkTask.parseInt(json["MessageID"] ?? json["messageId"]) ?? 0
|
|
taskId = WorkTask.parseInt(json["TaskID"] ?? json["taskId"]) ?? 0
|
|
senderUserId = WorkTask.parseInt(json["SenderUserID"] ?? json["senderUserId"]) ?? 0
|
|
senderType = (json["SenderType"] as? String) ?? (json["senderType"] as? String) ?? "customer"
|
|
senderName = (json["SenderName"] as? String) ?? (json["senderName"] as? String) ?? ""
|
|
text = (json["Text"] as? String) ?? (json["MessageText"] as? String) ?? (json["text"] as? String) ?? ""
|
|
|
|
let dateVal = json["CreatedOn"] ?? json["timestamp"]
|
|
if let s = dateVal as? String {
|
|
createdOn = APIService.parseDate(s) ?? Date()
|
|
} else {
|
|
createdOn = Date()
|
|
}
|
|
|
|
if let b = json["IsRead"] as? Bool { isRead = b }
|
|
else if let i = json["IsRead"] as? Int { isRead = i == 1 }
|
|
else if let b = json["isRead"] as? Bool { isRead = b }
|
|
else { isRead = false }
|
|
}
|
|
|
|
func isMine(userType: String) -> Bool {
|
|
senderType == userType
|
|
}
|
|
}
|