diff --git a/Sources/EasyFirebase/Services/Auth/EasyUser.swift b/Sources/EasyFirebase/Services/Auth/EasyUser.swift index 77c2d5c..8fc4efa 100644 --- a/Sources/EasyFirebase/Services/Auth/EasyUser.swift +++ b/Sources/EasyFirebase/Services/Auth/EasyUser.swift @@ -208,7 +208,7 @@ public extension EasyUser { completion: @escaping (Error?, String?) -> Void) where T: EasyUser { EasyAuth.checkUsernameAvailable(newUsername, forUserType: T.self) { available in if available { - self.unsafelyUpdateUsername(to: newUsername) { error in + self.unsafelyUpdateUsername(to: newUsername, ofUserType: T.self) { error in completion(error, nil) return } @@ -228,9 +228,17 @@ public extension EasyUser { If you wish to update the user's username if it is available and provide a suggested username upon failure, see ``safelyUpdateUsername(to:suggesting:completion:)``. */ - func unsafelyUpdateUsername(to newUsername: String, completion: @escaping (Error?) -> Void = { _ in }) { + func unsafelyUpdateUsername(to newUsername: String, ofUserType: T.Type, completion: @escaping (Error?) -> Void = { _ in }) where T: EasyUser { + let oldUsername = username self.username = newUsername - set(\.username, completion: completion) + set(\.username, ofUserType: T.self, completion: { error in + if let error = error { + completion(error) + self.username = oldUsername + } else { + completion(nil) + } + }) } /** @@ -360,7 +368,7 @@ public extension EasyUser { let new = generator(base) EasyAuth.checkUsernameAvailable(new, forUserType: Self.self) { available in if available { - completion(base) + completion(new) } else { self.getUniqueUsername(new, using: generator, completion: completion) } diff --git a/Sources/EasyFirebase/Services/Firestore/Protocols/Document.swift b/Sources/EasyFirebase/Services/Firestore/Protocols/Document.swift index abb2f02..9fc2a30 100644 --- a/Sources/EasyFirebase/Services/Firestore/Protocols/Document.swift +++ b/Sources/EasyFirebase/Services/Firestore/Protocols/Document.swift @@ -106,8 +106,8 @@ extension Document { - parameter path: The path to the field to update remotely. - parameter completion: The completion handler. */ - public func set(_ path: KeyPath, completion: @escaping (Error?) -> Void = { _ in }) where T: Codable { - EasyFirestore.Storage.set(path, in: self, completion: completion) + public func set(_ path: KeyPath, ofUserType: T.Type, completion: @escaping (Error?) -> Void = { _ in }) where T: Document, U: Codable { + EasyFirestore.Storage.set(path, in: self as! T, completion: completion) } /**