Files
daily-notification-plugin/ios/Plugin/DailyNotificationModel.swift
Matthew Raymer 530691b863 fix(ios): make PersistenceController public for build access
Fixed build error: 'cannot find PersistenceController in scope'

Changes:
- Made PersistenceController class public
- Made shared static property public
- Made container property public
- Made init method public

This allows DailyNotificationPlugin to access PersistenceController
across module boundaries. CocoaPods pod install was required to
regenerate project files with updated access modifiers.

Result: iOS plugin now builds successfully
2025-11-11 17:45:01 -08:00

140 lines
3.5 KiB
Swift

//
// 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
public class PersistenceController {
public static let shared = PersistenceController()
public let container: NSPersistentContainer
public 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
}
}