diff --git a/MealMood/Services/DefaultDataService.swift b/MealMood/Services/DefaultDataService.swift index fc1e783..91bee32 100644 --- a/MealMood/Services/DefaultDataService.swift +++ b/MealMood/Services/DefaultDataService.swift @@ -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) { diff --git a/MealMood/ViewModels/SettingsViewModel.swift b/MealMood/ViewModels/SettingsViewModel.swift index 001f31c..32f31ed 100644 --- a/MealMood/ViewModels/SettingsViewModel.swift +++ b/MealMood/ViewModels/SettingsViewModel.swift @@ -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() 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) {