Updated on 2026-08-14
This commit is contained in:
parent
f1a4be49b3
commit
ce948a71ae
51 changed files with 20 additions and 1186 deletions
|
|
@ -5,5 +5,4 @@ plugins {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation(deps.jodatime)
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
package com.tangem.domain.promo.models
|
||||
|
||||
import org.joda.time.DateTime
|
||||
|
||||
data class PromoBanner(
|
||||
val name: String,
|
||||
val bannerState: BannerState,
|
||||
) {
|
||||
|
||||
val isActive = bannerState.status == ACTIVE_STATUS && bannerState.timeline.end.isAfterNow
|
||||
|
||||
data class BannerState(
|
||||
val timeline: Timeline,
|
||||
val status: String,
|
||||
val link: String?,
|
||||
)
|
||||
|
||||
data class Timeline(
|
||||
val start: DateTime,
|
||||
val end: DateTime,
|
||||
)
|
||||
|
||||
private companion object {
|
||||
const val ACTIVE_STATUS = "active"
|
||||
}
|
||||
}
|
||||
|
||||
enum class PromoId {
|
||||
Referral,
|
||||
Sepa,
|
||||
VisaPresale,
|
||||
BlackFriday,
|
||||
OnePlusOne,
|
||||
YieldPromo,
|
||||
}
|
||||
|
|
@ -1,24 +1,10 @@
|
|||
package com.tangem.domain.promo
|
||||
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.domain.promo.models.PromoId
|
||||
import com.tangem.domain.promo.models.StoryContent
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface PromoRepository {
|
||||
|
||||
// region Promo
|
||||
fun isReadyToShowWalletPromo(userWalletId: UserWalletId, promoId: PromoId): Flow<Boolean>
|
||||
|
||||
fun isReadyToShowTokenPromo(promoId: PromoId): Flow<Boolean>
|
||||
|
||||
suspend fun setNeverToShowWalletPromo(promoId: PromoId)
|
||||
|
||||
suspend fun setNeverToShowTokenPromo(promoId: PromoId)
|
||||
|
||||
suspend fun isMoonpayPromoActive(): Boolean
|
||||
// endregion
|
||||
|
||||
// region Stories
|
||||
fun getStoryById(id: String): Flow<StoryContent?>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
package com.tangem.domain.promo
|
||||
|
||||
import com.tangem.domain.promo.models.PromoId
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
class ShouldShowPromoTokenUseCase(private val promoRepository: PromoRepository) {
|
||||
|
||||
operator fun invoke(promoId: PromoId): Flow<Boolean> = promoRepository.isReadyToShowTokenPromo(promoId)
|
||||
|
||||
suspend fun neverToShow(promoId: PromoId) = promoRepository.setNeverToShowTokenPromo(promoId)
|
||||
}
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
package com.tangem.domain.promo
|
||||
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.domain.promo.models.PromoId
|
||||
import com.tangem.domain.settings.repositories.SettingsRepository
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.emitAll
|
||||
import kotlinx.coroutines.flow.flow
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
import kotlinx.coroutines.flow.map
|
||||
import java.util.Calendar
|
||||
|
||||
class ShouldShowPromoWalletUseCase(
|
||||
private val promoRepository: PromoRepository,
|
||||
private val settingsRepository: SettingsRepository,
|
||||
private val isNewPromoBannersEnabled: Boolean,
|
||||
) {
|
||||
|
||||
operator fun invoke(userWalletId: UserWalletId, promoId: PromoId): Flow<Boolean> {
|
||||
if (isNewPromoBannersEnabled) return flowOf(false)
|
||||
|
||||
return flow {
|
||||
emit(false)
|
||||
|
||||
val promoFlow = promoRepository.isReadyToShowWalletPromo(userWalletId, promoId)
|
||||
.map { applyWalletFirstUsageCondition(promoId, it) }
|
||||
|
||||
emitAll(promoFlow)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun applyWalletFirstUsageCondition(promoId: PromoId, isReady: Boolean): Boolean {
|
||||
if (!isReady) return false
|
||||
|
||||
return when (promoId) {
|
||||
PromoId.Referral,
|
||||
PromoId.VisaPresale,
|
||||
PromoId.BlackFriday,
|
||||
PromoId.OnePlusOne,
|
||||
PromoId.YieldPromo,
|
||||
-> true
|
||||
PromoId.Sepa -> {
|
||||
val walletFirstUsageDate = settingsRepository.getWalletFirstUsageDate()
|
||||
if (walletFirstUsageDate == 0L) return false
|
||||
|
||||
val currentDate = Calendar.getInstance().timeInMillis
|
||||
currentDate - walletFirstUsageDate > ONE_DAY_IN_MILLIS
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun neverToShow(promoId: PromoId) = promoRepository.setNeverToShowWalletPromo(promoId)
|
||||
|
||||
private companion object {
|
||||
const val ONE_DAY_IN_MILLIS = 1 * 24 * 60 * 60 * 1000L
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue