import Foundation /// 升级对账结果。 /// - `success`: 设备实际版本 == 目标版本,已成功上报 /// - `versionMismatch`: 实际版本 ≠ 目标版本,已上报 failure /// - `nil`: 30 天 TTL 过期未上报,保留为审计轨迹 public enum UpgradeOutcome: String, Codable, Equatable { case success case versionMismatch = "version_mismatch" } /// OTA 升级记录。复合主键 `(sn, firmwareId)`。 /// 与 RN `bleStore.upgradeRecords` 1:1 对齐。 public struct UpgradeRecord: Codable, Equatable { public let sn: String public let firmwareId: String public let fromVersion: String public let targetVersion: String /// 触发 OTA 烧录的时间戳(毫秒,与 RN `Date.now()` 同口径) public let triggeredAt: Int64 public let reported: Bool public let reportedAt: Int64? public let outcome: UpgradeOutcome? public init( sn: String, firmwareId: String, fromVersion: String, targetVersion: String, triggeredAt: Int64, reported: Bool = false, reportedAt: Int64? = nil, outcome: UpgradeOutcome? = nil ) { self.sn = sn self.firmwareId = firmwareId self.fromVersion = fromVersion self.targetVersion = targetVersion self.triggeredAt = triggeredAt self.reported = reported self.reportedAt = reportedAt self.outcome = outcome } }