Updated on 2026-08-14

This commit is contained in:
Tangem 2025-12-24 11:12:44 +01:00
parent 1f233c091b
commit 3e0e8753d4
84 changed files with 6595 additions and 143 deletions

View file

@ -5,6 +5,8 @@ import com.tangem.datasource.local.news.details.DefaultNewsDetailsStore
import com.tangem.datasource.local.news.details.NewsDetailsStore
import com.tangem.datasource.local.news.trending.DefaultTrendingNewsStore
import com.tangem.datasource.local.news.trending.TrendingNewsStore
import com.tangem.datasource.local.news.viewed.DefaultNewsViewedStore
import com.tangem.datasource.local.news.viewed.NewsViewedStore
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
@ -26,4 +28,10 @@ internal object NewsStoreModule {
fun provideTrendingNewsStore(): TrendingNewsStore {
return DefaultTrendingNewsStore(store = RuntimeSharedStore())
}
@Provides
@Singleton
fun provideNewsViewedStore(): NewsViewedStore {
return DefaultNewsViewedStore(store = RuntimeSharedStore())
}
}

View file

@ -0,0 +1,32 @@
package com.tangem.datasource.local.news.viewed
import com.tangem.datasource.local.datastore.RuntimeSharedStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.onStart
private typealias NewsViewedCache = Map<Int, Boolean>
internal class DefaultNewsViewedStore(
private val store: RuntimeSharedStore<NewsViewedCache>,
) : NewsViewedStore {
override fun getAll(): Flow<Map<Int, Boolean>> {
return store.get().onStart { emit(emptyMap()) }
}
override suspend fun getSync(): Map<Int, Boolean> {
return store.getSyncOrNull().orEmpty()
}
override suspend fun updateViewed(articleIds: Collection<Int>, viewed: Boolean) {
if (articleIds.isEmpty()) return
store.update(emptyMap()) { current ->
val updated = current.toMutableMap()
articleIds.forEach { id ->
updated[id] = viewed
}
updated
}
}
}

View file

@ -0,0 +1,24 @@
package com.tangem.datasource.local.news.viewed
import kotlinx.coroutines.flow.Flow
/**
* Store for news viewed flags (runtime only).
*/
interface NewsViewedStore {
/**
* Observes all viewed flags.
*/
fun getAll(): Flow<Map<Int, Boolean>>
/**
* Gets viewed flags synchronously (returns empty map if no data).
*/
suspend fun getSync(): Map<Int, Boolean>
/**
* Updates viewed flags for provided article ids.
*/
suspend fun updateViewed(articleIds: Collection<Int>, viewed: Boolean)
}