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
|
|
}
|
|
}
|
|
|
|
|