diff --git a/LeStorage/Codables/DataAccess.swift b/LeStorage/Codables/DataAccess.swift index 568cbfa..f92eaf2 100644 --- a/LeStorage/Codables/DataAccess.swift +++ b/LeStorage/Codables/DataAccess.swift @@ -28,12 +28,13 @@ class DataAccess: SyncedModelObject, SyncedStorable { var modelId: String = "" var grantedAt: Date = Date() - init(owner: String, sharedWith: [String], modelName: String, modelId: String) { + init(owner: String, sharedWith: [String], modelName: String, modelId: String, storeId: String?) { self.sharedWith = sharedWith self.modelName = modelName self.modelId = modelId super.init() self.relatedUser = owner + self.storeId = storeId } // Codable implementation @@ -71,6 +72,7 @@ class DataAccess: SyncedModelObject, SyncedStorable { self.sharedWith = dataAccess.sharedWith self.modelName = dataAccess.modelName self.modelId = dataAccess.modelId + self.storeId = dataAccess.storeId self.grantedAt = dataAccess.grantedAt } diff --git a/LeStorage/Codables/SyncData.swift b/LeStorage/Codables/SyncData.swift index bb71822..a3dbf30 100644 --- a/LeStorage/Codables/SyncData.swift +++ b/LeStorage/Codables/SyncData.swift @@ -57,7 +57,7 @@ class SyncData { if let revocations = json["revocations"] as? [String: Any] { self.revocations = try storeCenter.decodeObjectIdentifierDictionary(revocations) } - if let revocationParents = json["revocation_parents"] as? [[String: Any]] { + if let revocationParents = json["revocated_relations"] as? [[String: Any]] { for level in revocationParents { let decodedLevel = try storeCenter.decodeObjectIdentifierDictionary(level) self.revocationParents.append(decodedLevel) diff --git a/LeStorage/StoreCenter.swift b/LeStorage/StoreCenter.swift index c231a6e..418069a 100644 --- a/LeStorage/StoreCenter.swift +++ b/LeStorage/StoreCenter.swift @@ -192,22 +192,14 @@ public class StoreCenter { fileprivate func _requestStore(id: String?) -> Store { if let storeId = id { return self._storeLibrary.requestStore(identifier: storeId) - -// if let store = self._stores[storeId] { -// return store -// } else { -// let store = Store(storeCenter: self, identifier: storeId) -// self._registerStore(store: store) -// return store -// } } else { return self.mainStore } } - fileprivate func _store(id: String?) -> Store { - if let storeId = id, let store = self._storeLibrary[storeId] { - return store + fileprivate func _store(id: String?) -> Store? { + if let storeId = id { + return self._storeLibrary[storeId] } else { return self.mainStore } @@ -714,18 +706,23 @@ public class StoreCenter { } fileprivate func _syncDelete(_ deletionArray: ObjectIdentifierArray, type: T.Type) async { - for deletedObject in deletionArray.items { - - let itemsByStore = deletionArray.items.group { $0.storeId } - for (storeId, items) in itemsByStore { - let store = self._requestStore(id: storeId) + + let itemsByStore = deletionArray.items.group { $0.storeId } + for (storeId, items) in itemsByStore { + if let store = self._store(id: storeId) { await store.synchronizationDelete(items, type: T.self) } - - - -// await self.synchronizationDelete(id: deletedObject.modelId, type: deletionArray.type, storeId: deletedObject.storeId) } + +// for deletedObject in deletionArray.items { +// +// let itemsByStore = deletionArray.items.group { $0.storeId } +// for (storeId, items) in itemsByStore { +// let store = self._requestStore(id: storeId) +// await store.synchronizationDelete(items, type: T.self) +// } +//// await self.synchronizationDelete(id: deletedObject.modelId, type: deletionArray.type, storeId: deletedObject.storeId) +// } } @@ -761,7 +758,7 @@ public class StoreCenter { let itemsByStore = revokeArray.items.group { $0.storeId } for (storeId, items) in itemsByStore { let store = self._requestStore(id: storeId) - await store.synchronizationRevoke(items, type: revokeArray.type) + store.synchronizationRevoke(items, type: revokeArray.type) } // for revoked in revokeArray.items { @@ -827,10 +824,10 @@ public class StoreCenter { // } // } - fileprivate func _instance(id: String, type: T.Type, storeId: String?) -> T? { - let realId: T.ID = T.buildRealId(id: id) - return self._store(id: storeId).findById(realId) - } +// fileprivate func _instance(id: String, type: T.Type, storeId: String?) -> T? { +// let realId: T.ID = T.buildRealId(id: id) +// return self._store(id: storeId).findById(realId) +// } /// Returns whether an instance has been shared with the user // fileprivate func _instanceShared(id: String, type: T.Type, storeId: String?) -> Bool { @@ -1131,7 +1128,7 @@ public class StoreCenter { try await dataAccessCollection.addOrUpdateAsync(instance: dataAccess) } } else { - let dataAccess = DataAccess(owner: userId, sharedWith: users, modelName: String(describing: type(of: instance)), modelId: instance.stringId) + let dataAccess = DataAccess(owner: userId, sharedWith: users, modelName: String(describing: type(of: instance)), modelId: instance.stringId, storeId: instance.getStoreId()) try await dataAccessCollection.addOrUpdateAsync(instance: dataAccess) } diff --git a/LeStorage/StoreLibrary.swift b/LeStorage/StoreLibrary.swift index e8ede18..f8dd3d3 100644 --- a/LeStorage/StoreLibrary.swift +++ b/LeStorage/StoreLibrary.swift @@ -54,6 +54,7 @@ class StoreLibrary { public func destroyStore(identifier: String) { let directory = "\(self.storeCenter.directoryName)/\(identifier)" FileManager.default.deleteDirectoryInDocuments(directoryName: directory) + self._stores[identifier]?.reset() self._stores.removeValue(forKey: identifier) }