From 1e93e462b988a3f51832b1fc3f99ad4de1eced85 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Thu, 8 Sep 2022 21:56:53 -0700 Subject: [PATCH] add create-account call for user sign up --- .../app/omnivore/omnivore/RESTNetworker.kt | 16 ++++++++ .../omnivore/ui/auth/CreateUserProfile.kt | 2 +- .../omnivore/ui/auth/LoginViewModel.kt | 39 ++++++++++++++++++- 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/RESTNetworker.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/RESTNetworker.kt index 824eb42d9..bf58a49d4 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/RESTNetworker.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/RESTNetworker.kt @@ -33,6 +33,16 @@ data class EmailLoginCredentials( val password: String ) +data class CreateAccountParams( + val pendingUserToken: String, + val userProfile: UserProfile +) + +data class UserProfile( + val username: String, + val name: String +) + interface EmailLoginSubmit { @Headers("Content-Type: application/json") @POST("/api/mobile-auth/email-sign-in") @@ -51,6 +61,12 @@ interface PendingUserSubmit { suspend fun submitPendingUser(@Body params: SignInParams): Response } +interface CreateAccountSubmit { + @Headers("Content-Type: application/json") + @POST("/api/mobile-auth/create-account") + suspend fun submitCreateAccount(@Body params: CreateAccountParams): Response +} + object RetrofitHelper { fun getInstance(): Retrofit { return Retrofit.Builder().baseUrl(Constants.apiURL) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/CreateUserProfile.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/CreateUserProfile.kt index 1da7e33ae..989213264 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/CreateUserProfile.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/CreateUserProfile.kt @@ -51,7 +51,7 @@ fun CreateUserProfileView(viewModel: LoginViewModel) { username = it viewModel.validateUsername(it) }, - onSubmit = { } // TODO: add viewModel function + onSubmit = { viewModel.submitProfile(username = username, name = name) } ) // TODO: add a activity indicator (maybe after a delay?) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/LoginViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/LoginViewModel.kt index d174770be..bbc6cee8b 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/LoginViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/LoginViewModel.kt @@ -49,7 +49,7 @@ class LoginViewModel @Inject constructor( .distinctUntilChanged() .asLiveData() - val registrationStateLiveData = MutableLiveData(RegistrationState.PendingUser) // TODO: switch back to Social + val registrationStateLiveData = MutableLiveData(RegistrationState.SocialLogin) fun getAuthCookieString(): String? = runBlocking { datastoreRepo.getString(DatastoreKeys.omnivoreAuthCookieString) @@ -141,6 +141,43 @@ class LoginViewModel @Inject constructor( } } + private fun getPendingAuthToken(): String? = runBlocking { + datastoreRepo.getString(DatastoreKeys.omnivorePendingUserToken) + } + + fun submitProfile(username: String, name: String) { + viewModelScope.launch { + val request = RetrofitHelper.getInstance().create(CreateAccountSubmit::class.java) + + isLoading = true + errorMessage = null + + val pendingUserToken = getPendingAuthToken() ?: "" + + val userProfile = UserProfile(name = name, username = username) + val params = CreateAccountParams( + pendingUserToken = pendingUserToken, + userProfile = userProfile + ) + + val result = request.submitCreateAccount(params) + + isLoading = false + + if (result.body()?.authToken != null) { + datastoreRepo.putString(DatastoreKeys.omnivoreAuthToken, result.body()?.authToken!!) + } else { + errorMessage = "Something went wrong. Please check your email/password and try again" + } + + if (result.body()?.authCookieString != null) { + datastoreRepo.putString( + DatastoreKeys.omnivoreAuthCookieString, result.body()?.authCookieString!! + ) + } + } + } + fun handleAppleToken(authToken: String) { submitAuthProviderPayload( params = SignInParams(token = authToken, provider = "APPLE")