| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- //
- // Project.swift
- // Todos
- //
- // Created by Sam Jaffe on 2/28/26.
- //
- import Foundation
- import SwiftData
- @Model
- final class Project: Codable, Ordered {
- var sortOrder: Int = 0
- 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 hdr = String(repeating: " ", count: indent)
- var rval = hdr + "\(name):\n"
- if !category.isEmpty {
- rval += hdr + " # 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)
- }
- }
|