Updated on 2026-08-14
This commit is contained in:
parent
d99c4e1405
commit
5bc59f3789
5 changed files with 137 additions and 10 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
package com.tangem.datasource.di
|
package com.tangem.datasource.di
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import androidx.datastore.core.DataStore
|
||||||
import androidx.datastore.core.DataStoreFactory
|
import androidx.datastore.core.DataStoreFactory
|
||||||
import androidx.datastore.dataStoreFile
|
import androidx.datastore.dataStoreFile
|
||||||
import com.squareup.moshi.Moshi
|
import com.squareup.moshi.Moshi
|
||||||
|
|
@ -49,21 +50,29 @@ internal object StakingStoreModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideStakingBalanceStore(
|
fun provideYieldsBalancesPersistenceStore(
|
||||||
@NetworkMoshi moshi: Moshi,
|
@NetworkMoshi moshi: Moshi,
|
||||||
@ApplicationContext context: Context,
|
@ApplicationContext context: Context,
|
||||||
dispatchers: CoroutineDispatcherProvider,
|
dispatchers: CoroutineDispatcherProvider,
|
||||||
|
): DataStore<Map<String, Set<YieldBalanceWrapperDTO>>> {
|
||||||
|
return DataStoreFactory.create(
|
||||||
|
serializer = MoshiDataStoreSerializer(
|
||||||
|
moshi = moshi,
|
||||||
|
types = mapWithStringKeyTypes(valueTypes = setTypes<YieldBalanceWrapperDTO>()),
|
||||||
|
defaultValue = emptyMap(),
|
||||||
|
),
|
||||||
|
produceFile = { context.dataStoreFile(fileName = "yield_balances") },
|
||||||
|
scope = CoroutineScope(context = dispatchers.io + SupervisorJob()),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideStakingBalanceStore(
|
||||||
|
persistenceStore: DataStore<Map<String, Set<YieldBalanceWrapperDTO>>>,
|
||||||
): StakingBalanceStore {
|
): StakingBalanceStore {
|
||||||
return DefaultStakingBalanceStore(
|
return DefaultStakingBalanceStore(
|
||||||
persistenceStore = DataStoreFactory.create(
|
persistenceStore = persistenceStore,
|
||||||
serializer = MoshiDataStoreSerializer(
|
|
||||||
moshi = moshi,
|
|
||||||
types = mapWithStringKeyTypes(valueTypes = setTypes<YieldBalanceWrapperDTO>()),
|
|
||||||
defaultValue = emptyMap(),
|
|
||||||
),
|
|
||||||
produceFile = { context.dataStoreFile(fileName = "yield_balances") },
|
|
||||||
scope = CoroutineScope(context = dispatchers.io + SupervisorJob()),
|
|
||||||
),
|
|
||||||
runtimeStore = RuntimeSharedStore(),
|
runtimeStore = RuntimeSharedStore(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.tangem.data.staking.di
|
||||||
|
|
||||||
|
import com.tangem.data.staking.multi.DefaultMultiYieldBalanceFetcher
|
||||||
|
import com.tangem.data.staking.single.DefaultSingleYieldBalanceFetcher
|
||||||
|
import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher
|
||||||
|
import com.tangem.domain.staking.single.SingleYieldBalanceFetcher
|
||||||
|
import dagger.Binds
|
||||||
|
import dagger.Module
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Module
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
|
internal interface YieldBalanceFetcherModule {
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@Singleton
|
||||||
|
fun bindSingleYieldBalanceFetcher(impl: DefaultSingleYieldBalanceFetcher): SingleYieldBalanceFetcher
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@Singleton
|
||||||
|
fun bindMultiYieldBalanceFetcher(impl: DefaultMultiYieldBalanceFetcher): MultiYieldBalanceFetcher
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.tangem.data.staking.di
|
||||||
|
|
||||||
|
import com.tangem.data.staking.multi.DefaultMultiYieldBalanceProducer
|
||||||
|
import com.tangem.data.staking.single.DefaultSingleYieldBalanceProducer
|
||||||
|
import com.tangem.domain.staking.multi.MultiYieldBalanceProducer
|
||||||
|
import com.tangem.domain.staking.single.SingleYieldBalanceProducer
|
||||||
|
import dagger.Binds
|
||||||
|
import dagger.Module
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Module
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
|
internal interface YieldBalanceProducerFactoryModule {
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@Singleton
|
||||||
|
fun bindSingleYieldBalanceProducerFactory(
|
||||||
|
impl: DefaultSingleYieldBalanceProducer.Factory,
|
||||||
|
): SingleYieldBalanceProducer.Factory
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@Singleton
|
||||||
|
fun bindMultiYieldBalanceProducerFactory(
|
||||||
|
impl: DefaultMultiYieldBalanceProducer.Factory,
|
||||||
|
): MultiYieldBalanceProducer.Factory
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
package com.tangem.data.staking.di
|
||||||
|
|
||||||
|
import androidx.datastore.core.DataStore
|
||||||
|
import com.tangem.data.staking.store.DefaultYieldsBalancesStore
|
||||||
|
import com.tangem.data.staking.store.YieldsBalancesStore
|
||||||
|
import com.tangem.datasource.api.stakekit.models.response.model.YieldBalanceWrapperDTO
|
||||||
|
import com.tangem.datasource.local.datastore.RuntimeSharedStore
|
||||||
|
import com.tangem.domain.staking.multi.MultiYieldBalanceProducer
|
||||||
|
import com.tangem.domain.staking.multi.MultiYieldBalanceSupplier
|
||||||
|
import com.tangem.domain.staking.single.SingleYieldBalanceProducer
|
||||||
|
import com.tangem.domain.staking.single.SingleYieldBalanceSupplier
|
||||||
|
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||||
|
import dagger.Module
|
||||||
|
import dagger.Provides
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Module
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
|
internal object YieldBalanceSupplierModule {
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideYieldsBalancesStore(
|
||||||
|
persistenceStore: DataStore<Map<String, Set<YieldBalanceWrapperDTO>>>,
|
||||||
|
dispatchers: CoroutineDispatcherProvider,
|
||||||
|
): YieldsBalancesStore {
|
||||||
|
return DefaultYieldsBalancesStore(
|
||||||
|
runtimeStore = RuntimeSharedStore(),
|
||||||
|
persistenceStore = persistenceStore,
|
||||||
|
dispatchers = dispatchers,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideSingleYieldBalanceSupplier(factory: SingleYieldBalanceProducer.Factory): SingleYieldBalanceSupplier {
|
||||||
|
return object : SingleYieldBalanceSupplier(
|
||||||
|
factory = factory,
|
||||||
|
keyCreator = {
|
||||||
|
"single_yield_balance_${it.userWalletId.stringValue}_${it.network.id.value}_" +
|
||||||
|
it.network.derivationPath.value
|
||||||
|
},
|
||||||
|
) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideMultiYieldBalanceSupplier(factory: MultiYieldBalanceProducer.Factory): MultiYieldBalanceSupplier {
|
||||||
|
return object : MultiYieldBalanceSupplier(
|
||||||
|
factory = factory,
|
||||||
|
keyCreator = { "multi_yields_balances_${it.userWalletId.stringValue}" },
|
||||||
|
) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.tangem.domain.staking.model.stakekit
|
package com.tangem.domain.staking.model.stakekit
|
||||||
|
|
||||||
import com.tangem.domain.models.StatusSource
|
import com.tangem.domain.models.StatusSource
|
||||||
|
import com.tangem.domain.staking.model.StakingID
|
||||||
import com.tangem.domain.staking.model.stakekit.action.StakingActionType
|
import com.tangem.domain.staking.model.stakekit.action.StakingActionType
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
import java.math.BigDecimal
|
import java.math.BigDecimal
|
||||||
|
|
@ -19,6 +20,15 @@ sealed class YieldBalance {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getStakingId(): StakingID? {
|
||||||
|
val integrationId = integrationId
|
||||||
|
val address = address
|
||||||
|
|
||||||
|
if (integrationId == null || address == null) return null
|
||||||
|
|
||||||
|
return StakingID(integrationId = integrationId, address = address)
|
||||||
|
}
|
||||||
|
|
||||||
data class Data(
|
data class Data(
|
||||||
override val integrationId: String?,
|
override val integrationId: String?,
|
||||||
override val address: String,
|
override val address: String,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue