Fix Reset All Data crash by using safe cascade deletion
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user