Add login repository and use coroutines to post phone number

This commit is contained in:
Shashidhara Gopal
2019-11-04 19:46:19 +05:30
parent 59d9e68b82
commit bafa88f8f9
5 changed files with 30 additions and 13 deletions

View File

@@ -1,4 +1,4 @@
package com.navi.medici.android_customer_app.login
package com.navi.medici.android_customer_app
import retrofit2.Response
import java.io.IOException

View File

@@ -3,7 +3,7 @@ package com.navi.medici.android_customer_app.login
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.POST
import retrofit2.http.GET
private const val BASE_URL = "https://jsonplaceholder.typicode.com/"
@@ -13,13 +13,13 @@ private val retrofit = Retrofit
.baseUrl(BASE_URL)
.build()
interface LoginApiService {
@POST("posts")
suspend fun submitPhoneNumber(phoneNumber: String): Response<LoginResponse>
interface LoginApi {
@GET("posts/1")
suspend fun submitPhoneNumber(): Response<LoginResponse>
companion object {
operator fun invoke(): LoginApiService {
return retrofit.create(LoginApiService::class.java)
operator fun invoke(): LoginApi {
return retrofit.create(LoginApi::class.java)
}
}
}

View File

@@ -1,4 +1,7 @@
package com.navi.medici.android_customer_app.login
class LoginRepository {
import com.navi.medici.android_customer_app.SafeApiRequest
class LoginRepository(private val loginApi: LoginApi) : SafeApiRequest() {
suspend fun submitPhoneNumber(phoneNumber: String) = apiRequest { loginApi.submitPhoneNumber() }
}

View File

@@ -1,6 +1,6 @@
package com.navi.medici.android_customer_app.login
data class Login(
data class LoginResponse(
val id: Int,
val title: String,
val body: String,

View File

@@ -1,15 +1,29 @@
package com.navi.medici.android_customer_app.login
import android.util.Log
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class LoginViewModel : ViewModel() {
private val login = Login("")
private var phoneNumber: String = ""
private val loginRepository = LoginRepository(LoginApi())
private val coroutineScope = CoroutineScope(Dispatchers.Main)
fun onChangePhoneNumber(phoneNumber: String) {
login.phoneNumber = phoneNumber
if (isValidPhoneNumber(phoneNumber)) {
this.phoneNumber = phoneNumber
if (isValidPhoneNumber()) {
submitPhoneNumber()
}
}
private fun isValidPhoneNumber(phoneNumber: String): Boolean = phoneNumber.length == 10
private fun submitPhoneNumber() {
coroutineScope.launch {
val response = loginRepository.submitPhoneNumber(phoneNumber)
Log.i("login response", response.toString())
}
}
private fun isValidPhoneNumber(): Boolean = phoneNumber.length == 10
}