55 lines
1.1 KiB
Swift
55 lines
1.1 KiB
Swift
import Foundation
|
|
import GRDB
|
|
import Martin
|
|
|
|
enum MessageType: String, Codable, DatabaseValueConvertible {
|
|
case chat
|
|
case groupchat
|
|
case error
|
|
}
|
|
|
|
enum MessageContentType: Codable & Equatable, DatabaseValueConvertible {
|
|
case text
|
|
case typing
|
|
}
|
|
|
|
enum MessageStatus: Int, Codable, DatabaseValueConvertible {
|
|
case pending
|
|
case sent
|
|
case error
|
|
}
|
|
|
|
struct Message: DBStorable, Equatable {
|
|
static let databaseTableName = "messages"
|
|
|
|
let id: String
|
|
let type: MessageType
|
|
let date: Date
|
|
let contentType: MessageContentType
|
|
var status: MessageStatus
|
|
|
|
let from: String
|
|
let to: String?
|
|
|
|
let body: String?
|
|
let subject: String?
|
|
let thread: String?
|
|
let oobUrl: String?
|
|
}
|
|
|
|
extension Message {
|
|
func save() async throws {
|
|
try await Database.shared.dbQueue.write { db in
|
|
try self.insert(db)
|
|
}
|
|
}
|
|
|
|
func setStatus(_ status: MessageStatus) async throws {
|
|
try await Database.shared.dbQueue.write { db in
|
|
var updatedMessage = self
|
|
updatedMessage.status = status
|
|
try updatedMessage.update(db, columns: ["status"])
|
|
}
|
|
}
|
|
}
|