diff --git a/体己/App/TijiApp.swift b/体己/App/TijiApp.swift index 4efd359..d7fac22 100644 --- a/体己/App/TijiApp.swift +++ b/体己/App/TijiApp.swift @@ -8,6 +8,8 @@ struct TijiApp: App { Indicator.self, Report.self, DiaryEntry.self, + Asset.self, + ChatTurn.self, ]) let config = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false) do { diff --git a/体己/Models/Models.swift b/体己/Models/Models.swift index 1ca19d6..45809a3 100644 --- a/体己/Models/Models.swift +++ b/体己/Models/Models.swift @@ -29,13 +29,20 @@ final class Indicator { var note: String? var capturedAt: Date + var report: Report? + var asset: Asset? + var pinned: Bool = false + init(name: String, value: String, unit: String, range: String, status: IndicatorStatus, note: String? = nil, - capturedAt: Date = .now) { + capturedAt: Date = .now, + report: Report? = nil, + asset: Asset? = nil, + pinned: Bool = false) { self.name = name self.value = value self.unit = unit @@ -43,6 +50,9 @@ final class Indicator { self.statusRaw = status.rawValue self.note = note self.capturedAt = capturedAt + self.report = report + self.asset = asset + self.pinned = pinned } var status: IndicatorStatus { @@ -61,6 +71,12 @@ final class Report { var pageCount: Int var createdAt: Date + @Relationship(deleteRule: .cascade, inverse: \Indicator.report) + var indicators: [Indicator] = [] + + @Relationship(deleteRule: .cascade) + var assets: [Asset] = [] + init(title: String, type: ReportType, reportDate: Date, @@ -88,9 +104,53 @@ final class Report { final class DiaryEntry { var content: String var createdAt: Date + var tags: [String] - init(content: String, createdAt: Date = .now) { + init(content: String, createdAt: Date = .now, tags: [String] = []) { self.content = content self.createdAt = createdAt + self.tags = tags + } +} + +@Model +final class Asset { + var relativePath: String + var mimeType: String + var bytes: Int + var createdAt: Date + + init(relativePath: String, + mimeType: String = "image/jpeg", + bytes: Int = 0, + createdAt: Date = .now) { + self.relativePath = relativePath + self.mimeType = mimeType + self.bytes = bytes + self.createdAt = createdAt + } +} + +@Model +final class ChatTurn { + var question: String + var answer: String + var referencedIndicatorIDs: [String] + var referencedReportIDs: [String] + var createdAt: Date + var decodeRate: Double + + init(question: String, + answer: String, + referencedIndicatorIDs: [String] = [], + referencedReportIDs: [String] = [], + createdAt: Date = .now, + decodeRate: Double = 0) { + self.question = question + self.answer = answer + self.referencedIndicatorIDs = referencedIndicatorIDs + self.referencedReportIDs = referencedReportIDs + self.createdAt = createdAt + self.decodeRate = decodeRate } }