Updated on 2026-08-14
This commit is contained in:
parent
552da5be18
commit
4addc9601e
15 changed files with 204 additions and 3 deletions
|
|
@ -1,18 +1,31 @@
|
|||
package com.tangem.data.promo
|
||||
|
||||
import com.tangem.data.promo.converters.StoryContentResponseConverter
|
||||
import com.tangem.datasource.api.common.response.getOrThrow
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.preferences.PreferencesKeys.SHOULD_SHOW_SWAP_STORIES_KEY
|
||||
import com.tangem.datasource.local.preferences.utils.get
|
||||
import com.tangem.datasource.local.preferences.utils.getSyncOrDefault
|
||||
import com.tangem.datasource.local.preferences.utils.store
|
||||
import com.tangem.datasource.local.promo.PromoStoriesStore
|
||||
import com.tangem.domain.promo.PromoRepository
|
||||
import com.tangem.domain.promo.models.StoryContent
|
||||
import com.tangem.utils.SupportedLanguages
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
internal class DefaultPromoRepository(
|
||||
private val tangemApi: TangemTechApi,
|
||||
private val appPreferencesStore: AppPreferencesStore,
|
||||
private val promoStoriesStore: PromoStoriesStore,
|
||||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
) : PromoRepository {
|
||||
|
||||
private val storyContentConverter = StoryContentResponseConverter()
|
||||
|
||||
override fun isReadyToShowWalletSwapPromo(): Flow<Boolean> {
|
||||
return flowOf(false) // Use it on new promo action
|
||||
}
|
||||
|
|
@ -29,6 +42,23 @@ internal class DefaultPromoRepository(
|
|||
// Use it on new promo action
|
||||
}
|
||||
|
||||
override suspend fun getStoryById(id: String): StoryContent = withContext(dispatchers.io) {
|
||||
val storedPromo = promoStoriesStore.getSyncOrNull(storyId = id)
|
||||
// Get last stored promo by id if possible or get from network
|
||||
val story = if (storedPromo == null) {
|
||||
val storyContent = tangemApi.getStoryById(
|
||||
storyId = id,
|
||||
language = SupportedLanguages.getCurrentSupportedLanguageCode(),
|
||||
).getOrThrow()
|
||||
promoStoriesStore.store(storyId = id, item = storyContent)
|
||||
storyContent
|
||||
} else {
|
||||
storedPromo
|
||||
}
|
||||
|
||||
storyContentConverter.convert(story)
|
||||
}
|
||||
|
||||
override fun isReadyToShowSwapStories(): Flow<Boolean> {
|
||||
return appPreferencesStore.get(SHOULD_SHOW_SWAP_STORIES_KEY, true)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
package com.tangem.data.promo.converters
|
||||
|
||||
import com.tangem.datasource.api.promotion.models.StoryContentResponse
|
||||
import com.tangem.domain.promo.models.StoryContent
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
internal class StoryContentResponseConverter : Converter<StoryContentResponse, StoryContent> {
|
||||
override fun convert(value: StoryContentResponse): StoryContent {
|
||||
return StoryContent(
|
||||
imageHost = value.imageHost,
|
||||
story = StoryContent.Story(
|
||||
id = value.story.id,
|
||||
title = value.story.title,
|
||||
slides = value.story.slides?.map { slide ->
|
||||
StoryContent.StorySlide(
|
||||
id = slide.id,
|
||||
)
|
||||
}.orEmpty(),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,11 @@
|
|||
package com.tangem.data.promo.di
|
||||
|
||||
import com.tangem.data.promo.DefaultPromoRepository
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.promo.PromoStoriesStore
|
||||
import com.tangem.domain.promo.PromoRepository
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
|
|
@ -15,7 +18,17 @@ internal object PromoDataModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun providePromoRepository(appPreferencesStore: AppPreferencesStore): PromoRepository {
|
||||
return DefaultPromoRepository(appPreferencesStore)
|
||||
fun providePromoRepository(
|
||||
tangemTechApi: TangemTechApi,
|
||||
appPreferencesStore: AppPreferencesStore,
|
||||
promoStoriesStore: PromoStoriesStore,
|
||||
dispatchers: CoroutineDispatcherProvider,
|
||||
): PromoRepository {
|
||||
return DefaultPromoRepository(
|
||||
tangemApi = tangemTechApi,
|
||||
appPreferencesStore = appPreferencesStore,
|
||||
promoStoriesStore = promoStoriesStore,
|
||||
dispatchers = dispatchers,
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue