Переглянути джерело

refactor: properly set sortOrder when deserializing

Sam Jaffe 2 тижнів тому
батько
коміт
2bc33d4e38
2 змінених файлів з 10 додано та 4 видалено
  1. 6 3
      Todos/Model/Project.swift
  2. 4 1
      Todos/Model/Task.swift

+ 6 - 3
Todos/Model/Project.swift

@@ -54,16 +54,19 @@ final class Project: Codable, Ordered, Aggregate {
 
   required init(from decoder: any Decoder) throws {
     let container = try decoder.container(keyedBy: CodingKeys.self)
-    category = try container.decode(String.self, forKey: .category)
     name = try container.decode(String.self, forKey: .name)
+    category = try container.decode(String.self, forKey: .category)
     tasks = try container.decode([Task].self, forKey: .tasks)
-    tasks.forEach({ $0.project = self })
+    for (index, item) in tasks.enumerated() {
+      item.project = self
+      item.sortOrder = index
+    }
   }
 
   func encode(to encoder: any Encoder) throws {
     var container = encoder.container(keyedBy: CodingKeys.self)
+    try container.encode(name, forKey: .name)
     try container.encode(category, forKey: .category)
     try container.encode(tasks, forKey: .tasks)
-    try container.encode(name, forKey: .name)
   }
 }

+ 4 - 1
Todos/Model/Task.swift

@@ -70,7 +70,10 @@ final class Task: Codable, Ordered, Aggregate {
     notes = try container.decode(String.self, forKey: .notes)
     status = try container.decode(Status.self, forKey: .status)
     tags.forEach({ $0.task = self })
-    subtasks.forEach({ $0.task = self })
+    for (index, item) in subtasks.enumerated() {
+      item.task = self
+      item.sortOrder = index
+    }
   }
 
   func encode(to encoder: any Encoder) throws {