diff --git a/nirvana-ios/Repositories/FirestoreService.swift b/nirvana-ios/Repositories/FirestoreService.swift index cd00ba7..2e4823b 100644 --- a/nirvana-ios/Repositories/FirestoreService.swift +++ b/nirvana-ios/Repositories/FirestoreService.swift @@ -73,11 +73,14 @@ class FirestoreService { } } - func createUser(user: User) { + func createUser(user: User, completion: @escaping((_ state: ServiceState) -> ())) { do { let _ = try db.collection(Collection.users.rawValue).addDocument(from: user) + + completion(ServiceState.success("user created")) } catch { - print("error in creating user \(error.localizedDescription)") + print("error in updating user \(error.localizedDescription)") + completion(ServiceState.error(ServiceError(description: error.localizedDescription))) } } @@ -90,7 +93,7 @@ class FirestoreService { completion(ServiceState.error(ServiceError(description: "No user id given to firestore service"))) } } catch { - print("error in creating user \(error.localizedDescription)") + print("error in updating user \(error.localizedDescription)") completion(ServiceState.error(ServiceError(description: error.localizedDescription))) } } diff --git a/nirvana-ios/Views/PhoneVerification/PhoneCodeVerificationView.swift b/nirvana-ios/Views/PhoneVerification/PhoneCodeVerificationView.swift index 0c0a7a9..df1f5f0 100644 --- a/nirvana-ios/Views/PhoneVerification/PhoneCodeVerificationView.swift +++ b/nirvana-ios/Views/PhoneVerification/PhoneCodeVerificationView.swift @@ -79,10 +79,8 @@ struct PhoneCodeVerificationView: View { // TODO: bug one: not navigating after creating user...two: creating user with a random Id // firebase will now verify the credential Auth.auth().signIn(with: credential) { (res, err) in - // done with the response here, turn off loading screen - self.isLoading.toggle() - if err != nil { + self.isLoading.toggle() self.toastText = "⚠️ Error with Verification" self.toastSubMessage = "Code is invalid. Please try again or re-enter your phone number in the previous page." self.showToast.toggle() @@ -102,6 +100,7 @@ struct PhoneCodeVerificationView: View { // if for some reason firebase couldn't get auth details if userId == nil || userPhoneNumber == nil { + self.isLoading.toggle() self.toastText = "⚠️ Error with Verification" self.toastSubMessage = "Code is invalid. Please try again or re-enter your phone number in the previous page." self.showToast.toggle() @@ -110,10 +109,23 @@ struct PhoneCodeVerificationView: View { return } - self.phoneverificationViewModel.createOrUpdateUser(userId: userId!, phoneNumber: userPhoneNumber!) - - // then sending to next page - self.navigationStack.push(OnboardingTrioView()) + self.phoneverificationViewModel.createOrUpdateUser(userId: userId!, phoneNumber: userPhoneNumber!) {res in + switch res { + case .success(let msg): + // then sending to next page + self.navigationStack.push(OnboardingTrioView()) + return + case .error(let error): + self.isLoading.toggle() + self.toastText = "⚠️ Error with Verification" + self.toastSubMessage = "Code is invalid. Please try again or re-enter your phone number in the previous page." + self.showToast.toggle() + + print((err?.localizedDescription)!) + return + default: break + } + } } } label: { diff --git a/nirvana-ios/Views/PhoneVerification/PhoneVerificationViewModel.swift b/nirvana-ios/Views/PhoneVerification/PhoneVerificationViewModel.swift index 2ff17db..ec06bf2 100644 --- a/nirvana-ios/Views/PhoneVerification/PhoneVerificationViewModel.swift +++ b/nirvana-ios/Views/PhoneVerification/PhoneVerificationViewModel.swift @@ -20,19 +20,20 @@ final class PhoneVerificationViewModel : ObservableObject { } - public func createOrUpdateUser(userId: String, phoneNumber: String) { + public func createOrUpdateUser(userId: String, phoneNumber: String, completion: @escaping((_ res: ServiceState?) -> ())) { // TODO: set all in a transaction or batch write // get user - 1 result set cost self.firestoreService.getUser(userId: userId) {[weak self] resultingUser in print("user that was received from get: \(resultingUser?.id)") - - + if resultingUser == nil {// if empty, create user - 1 result set cost..prolly higher cost print("creating new user with id: \(userId)") let newUser = User(id: userId, phoneNumber: phoneNumber) print("verify the id stayed the same: \(newUser.id)") - self?.firestoreService.createUser(user: newUser) + self?.firestoreService.createUser(user: newUser) { res in + completion(res) + } } else { // if not, change last logged in value var user = resultingUser @@ -40,7 +41,7 @@ final class PhoneVerificationViewModel : ObservableObject { user!.lastLoggedInTimestamp = nil self?.firestoreService.updateUser(user: user!) {res in - print(res) + completion(res) } } }