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