Updated on 2026-08-14

This commit is contained in:
Tangem 2026-01-14 13:29:32 +01:00
parent 3ed3dc91b1
commit 6f959bcd3f
21 changed files with 641 additions and 212 deletions

View file

@ -0,0 +1,22 @@
package com.tangem.data.news
import com.tangem.datasource.api.common.response.ApiResponseError
import com.tangem.domain.models.news.NewsError
import com.tangem.domain.news.NewsErrorResolver
internal class DefaultNewsErrorResolver : NewsErrorResolver {
override fun resolve(throwable: Throwable?): NewsError {
return when (throwable) {
is ApiResponseError.HttpException -> {
NewsError.HttpError(
code = throwable.code.numericCode,
message = throwable.message.orEmpty(),
)
}
else -> {
NewsError.NotHttpError
}
}
}
}

View file

@ -1,10 +1,12 @@
package com.tangem.data.news.di
import com.tangem.data.news.DefaultNewsErrorResolver
import com.tangem.data.news.repository.DefaultNewsRepository
import com.tangem.datasource.api.news.NewsApi
import com.tangem.datasource.local.news.details.NewsDetailsStore
import com.tangem.datasource.local.news.trending.TrendingNewsStore
import com.tangem.datasource.local.news.viewed.NewsViewedStore
import com.tangem.domain.news.NewsErrorResolver
import com.tangem.domain.news.repository.NewsRepository
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module
@ -25,6 +27,7 @@ internal object NewsDataModule {
newsDetailsStore: NewsDetailsStore,
trendingNewsStore: TrendingNewsStore,
newsViewedStore: NewsViewedStore,
newsErrorResolver: NewsErrorResolver,
): NewsRepository {
return DefaultNewsRepository(
newsApi = newsApi,
@ -32,6 +35,10 @@ internal object NewsDataModule {
newsDetailsStore = newsDetailsStore,
trendingNewsStore = trendingNewsStore,
newsViewedStore = newsViewedStore,
newsErrorResolver = newsErrorResolver,
)
}
@Provides
fun provideNewsErrorResolver(): NewsErrorResolver = DefaultNewsErrorResolver()
}

View file

@ -9,6 +9,7 @@ import com.tangem.datasource.local.news.details.NewsDetailsStore
import com.tangem.datasource.local.news.trending.TrendingNewsStore
import com.tangem.datasource.local.news.viewed.NewsViewedStore
import com.tangem.domain.models.news.*
import com.tangem.domain.news.NewsErrorResolver
import com.tangem.domain.news.model.NewsListBatchFlow
import com.tangem.domain.news.model.NewsListBatchingContext
import com.tangem.domain.news.model.NewsListConfig
@ -32,6 +33,7 @@ internal class DefaultNewsRepository(
private val newsDetailsStore: NewsDetailsStore,
private val trendingNewsStore: TrendingNewsStore,
private val newsViewedStore: NewsViewedStore,
private val newsErrorResolver: NewsErrorResolver,
) : NewsRepository {
override fun getNewsListBatchFlow(context: NewsListBatchingContext, batchSize: Int): NewsListBatchFlow {
@ -176,12 +178,7 @@ internal class DefaultNewsRepository(
trendingNewsStore.clear()
trendingNewsStore.store(
key = TRENDING_NEWS_KEY,
value = TrendingNews.Error(
NewsError.Unknown(
message = apiResponse.cause.message,
code = null,
),
),
value = TrendingNews.Error(error = newsErrorResolver.resolve(apiResponse.cause.cause)),
)
}
is ApiResponse.Success<NewsTrendingResponse> -> {