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.
93 lines
2.7 KiB
93 lines
2.7 KiB
//
|
|
// ModelObject.swift
|
|
// LeStorage
|
|
//
|
|
// Created by Laurent Morvillier on 05/02/2024.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
/// A class used as the root class for Storable objects
|
|
/// Provides default implementations of the Storable protocol
|
|
open class ModelObject: NSObject {
|
|
|
|
public var store: Store? = nil
|
|
|
|
public override init() { }
|
|
|
|
open func deleteDependencies(store: Store, actionOption: ActionOption) {
|
|
|
|
}
|
|
|
|
open func deleteUnusedSharedDependencies(store: Store) {
|
|
// Default implementation does nothing
|
|
// Subclasses should override this to handle their specific dependencies
|
|
}
|
|
|
|
static var relationshipNames: [String] = []
|
|
|
|
}
|
|
|
|
open class BaseModelObject: ModelObject, Codable {
|
|
|
|
public var storeId: String? = nil
|
|
|
|
public override init() { }
|
|
|
|
// Coding Keys to map properties during encoding/decoding
|
|
enum CodingKeys: String, CodingKey {
|
|
case storeId
|
|
}
|
|
|
|
// Required initializer for Decodable
|
|
required public init(from decoder: Decoder) throws {
|
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
self.storeId = try container.decodeIfPresent(String.self, forKey: .storeId)
|
|
}
|
|
|
|
// Required method for Encodable
|
|
open func encode(to encoder: Encoder) throws {
|
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
try container.encode(self.storeId, forKey: .storeId)
|
|
}
|
|
}
|
|
|
|
open class SyncedModelObject: BaseModelObject {
|
|
|
|
public var relatedUser: String? = nil
|
|
public var lastUpdate: Date = Date()
|
|
public var sharing: SharingStatus?
|
|
|
|
public override init() {
|
|
super.init()
|
|
}
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case relatedUser
|
|
case lastUpdate
|
|
case sharing = "_sharing"
|
|
}
|
|
|
|
// Required initializer for Decodable
|
|
required public init(from decoder: Decoder) throws {
|
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
self.relatedUser = try container.decodeIfPresent(String.self, forKey: .relatedUser)
|
|
self.lastUpdate = try container.decodeIfPresent(Date.self, forKey: .lastUpdate) ?? Date()
|
|
self.sharing = try container.decodeIfPresent(SharingStatus.self, forKey: .sharing)
|
|
|
|
try super.init(from: decoder)
|
|
}
|
|
|
|
// Required method for Encodable
|
|
open override func encode(to encoder: Encoder) throws {
|
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
try container.encode(relatedUser, forKey: .relatedUser)
|
|
try container.encode(lastUpdate, forKey: .lastUpdate)
|
|
if self.sharing != nil {
|
|
try container.encodeIfPresent(sharing, forKey: .sharing)
|
|
}
|
|
|
|
try super.encode(to: encoder)
|
|
}
|
|
|
|
}
|
|
|