Fix Reset All Data crash by using safe cascade deletion

This commit is contained in:
alexandrev-tibco
2026-02-26 10:42:35 +01:00
parent c2dcaf07c7
commit 6db6659330
2 changed files with 6 additions and 5 deletions
+4 -2
View File
@@ -3,7 +3,7 @@ import SwiftData
struct DefaultDataService {
static func createDefaultTags(context: ModelContext) {
static func createDefaultTags(context: ModelContext, saveImmediately: Bool = true) {
let defaults: [(name: String, nameEN: String, color: String, maxPerWeek: Int?, noConsecutive: Bool, noDuplicateInDay: Bool, mealTypeRestriction: String?, sortOrder: Int)] = [
("Carne", "Meat", "#E74C3C", 3, true, true, nil, 0),
("Pescado", "Fish", "#3498DB", 2, true, true, nil, 1),
@@ -32,7 +32,9 @@ struct DefaultDataService {
context.insert(tag)
}
try? context.save()
if saveImmediately {
try? context.save()
}
}
static func createDefaultSettings(context: ModelContext) {
+2 -3
View File
@@ -68,11 +68,11 @@ final class SettingsViewModel: ObservableObject {
func resetAllData(context: ModelContext) {
do {
try deleteAll(of: MealSlot.self, in: context)
// WeekPlan cascades MealSlot, so deleting both can corrupt the reset flow.
try deleteAll(of: WeekPlan.self, in: context)
try deleteAll(of: Dish.self, in: context)
try deleteAll(of: Tag.self, in: context)
DefaultDataService.createDefaultTags(context: context)
DefaultDataService.createDefaultTags(context: context, saveImmediately: false)
let settingsDescriptor = FetchDescriptor<AppSettings>()
if let existingSettings = try context.fetch(settingsDescriptor).first {
@@ -98,7 +98,6 @@ final class SettingsViewModel: ObservableObject {
for model in models {
context.delete(model)
}
try context.save()
}
private func showToastMessage(_ message: String) {