Add login repository and use coroutines to post phone number
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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() }
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user