Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / vm / AuthenticateViewModel.kt
package com.casic.smarttube.vm

import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.casic.smarttube.extensions.separateResponseCode
import com.casic.smarttube.extensions.toErrorMessage
import com.casic.smarttube.model.AreaModel
import com.casic.smarttube.model.DistrictModel
import com.casic.smarttube.model.PublicKeyModel
import com.casic.smarttube.model.StreetModel
import com.casic.smarttube.retrofit.RetrofitServiceManager
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.base.BaseViewModel
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.LoadState

class AuthenticateViewModel : BaseViewModel() {

    private val gson = Gson()
    val keyData = MutableLiveData<PublicKeyModel>()
    val areaData = MutableLiveData<AreaModel>()
    val districtData = MutableLiveData<DistrictModel>()
    val streetData = MutableLiveData<StreetModel>()

    fun getPublicKey(context: Context) = launch({
        loadState.value = LoadState.Loading
        val response = RetrofitServiceManager.authenticate()
        val responseCode = response.separateResponseCode()
        if (responseCode == 200) {
            keyData.value = gson.fromJson<PublicKeyModel>(
                response, object : TypeToken<PublicKeyModel>() {}.type
            )
        } else {
            response.toErrorMessage().show(context)
        }
    }, {
        it.printStackTrace()
    })

    /**
     * 根据部门获取区ID
     */
    fun getAreaByDept(context: Context, deptId: String) = launch({
        val response = RetrofitServiceManager.getAreaByDept(deptId)
        val responseCode = response.separateResponseCode()
        if (responseCode == 200) {
            areaData.value = gson.fromJson<AreaModel>(
                response, object : TypeToken<AreaModel>() {}.type
            )
        } else {
            response.toErrorMessage().show(context)
        }
    }, {
        it.printStackTrace()
    })

    /**
     * 区/县等
     */
    fun getDistrict(context: Context, pid: String) = launch({
        val response = RetrofitServiceManager.getDistrict(pid)
        val responseCode = response.separateResponseCode()
        if (responseCode == 200) {
            districtData.value = gson.fromJson<DistrictModel>(
                response, object : TypeToken<DistrictModel>() {}.type
            )
        } else {
            response.toErrorMessage().show(context)
        }
    }, {
        it.printStackTrace()
    })

    /**
     * 街道
     */
    fun getStreet(context: Context, areaId: String) = launch({
        val response = RetrofitServiceManager.getStreet(areaId)
        val responseCode = response.separateResponseCode()
        if (responseCode == 200) {
            streetData.value = gson.fromJson<StreetModel>(
                response, object : TypeToken<StreetModel>() {}.type
            )
        } else {
            response.toErrorMessage().show(context)
        }
    }, {
        it.printStackTrace()
    })
}