parent
a3ec0820e4
commit
dbd50eced0
@ -0,0 +1,63 @@ |
|||||||
|
// |
||||||
|
// StoreLibrary.swift |
||||||
|
// LeStorage |
||||||
|
// |
||||||
|
// Created by Laurent Morvillier on 02/06/2025. |
||||||
|
// |
||||||
|
|
||||||
|
import Foundation |
||||||
|
|
||||||
|
class StoreLibrary { |
||||||
|
|
||||||
|
private let storeCenter: StoreCenter |
||||||
|
|
||||||
|
/// A dictionary of Stores associated to their id |
||||||
|
fileprivate var _stores: [String: Store] = [:] |
||||||
|
|
||||||
|
init(storeCenter: StoreCenter) { |
||||||
|
self.storeCenter = storeCenter |
||||||
|
} |
||||||
|
|
||||||
|
subscript(identifier: String) -> Store? { |
||||||
|
get { |
||||||
|
return self._stores[identifier] |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/// Registers a store into the list of stores |
||||||
|
/// - Parameters: |
||||||
|
/// - store: A store to save |
||||||
|
fileprivate func _registerStore(store: Store) { |
||||||
|
guard let identifier = store.identifier else { |
||||||
|
fatalError("The store has no identifier") |
||||||
|
} |
||||||
|
if self._stores[identifier] != nil { |
||||||
|
fatalError("A store with this identifier has already been registered: \(identifier)") |
||||||
|
} |
||||||
|
self._stores[identifier] = store |
||||||
|
} |
||||||
|
|
||||||
|
/// Returns a store using its identifier, and registers it if it does not exists |
||||||
|
/// - Parameters: |
||||||
|
/// - identifier: The store identifer |
||||||
|
/// - parameter: The parameter name used to filter data on the server |
||||||
|
func requestStore(identifier: String) -> Store { |
||||||
|
if let store = self._stores[identifier] { |
||||||
|
return store |
||||||
|
} else { |
||||||
|
let store = Store(storeCenter: self.storeCenter, identifier: identifier) |
||||||
|
self._registerStore(store: store) |
||||||
|
return store |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public func destroyStore(identifier: String) { |
||||||
|
let directory = "\(self.storeCenter.directoryName)/\(identifier)" |
||||||
|
FileManager.default.deleteDirectoryInDocuments(directoryName: directory) |
||||||
|
self._stores.removeValue(forKey: identifier) |
||||||
|
} |
||||||
|
|
||||||
|
func reset() { |
||||||
|
self._stores.removeAll() |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue