SwiftUI + SwiftData + iCloud, Apple Speech transcription (German), audio recording, summarization service protocol (LLM-ready), localization scaffolding (EN/DE/ES/FR), basic tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
42 lines
820 B
Swift
42 lines
820 B
Swift
import Foundation
|
|
import SwiftData
|
|
|
|
@Model
|
|
final class DiaryEntry {
|
|
var date: Date
|
|
var summary: String?
|
|
var isSummaryGenerated: Bool
|
|
@Relationship(deleteRule: .cascade, inverse: \VoiceMemo.entry)
|
|
var memos: [VoiceMemo]
|
|
var createdAt: Date
|
|
var updatedAt: Date
|
|
|
|
init(date: Date) {
|
|
self.date = Calendar.current.startOfDay(for: date)
|
|
self.summary = nil
|
|
self.isSummaryGenerated = false
|
|
self.memos = []
|
|
self.createdAt = .now
|
|
self.updatedAt = .now
|
|
}
|
|
|
|
var combinedTranscript: String {
|
|
memos
|
|
.sorted { $0.recordedAt < $1.recordedAt }
|
|
.compactMap(\.transcript)
|
|
.joined(separator: "\n\n")
|
|
}
|
|
|
|
var hasMemos: Bool {
|
|
!memos.isEmpty
|
|
}
|
|
|
|
var hasTranscripts: Bool {
|
|
memos.contains { $0.transcript != nil }
|
|
}
|
|
|
|
var formattedDate: String {
|
|
date.formatted(.dateTime.day().month(.wide).year())
|
|
}
|
|
}
|