feat: add GrowthRecipeViewModel for fetching graphic data
This commit is contained in:
parent
bbd4eef60c
commit
1d6e018bc4
|
|
@ -0,0 +1,65 @@
|
||||||
|
package com.syaroful.agrilinkvocpro.growth_recipe_feature.presentation.recipe
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.syaroful.agrilinkvocpro.core.utils.ResultState
|
||||||
|
import com.syaroful.agrilinkvocpro.core.utils.extention.mapToUserFriendlyError
|
||||||
|
import com.syaroful.agrilinkvocpro.core.utils.extention.toFormattedString
|
||||||
|
import com.syaroful.agrilinkvocpro.data.UserPreferences
|
||||||
|
import com.syaroful.agrilinkvocpro.growth_recipe_feature.data.model.NpkGraphicDayResponse
|
||||||
|
import com.syaroful.agrilinkvocpro.growth_recipe_feature.data.repository.GraphicDataRepository
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
|
import kotlinx.coroutines.flow.first
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import java.util.Date
|
||||||
|
|
||||||
|
|
||||||
|
private const val TAG = "GrowthRecipeViewModel"
|
||||||
|
class GrowthRecipeViewModel(
|
||||||
|
private val userPreferences: UserPreferences,
|
||||||
|
private val growthRecipeRepository: GraphicDataRepository
|
||||||
|
) : ViewModel() {
|
||||||
|
|
||||||
|
private val _getGraphicState =
|
||||||
|
MutableStateFlow<ResultState<NpkGraphicDayResponse>>(ResultState.Idle)
|
||||||
|
val getGraphicState: StateFlow<ResultState<NpkGraphicDayResponse>> = _getGraphicState.asStateFlow()
|
||||||
|
|
||||||
|
private val today = Date()
|
||||||
|
private val tenDaysAgo = Date(today.time - 9 * 24 * 60 * 60 * 1000)
|
||||||
|
|
||||||
|
fun getGraphicData(
|
||||||
|
sensor: String
|
||||||
|
) {
|
||||||
|
_getGraphicState.value = ResultState.Loading
|
||||||
|
viewModelScope.launch {
|
||||||
|
val token = userPreferences.tokenFlow.first()
|
||||||
|
val authHeader = "Bearer $token"
|
||||||
|
val dateNow = today.toFormattedString()
|
||||||
|
val dateTenDaysAgo = tenDaysAgo.toFormattedString()
|
||||||
|
|
||||||
|
try {
|
||||||
|
val response = growthRecipeRepository.getNpkDataSensor(
|
||||||
|
authHeader = authHeader,
|
||||||
|
startDate = dateTenDaysAgo,
|
||||||
|
endDate = dateNow,
|
||||||
|
timeRange = "DAILY",
|
||||||
|
sensor = sensor,
|
||||||
|
)
|
||||||
|
if (response.isSuccessful) {
|
||||||
|
response.body()?.let { body ->
|
||||||
|
_getGraphicState.value = ResultState.Success(body)
|
||||||
|
} ?: run {
|
||||||
|
_getGraphicState.value = ResultState.Error("Data tidak ditemukan")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
val errorMessage = mapToUserFriendlyError(e)
|
||||||
|
_getGraphicState.value = ResultState.Error(errorMessage)
|
||||||
|
Log.d(TAG, "Failed to fetch data: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user