mirror of
https://github.com/appwrite/sdk-for-swift.git
synced 2026-04-07 19:17:48 +00:00
153 lines
5.9 KiB
Swift
153 lines
5.9 KiB
Swift
import Foundation
|
|
import JSONCodable
|
|
import AppwriteEnums
|
|
|
|
/// Message
|
|
open class Message: Codable {
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id = "$id"
|
|
case createdAt = "$createdAt"
|
|
case updatedAt = "$updatedAt"
|
|
case providerType = "providerType"
|
|
case topics = "topics"
|
|
case users = "users"
|
|
case targets = "targets"
|
|
case scheduledAt = "scheduledAt"
|
|
case deliveredAt = "deliveredAt"
|
|
case deliveryErrors = "deliveryErrors"
|
|
case deliveredTotal = "deliveredTotal"
|
|
case data = "data"
|
|
case status = "status"
|
|
}
|
|
|
|
/// Message ID.
|
|
public let id: String
|
|
/// Message creation time in ISO 8601 format.
|
|
public let createdAt: String
|
|
/// Message update date in ISO 8601 format.
|
|
public let updatedAt: String
|
|
/// Message provider type.
|
|
public let providerType: String
|
|
/// Topic IDs set as recipients.
|
|
public let topics: [String]
|
|
/// User IDs set as recipients.
|
|
public let users: [String]
|
|
/// Target IDs set as recipients.
|
|
public let targets: [String]
|
|
/// The scheduled time for message.
|
|
public let scheduledAt: String?
|
|
/// The time when the message was delivered.
|
|
public let deliveredAt: String?
|
|
/// Delivery errors if any.
|
|
public let deliveryErrors: [String]?
|
|
/// Number of recipients the message was delivered to.
|
|
public let deliveredTotal: Int
|
|
/// Data of the message.
|
|
public let data: [String: AnyCodable]
|
|
/// Status of delivery.
|
|
public let status: AppwriteEnums.MessageStatus
|
|
|
|
init(
|
|
id: String,
|
|
createdAt: String,
|
|
updatedAt: String,
|
|
providerType: String,
|
|
topics: [String],
|
|
users: [String],
|
|
targets: [String],
|
|
scheduledAt: String?,
|
|
deliveredAt: String?,
|
|
deliveryErrors: [String]?,
|
|
deliveredTotal: Int,
|
|
data: [String: AnyCodable],
|
|
status: AppwriteEnums.MessageStatus
|
|
) {
|
|
self.id = id
|
|
self.createdAt = createdAt
|
|
self.updatedAt = updatedAt
|
|
self.providerType = providerType
|
|
self.topics = topics
|
|
self.users = users
|
|
self.targets = targets
|
|
self.scheduledAt = scheduledAt
|
|
self.deliveredAt = deliveredAt
|
|
self.deliveryErrors = deliveryErrors
|
|
self.deliveredTotal = deliveredTotal
|
|
self.data = data
|
|
self.status = status
|
|
}
|
|
|
|
public required init(from decoder: Decoder) throws {
|
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
|
|
self.id = try container.decode(String.self, forKey: .id)
|
|
self.createdAt = try container.decode(String.self, forKey: .createdAt)
|
|
self.updatedAt = try container.decode(String.self, forKey: .updatedAt)
|
|
self.providerType = try container.decode(String.self, forKey: .providerType)
|
|
self.topics = try container.decode([String].self, forKey: .topics)
|
|
self.users = try container.decode([String].self, forKey: .users)
|
|
self.targets = try container.decode([String].self, forKey: .targets)
|
|
self.scheduledAt = try container.decodeIfPresent(String.self, forKey: .scheduledAt)
|
|
self.deliveredAt = try container.decodeIfPresent(String.self, forKey: .deliveredAt)
|
|
self.deliveryErrors = try container.decodeIfPresent([String].self, forKey: .deliveryErrors)
|
|
self.deliveredTotal = try container.decode(Int.self, forKey: .deliveredTotal)
|
|
self.data = try container.decode([String: AnyCodable].self, forKey: .data)
|
|
self.status = AppwriteEnums.MessageStatus(rawValue: try container.decode(String.self, forKey: .status))!
|
|
}
|
|
|
|
public func encode(to encoder: Encoder) throws {
|
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
|
|
try container.encode(id, forKey: .id)
|
|
try container.encode(createdAt, forKey: .createdAt)
|
|
try container.encode(updatedAt, forKey: .updatedAt)
|
|
try container.encode(providerType, forKey: .providerType)
|
|
try container.encode(topics, forKey: .topics)
|
|
try container.encode(users, forKey: .users)
|
|
try container.encode(targets, forKey: .targets)
|
|
try container.encodeIfPresent(scheduledAt, forKey: .scheduledAt)
|
|
try container.encodeIfPresent(deliveredAt, forKey: .deliveredAt)
|
|
try container.encodeIfPresent(deliveryErrors, forKey: .deliveryErrors)
|
|
try container.encode(deliveredTotal, forKey: .deliveredTotal)
|
|
try container.encode(data, forKey: .data)
|
|
try container.encode(status.rawValue, forKey: .status)
|
|
}
|
|
|
|
public func toMap() -> [String: Any] {
|
|
return [
|
|
"$id": id as Any,
|
|
"$createdAt": createdAt as Any,
|
|
"$updatedAt": updatedAt as Any,
|
|
"providerType": providerType as Any,
|
|
"topics": topics as Any,
|
|
"users": users as Any,
|
|
"targets": targets as Any,
|
|
"scheduledAt": scheduledAt as Any,
|
|
"deliveredAt": deliveredAt as Any,
|
|
"deliveryErrors": deliveryErrors as Any,
|
|
"deliveredTotal": deliveredTotal as Any,
|
|
"data": data as Any,
|
|
"status": status.rawValue as Any
|
|
]
|
|
}
|
|
|
|
public static func from(map: [String: Any] ) -> Message {
|
|
return Message(
|
|
id: map["$id"] as! String,
|
|
createdAt: map["$createdAt"] as! String,
|
|
updatedAt: map["$updatedAt"] as! String,
|
|
providerType: map["providerType"] as! String,
|
|
topics: map["topics"] as! [String],
|
|
users: map["users"] as! [String],
|
|
targets: map["targets"] as! [String],
|
|
scheduledAt: map["scheduledAt"] as? String,
|
|
deliveredAt: map["deliveredAt"] as? String,
|
|
deliveryErrors: map["deliveryErrors"] as? [String],
|
|
deliveredTotal: map["deliveredTotal"] as! Int,
|
|
data: map["data"] as! [String: AnyCodable],
|
|
status: MessageStatus(rawValue: map["status"] as! String)!
|
|
)
|
|
}
|
|
}
|