TM-SGNL-iOS/SignalServiceKit/Storage/PendingReadReceiptRecord.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

50 lines
2 KiB
Swift

//
// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
public import GRDB
public import LibSignalClient
public struct PendingReadReceiptRecord: Codable, FetchableRecord, PersistableRecord {
public static let databaseTableName = "pending_read_receipts"
public private(set) var id: Int64?
public let threadId: Int64
public let messageTimestamp: Int64
public let messageUniqueId: String?
public let authorAciString: String?
public let authorPhoneNumber: String?
private enum CodingKeys: String, CodingKey {
case id
case threadId
case messageTimestamp
case messageUniqueId
case authorAciString = "authorUuid"
case authorPhoneNumber
}
public init(threadId: Int64, messageTimestamp: Int64, messageUniqueId: String?, authorPhoneNumber: String?, authorAci: Aci?) {
self.threadId = threadId
self.messageTimestamp = messageTimestamp
self.messageUniqueId = messageUniqueId
self.authorAciString = authorAci?.serviceIdUppercaseString
self.authorPhoneNumber = (authorAci == nil) ? authorPhoneNumber : nil
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.id = try container.decodeIfPresent(Int64.self, forKey: .id)
self.threadId = try container.decode(Int64.self, forKey: .threadId)
self.messageTimestamp = try container.decode(Int64.self, forKey: .messageTimestamp)
self.messageUniqueId = try container.decodeIfPresent(String.self, forKey: .messageUniqueId)
self.authorAciString = try container.decodeIfPresent(String.self, forKey: .authorAciString)
self.authorPhoneNumber = (self.authorAciString == nil) ? try container.decodeIfPresent(String.self, forKey: .authorPhoneNumber) : nil
}
mutating public func didInsert(with rowID: Int64, for column: String?) {
self.id = rowID
}
}