Fix Reset All Data crash by using safe cascade deletion
This commit is contained in:
@@ -3,7 +3,7 @@ import SwiftData
|
|||||||
|
|
||||||
struct DefaultDataService {
|
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)] = [
|
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),
|
("Carne", "Meat", "#E74C3C", 3, true, true, nil, 0),
|
||||||
("Pescado", "Fish", "#3498DB", 2, true, true, nil, 1),
|
("Pescado", "Fish", "#3498DB", 2, true, true, nil, 1),
|
||||||
@@ -32,7 +32,9 @@ struct DefaultDataService {
|
|||||||
context.insert(tag)
|
context.insert(tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
try? context.save()
|
if saveImmediately {
|
||||||
|
try? context.save()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static func createDefaultSettings(context: ModelContext) {
|
static func createDefaultSettings(context: ModelContext) {
|
||||||
|
|||||||
@@ -68,11 +68,11 @@ final class SettingsViewModel: ObservableObject {
|
|||||||
|
|
||||||
func resetAllData(context: ModelContext) {
|
func resetAllData(context: ModelContext) {
|
||||||
do {
|
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: WeekPlan.self, in: context)
|
||||||
try deleteAll(of: Dish.self, in: context)
|
try deleteAll(of: Dish.self, in: context)
|
||||||
try deleteAll(of: Tag.self, in: context)
|
try deleteAll(of: Tag.self, in: context)
|
||||||
DefaultDataService.createDefaultTags(context: context)
|
DefaultDataService.createDefaultTags(context: context, saveImmediately: false)
|
||||||
|
|
||||||
let settingsDescriptor = FetchDescriptor<AppSettings>()
|
let settingsDescriptor = FetchDescriptor<AppSettings>()
|
||||||
if let existingSettings = try context.fetch(settingsDescriptor).first {
|
if let existingSettings = try context.fetch(settingsDescriptor).first {
|
||||||
@@ -98,7 +98,6 @@ final class SettingsViewModel: ObservableObject {
|
|||||||
for model in models {
|
for model in models {
|
||||||
context.delete(model)
|
context.delete(model)
|
||||||
}
|
}
|
||||||
try context.save()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func showToastMessage(_ message: String) {
|
private func showToastMessage(_ message: String) {
|
||||||
|
|||||||
Reference in New Issue
Block a user