Updated on 2026-08-14
This commit is contained in:
parent
2a5fca2b17
commit
417b2f0906
26 changed files with 313 additions and 32 deletions
|
|
@ -3,6 +3,8 @@ package com.tangem.datasource.di
|
|||
import com.tangem.datasource.local.datastore.RuntimeSharedStore
|
||||
import com.tangem.datasource.local.news.details.DefaultNewsDetailsStore
|
||||
import com.tangem.datasource.local.news.details.NewsDetailsStore
|
||||
import com.tangem.datasource.local.news.liked.DefaultNewsLikedStore
|
||||
import com.tangem.datasource.local.news.liked.NewsLikedStore
|
||||
import com.tangem.datasource.local.news.trending.DefaultTrendingNewsStore
|
||||
import com.tangem.datasource.local.news.trending.TrendingNewsStore
|
||||
import com.tangem.datasource.local.news.viewed.DefaultNewsViewedStore
|
||||
|
|
@ -34,4 +36,10 @@ internal object NewsStoreModule {
|
|||
fun provideNewsViewedStore(): NewsViewedStore {
|
||||
return DefaultNewsViewedStore(store = RuntimeSharedStore())
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideNewsLikedStore(): NewsLikedStore {
|
||||
return DefaultNewsLikedStore(store = RuntimeSharedStore())
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package com.tangem.datasource.local.news.liked
|
||||
|
||||
import com.tangem.datasource.local.datastore.RuntimeSharedStore
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.onStart
|
||||
|
||||
private typealias NewsLikedCache = Map<Int, Boolean>
|
||||
|
||||
internal class DefaultNewsLikedStore(
|
||||
private val store: RuntimeSharedStore<NewsLikedCache>,
|
||||
) : NewsLikedStore {
|
||||
|
||||
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 updateLiked(articleIds: Collection<Int>, liked: Boolean) {
|
||||
if (articleIds.isEmpty()) return
|
||||
|
||||
store.update(emptyMap()) { current ->
|
||||
val updated = current.toMutableMap()
|
||||
articleIds.forEach { id ->
|
||||
updated[id] = liked
|
||||
}
|
||||
updated
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.tangem.datasource.local.news.liked
|
||||
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
/**
|
||||
* Store for news liked flags (runtime only).
|
||||
*/
|
||||
interface NewsLikedStore {
|
||||
|
||||
/**
|
||||
* Observes all liked flags.
|
||||
*/
|
||||
fun getAll(): Flow<Map<Int, Boolean>>
|
||||
|
||||
/**
|
||||
* Gets liked flags synchronously (returns empty map if no data).
|
||||
*/
|
||||
suspend fun getSync(): Map<Int, Boolean>
|
||||
|
||||
/**
|
||||
* Updates liked flags for provided article ids.
|
||||
*/
|
||||
suspend fun updateLiked(articleIds: Collection<Int>, liked: Boolean)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue