Migrate from Core Data to SwiftData
- Replace Core Data with SwiftData for iOS 18+ - Create MoodEntryModel as @Model class replacing MoodEntry entity - Create SharedModelContainer for App Group container sharing - Create DataController with CRUD extensions replacing PersistenceController - Update all views and view models to use MoodEntryModel - Update widget extension to use SwiftData - Remove old Core Data files (Persistence*.swift, .xcdatamodeld) - Add EntryType enum with all entry type cases - Fix widget label truncation with proper spacing and text scaling 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -119,20 +119,14 @@ struct SettingsView: View {
|
||||
if columns.count != 7 {
|
||||
continue
|
||||
}
|
||||
let moodEntry = MoodEntry(context: PersistenceController.shared.viewContext)
|
||||
moodEntry.canDelete = Bool(columns[0])!
|
||||
moodEntry.canEdit = Bool(columns[1])!
|
||||
moodEntry.entryType = Int16(columns[2])!
|
||||
moodEntry.forDate = dateFormatter.date(from: columns[3])!
|
||||
moodEntry.moodValue = Int16(columns[4])!
|
||||
moodEntry.timestamp = dateFormatter.date(from: columns[5])!
|
||||
|
||||
let localTime = dateFormatter.date(from: columns[3])!
|
||||
moodEntry.weekDay = Int16(Calendar.current.component(.weekday, from: localTime))
|
||||
// let _ = print("import info: ", columns[3], dateFormatter.date(from: columns[3]), localTime, Int16(Calendar.current.component(.weekday, from: localTime)))
|
||||
try! PersistenceController.shared.viewContext.save()
|
||||
let forDate = dateFormatter.date(from: columns[3])!
|
||||
let moodValue = Int(columns[4])!
|
||||
let mood = Mood(rawValue: moodValue) ?? .missing
|
||||
let entryType = EntryType(rawValue: Int(columns[2])!) ?? .listView
|
||||
|
||||
DataController.shared.add(mood: mood, forDate: forDate, entryType: entryType)
|
||||
}
|
||||
PersistenceController.shared.saveAndRunDataListerners()
|
||||
DataController.shared.saveAndRunDataListeners()
|
||||
EventLogger.log(event: "import_file")
|
||||
} else {
|
||||
EventLogger.log(event: "error_import_file")
|
||||
@@ -201,7 +195,7 @@ struct SettingsView: View {
|
||||
ZStack {
|
||||
theme.currentTheme.secondaryBGColor
|
||||
Button(action: {
|
||||
PersistenceController.shared.populateTestData()
|
||||
DataController.shared.populateTestData()
|
||||
}, label: {
|
||||
Text("Add test data")
|
||||
.foregroundColor(textColor)
|
||||
@@ -257,7 +251,7 @@ struct SettingsView: View {
|
||||
ZStack {
|
||||
theme.currentTheme.secondaryBGColor
|
||||
Button(action: {
|
||||
PersistenceController.shared.clearDB()
|
||||
DataController.shared.clearDB()
|
||||
}, label: {
|
||||
Text("Clear DB")
|
||||
.foregroundColor(textColor)
|
||||
@@ -267,12 +261,12 @@ struct SettingsView: View {
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
|
||||
}
|
||||
|
||||
|
||||
private var fixWeekday: some View {
|
||||
ZStack {
|
||||
theme.currentTheme.secondaryBGColor
|
||||
Button(action: {
|
||||
PersistenceController.shared.fixWrongWeekdays()
|
||||
DataController.shared.fixWrongWeekdays()
|
||||
}, label: {
|
||||
Text("Fix Weekday")
|
||||
.foregroundColor(textColor)
|
||||
@@ -576,28 +570,28 @@ struct SettingsView: View {
|
||||
struct TextFile: FileDocument {
|
||||
// tell the system we support only plain text
|
||||
static var readableContentTypes = [UTType.plainText]
|
||||
|
||||
|
||||
// by default our document is empty
|
||||
var text = ""
|
||||
|
||||
|
||||
// a simple initializer that creates new, empty documents
|
||||
@MainActor
|
||||
init() {
|
||||
let entries = PersistenceController.shared.getData(startDate: Date(timeIntervalSince1970: 0),
|
||||
endDate: Date(),
|
||||
includedDays: [])
|
||||
|
||||
let entries = DataController.shared.getData(startDate: Date(timeIntervalSince1970: 0),
|
||||
endDate: Date(),
|
||||
includedDays: [])
|
||||
|
||||
var csvString = "canDelete,canEdit,entryType,forDate,moodValue,timestamp,weekDay\n"
|
||||
for entry in entries {
|
||||
let canDelete = entry.canDelete
|
||||
let canEdit = entry.canEdit
|
||||
let entryType = entry.entryType
|
||||
let forDate = entry.forDate!
|
||||
let forDate = entry.forDate
|
||||
let moodValue = entry.moodValue
|
||||
let timestamp = entry.timestamp!
|
||||
let timestamp = entry.timestamp
|
||||
let weekDay = entry.weekDay
|
||||
|
||||
|
||||
let dataString = "\(canDelete),\(canEdit),\(entryType),\(String(describing: forDate)),\(moodValue),\(String(describing:timestamp)),\(weekDay)\n"
|
||||
// print("DATA: \(dataString)")
|
||||
csvString = csvString.appending(dataString)
|
||||
}
|
||||
text = csvString
|
||||
|
||||
Reference in New Issue
Block a user