| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- //
- // Project.swift
- // Todos
- //
- // Created by Sam Jaffe on 2/28/26.
- //
- import Foundation
- import SwiftData
- @Model
- final class Project : Codable {
- var timestamp: Date
- var category: String = ""
- var name: String = "New Project"
- @Relationship(deleteRule: .cascade, inverse:\Task.project)
- var tasks: [Task] = []
-
- init(timestamp: Date) {
- self.timestamp = timestamp
- }
-
- func yaml(_ indent: Int = 0) -> String {
- let h1 = String(repeating: " ", count: indent)
- var rval = h1 + "\(name):\n"
- if !category.isEmpty {
- rval += h1 + " # In Category: \(category)\n"
- }
- rval += tasks.map({ $0.yaml(indent + 1) }).joined()
- return rval
- }
-
- enum CodingKeys : CodingKey { case timestamp, category, name, tasks }
- required init(from decoder: any Decoder) throws {
- let container = try decoder.container(keyedBy: CodingKeys.self)
- timestamp = try container.decode(Date.self, forKey: .timestamp)
- category = try container.decode(String.self, forKey: .category)
- name = try container.decode(String.self, forKey: .name)
- tasks = try container.decode([Task].self, forKey: .tasks)
- }
-
- func encode(to encoder: any Encoder) throws {
- var container = encoder.container(keyedBy: CodingKeys.self)
- try container.encode(timestamp, forKey: .timestamp)
- try container.encode(category, forKey: .category)
- try container.encode(tasks, forKey: .tasks)
- try container.encode(name, forKey: .name)
- }
- }
|