TM-SGNL-iOS/SignalServiceKit/Contacts/UserProfileStore.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

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