// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved. import Foundation import GRDB import SessionUtilitiesKit public struct PendingReadReceipt: Codable, Equatable, Hashable, FetchableRecord, PersistableRecord, TableRecord, ColumnExpressible { public static var databaseTableName: String { "pendingReadReceipt" } public static let threadForeignKey = ForeignKey([Columns.threadId], to: [SessionThread.Columns.id]) public typealias Columns = CodingKeys public enum CodingKeys: String, CodingKey, ColumnExpression { case threadId case interactionTimestampMs case readTimestampMs case serverExpirationTimestamp } /// The id for the thread this ReadReceipt belongs to public let threadId: String /// The timestamp in milliseconds since epoch for the interaction this read receipt relates to public let interactionTimestampMs: Int64 /// The timestamp in milliseconds since epoch that the interaction this read receipt relates to was read public let readTimestampMs: Int64 /// The timestamp for when this message will expire on the server (will be used for garbage collection) public let serverExpirationTimestamp: TimeInterval // MARK: - Initialization public init( threadId: String, interactionTimestampMs: Int64, readTimestampMs: Int64, serverExpirationTimestamp: TimeInterval ) { self.threadId = threadId self.interactionTimestampMs = interactionTimestampMs self.readTimestampMs = readTimestampMs self.serverExpirationTimestamp = serverExpirationTimestamp } }