Newer
Older
SmartKitchen / app / src / main / java / com / casic / br / vm / UserViewModel.kt
package com.casic.br.vm

import androidx.lifecycle.MutableLiveData
import com.casic.br.base.BaseApplication
import com.casic.br.extensions.separateResponseCode
import com.casic.br.extensions.toErrorMessage
import com.casic.br.model.CommonResultModel
import com.casic.br.model.LoginResultModel
import com.casic.br.utils.retrofit.RetrofitServiceManager
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
import com.pengxh.kt.lite.vm.LoadState

class UserViewModel : BaseViewModel() {

    private val gson = Gson()
    val registerResult = MutableLiveData<CommonResultModel>()
    val loginResult = MutableLiveData<LoginResultModel>()

    fun register(
        account: String,
        password: String,
        positionLng: Double,
        positionLat: Double,
        clientId: String,
        syncName: String,
        syncDeptid: String
    ) = launch({
        val response = RetrofitServiceManager.register(
            account, password, positionLng, positionLat, clientId, syncName, syncDeptid
        )
        val responseCode = response.separateResponseCode()
        if (responseCode == 200) {
            loadState.value = LoadState.Success
            registerResult.value = gson.fromJson<CommonResultModel>(
                response, object : TypeToken<CommonResultModel>() {}.type
            )
        } else {
            loadState.value = LoadState.Fail
            response.toErrorMessage().show(BaseApplication.obtainInstance())
        }
    }, {
        loadState.value = LoadState.Fail
        it.printStackTrace()
    })

    fun enter(sid: String, account: String, secretKey: String) = launch({
        val response = RetrofitServiceManager.login(sid, account, secretKey)
        val responseCode = response.separateResponseCode()
        if (responseCode == 200) {
            loadState.value = LoadState.Success
            loginResult.value = gson.fromJson<LoginResultModel>(
                response, object : TypeToken<LoginResultModel>() {}.type
            )
        } else {
            loadState.value = LoadState.Fail
            response.toErrorMessage().show(BaseApplication.obtainInstance())
        }
    }, {
        loadState.value = LoadState.Fail
        it.printStackTrace()
    })
}