68 lines
2.8 KiB
Swift
68 lines
2.8 KiB
Swift
//
|
|
// Copyright 2023 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
public import LibSignalClient
|
|
|
|
public protocol UserProfileStore {
|
|
func fetchUserProfile(for rowId: OWSUserProfile.RowId, tx: DBReadTransaction) -> OWSUserProfile?
|
|
func fetchUserProfiles(for serviceId: ServiceId, tx: DBReadTransaction) -> [OWSUserProfile]
|
|
func fetchUserProfiles(for phoneNumber: E164, tx: DBReadTransaction) -> [OWSUserProfile]
|
|
|
|
func updateUserProfile(_ userProfile: OWSUserProfile, tx: DBWriteTransaction)
|
|
func removeUserProfile(_ userProfile: OWSUserProfile, tx: DBWriteTransaction)
|
|
}
|
|
|
|
public class UserProfileStoreImpl: UserProfileStore {
|
|
public init() {}
|
|
|
|
public func fetchUserProfile(for rowId: OWSUserProfile.RowId, tx: DBReadTransaction) -> OWSUserProfile? {
|
|
return SDSCodableModelDatabaseInterfaceImpl().fetchModel(modelType: OWSUserProfile.self, rowId: rowId, tx: tx)
|
|
}
|
|
|
|
public func fetchUserProfiles(for serviceId: ServiceId, tx: DBReadTransaction) -> [OWSUserProfile] {
|
|
return UserProfileFinder().fetchUserProfiles(serviceId: serviceId, tx: SDSDB.shimOnlyBridge(tx))
|
|
}
|
|
|
|
public func fetchUserProfiles(for phoneNumber: E164, tx: DBReadTransaction) -> [OWSUserProfile] {
|
|
return UserProfileFinder().fetchUserProfiles(phoneNumber: phoneNumber.stringValue, tx: SDSDB.shimOnlyBridge(tx))
|
|
}
|
|
|
|
public func updateUserProfile(_ userProfile: OWSUserProfile, tx: DBWriteTransaction) {
|
|
userProfile.anyOverwritingUpdate(transaction: SDSDB.shimOnlyBridge(tx))
|
|
}
|
|
|
|
public func removeUserProfile(_ userProfile: OWSUserProfile, tx: DBWriteTransaction) {
|
|
userProfile.anyRemove(transaction: SDSDB.shimOnlyBridge(tx))
|
|
}
|
|
}
|
|
|
|
#if TESTABLE_BUILD
|
|
|
|
class MockUserProfileStore: UserProfileStore {
|
|
var userProfiles = [OWSUserProfile]()
|
|
|
|
func fetchUserProfile(for rowId: OWSUserProfile.RowId, tx: DBReadTransaction) -> OWSUserProfile? {
|
|
return userProfiles.first(where: { $0.id == rowId })
|
|
}
|
|
|
|
func fetchUserProfiles(for serviceId: ServiceId, tx: DBReadTransaction) -> [OWSUserProfile] {
|
|
return userProfiles.filter { $0.serviceIdString == serviceId.serviceIdUppercaseString }.map { $0.shallowCopy() }
|
|
}
|
|
|
|
func fetchUserProfiles(for phoneNumber: E164, tx: DBReadTransaction) -> [OWSUserProfile] {
|
|
return userProfiles.filter { $0.phoneNumber == phoneNumber.stringValue }.map { $0.shallowCopy() }
|
|
}
|
|
|
|
func updateUserProfile(_ userProfile: OWSUserProfile, tx: DBWriteTransaction) {
|
|
let index = userProfiles.firstIndex(where: { $0.uniqueId == userProfile.uniqueId })!
|
|
userProfiles[index] = userProfile.copy() as! OWSUserProfile
|
|
}
|
|
|
|
func removeUserProfile(_ userProfile: OWSUserProfile, tx: DBWriteTransaction) {
|
|
userProfiles.removeAll(where: { $0.uniqueId == userProfile.uniqueId })
|
|
}
|
|
}
|
|
|
|
#endif
|