// // DailyNotificationModel.xcdatamodeld // DailyNotificationPlugin // // Created by Matthew Raymer on 2025-09-22 // Copyright © 2025 TimeSafari. All rights reserved. // import Foundation import CoreData /** * Core Data model for Daily Notification Plugin * Mirrors Android SQLite schema for cross-platform consistency * * @author Matthew Raymer * @version 1.1.0 * @created 2025-09-22 09:22:32 UTC */ // MARK: - ContentCache Entity @objc(ContentCache) public class ContentCache: NSManagedObject { } extension ContentCache { @nonobjc public class func fetchRequest() -> NSFetchRequest { return NSFetchRequest(entityName: "ContentCache") } @NSManaged public var id: String? @NSManaged public var fetchedAt: Date? @NSManaged public var ttlSeconds: Int32 @NSManaged public var payload: Data? @NSManaged public var meta: String? } extension ContentCache: Identifiable { } // MARK: - Schedule Entity @objc(Schedule) public class Schedule: NSManagedObject { } extension Schedule { @nonobjc public class func fetchRequest() -> NSFetchRequest { return NSFetchRequest(entityName: "Schedule") } @NSManaged public var id: String? @NSManaged public var kind: String? @NSManaged public var cron: String? @NSManaged public var clockTime: String? @NSManaged public var enabled: Bool @NSManaged public var lastRunAt: Date? @NSManaged public var nextRunAt: Date? @NSManaged public var jitterMs: Int32 @NSManaged public var backoffPolicy: String? @NSManaged public var stateJson: String? } extension Schedule: Identifiable { } // MARK: - Callback Entity @objc(Callback) public class Callback: NSManagedObject { } extension Callback { @nonobjc public class func fetchRequest() -> NSFetchRequest { return NSFetchRequest(entityName: "Callback") } @NSManaged public var id: String? @NSManaged public var kind: String? @NSManaged public var target: String? @NSManaged public var headersJson: String? @NSManaged public var enabled: Bool @NSManaged public var createdAt: Date? } extension Callback: Identifiable { } // MARK: - History Entity @objc(History) public class History: NSManagedObject { } extension History { @nonobjc public class func fetchRequest() -> NSFetchRequest { return NSFetchRequest(entityName: "History") } @NSManaged public var id: String? @NSManaged public var refId: String? @NSManaged public var kind: String? @NSManaged public var occurredAt: Date? @NSManaged public var durationMs: Int32 @NSManaged public var outcome: String? @NSManaged public var diagJson: String? } extension History: Identifiable { } // MARK: - Persistence Controller class PersistenceController { static let shared = PersistenceController() let container: NSPersistentContainer init(inMemory: Bool = false) { container = NSPersistentContainer(name: "DailyNotificationModel") if inMemory { container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null") } container.loadPersistentStores { _, error in if let error = error as NSError? { fatalError("Core Data error: \(error), \(error.userInfo)") } } container.viewContext.automaticallyMergesChangesFromParent = true } }