Когда откроется экран, возьмите текущую дату и проверьте, если В базе данных есть запись с этой датой. и вставьте запись в базу данных. < /p>
< /li>
Во всех случаях (1) или (2) вернуть запись из базы данных, которая соответствует дате . < /p>
< /li>
< /ol>
Я пытаюсь с этим использованием, но это не работает: < /p>
Код: Выделить всё
class GetHomeUseCase @Inject constructor(
private val universalisRepository: UniversalisRepository,
private val userDataRepository: UserDataRepository,
) {
operator fun invoke(
date: Int,
): Flow {
return combine(
userDataRepository.userData,
universalisRepository.countUniversalis(UniversalisResourceQuery(date)),
) { userData, count ->
if (count == 0) {
universalisRepository.insertFromRemote(UniversalisResourceQuery(date))
}
HomeResource(
date = date,
data = universalisRepository.getUniversalisByDate(UniversalisResourceQuery(date))
.first(),
dynamic = userData
)
}
}
}
< /code>
Это ViewModel: < /p>
@HiltViewModel
class HomeViewModel @Inject constructor(
private val savedStateHandle: SavedStateHandle,
val userDataRepository: UserDataRepository,
getHomeUseCase: GetHomeUseCase,
) : ViewModel() {
// Key used to save and retrieve the currently selected topic id from saved state.
private val selectedTopicIdKey = "selectedTopicIdKey"
private val route: UniversalisRoute = savedStateHandle.toRoute()
private val selectedTopicId = savedStateHandle.getStateFlow(
key = selectedTopicIdKey,
initialValue = route.initialTopicId.toString(),
)
private val selectedDate = savedStateHandle.getStateFlow(
key = "date",
initialValue = Utils.hoy.toInt(),
)
val uiState: StateFlow = combine(
selectedTopicId,
getHomeUseCase.invoke(
date = selectedDate.value,
),
HomeUiState::HomeData,
).stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5_000),
initialValue = HomeUiState.Loading,
)
fun onTopicClick(topicId: String?) {
savedStateHandle[selectedTopicIdKey] = topicId
}
}
sealed interface HomeUiState {
data object Loading : HomeUiState
data class HomeData(
val selectedTopicId: String?,
val topics: HomeResource,
) : HomeUiState
data object Empty : HomeUiState
}
Код: Выделить всё
override fun countUniversalis(query: UniversalisResourceQuery): Flow {
return universalisDao.countUniversalis(query.filterDate)
}
< /code>
и: < /p>
override suspend fun insertFromRemote(query: UniversalisResourceQuery) {
val networkUniversalis = network.getUniversalis(listOf(query.filterDate))
universalisDao.upsertUniversalis(networkUniversalis.data)
}
Код: Выделить всё
@Query(value = "SELECT COUNT(*) FROM universalis WHERE todayDate=:filterDate")
fun countUniversalis(filterDate: Int = 0): Flow
< /code>
и: < /p>
@Upsert(entity = UniversalisEntity::class)
suspend fun upsertUniversalis(entities: List)
Код: Выделить всё
{ userData, count ->
Подробнее здесь: https://stackoverflow.com/questions/794 ... d-if-it-do