You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							139 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							139 lines
						
					
					
						
							3.5 KiB
						
					
					
				
								//
							 | 
						|
								//  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<ContentCache> {
							 | 
						|
								        return NSFetchRequest<ContentCache>(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<Schedule> {
							 | 
						|
								        return NSFetchRequest<Schedule>(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<Callback> {
							 | 
						|
								        return NSFetchRequest<Callback>(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<History> {
							 | 
						|
								        return NSFetchRequest<History>(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
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 |