From 49618caf0162064a63e4fcb027583314d3a37010 Mon Sep 17 00:00:00 2001 From: arvifox Date: Tue, 12 Sep 2023 17:38:11 +0300 Subject: [PATCH] sn-2913 pool cache --- .../main/java/jp/co/soramitsu/core_db/dao/AssetDao.kt | 2 +- .../src/main/java/jp/co/soramitsu/core_db/dao/PoolDao.kt | 9 ++++++++- .../repository/PolkaswapSubscriptionRepositoryImpl.kt | 4 ++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/core_db/src/main/java/jp/co/soramitsu/core_db/dao/AssetDao.kt b/core_db/src/main/java/jp/co/soramitsu/core_db/dao/AssetDao.kt index e26358d2f..3e1602f7d 100644 --- a/core_db/src/main/java/jp/co/soramitsu/core_db/dao/AssetDao.kt +++ b/core_db/src/main/java/jp/co/soramitsu/core_db/dao/AssetDao.kt @@ -73,7 +73,7 @@ interface AssetDao { private const val QUERY_ASSET_TOKEN_ACTIVE = """ select * from assets inner join ($joinFiatToken) tokensfiats on assets.tokenId=tokensfiats.id where assets.accountAddress=:address and tokensfiats.whitelistName=:whitelist - and ((assets.visibility=1 or assets.displayAsset=1 or tokensfiats.isHidable = 0) or (tokensfiats.id in (select userTokenIdTarget from userpools)) or (tokensfiats.id in (select tokenId from poolBaseTokens))) order by assets.position + and ((assets.visibility=1 or assets.displayAsset=1 or tokensfiats.isHidable = 0) or (tokensfiats.id in (select tokenIdTarget from allpools)) or (tokensfiats.id in (select tokenId from poolBaseTokens))) order by assets.position """ } diff --git a/core_db/src/main/java/jp/co/soramitsu/core_db/dao/PoolDao.kt b/core_db/src/main/java/jp/co/soramitsu/core_db/dao/PoolDao.kt index b3fbad73e..03a76b350 100644 --- a/core_db/src/main/java/jp/co/soramitsu/core_db/dao/PoolDao.kt +++ b/core_db/src/main/java/jp/co/soramitsu/core_db/dao/PoolDao.kt @@ -33,6 +33,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. package jp.co.soramitsu.core_db.dao import androidx.room.Dao +import androidx.room.Delete import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query @@ -63,7 +64,10 @@ interface PoolDao { select * from allpools where tokenIdBase=:base and tokenIdTarget=:target """ ) - fun getBasicPool(base: String, target: String): BasicPoolLocal? + suspend fun getBasicPool(base: String, target: String): BasicPoolLocal? + + @Query("select * from allpools") + suspend fun getBasicPools(): List @Query("select * from poolBaseTokens left join tokens on poolBaseTokens.tokenId = tokens.id") suspend fun getPoolBaseTokens(): List @@ -106,6 +110,9 @@ interface PoolDao { ) fun subscribePool(assetId: String, baseTokenId: String): Flow> + @Delete + suspend fun deleteBasicPools(p: List) + @Upsert() suspend fun insertBasicPools(pools: List) diff --git a/feature_polkaswap_impl/src/main/java/jp/co/soramitsu/feature_polkaswap_impl/data/repository/PolkaswapSubscriptionRepositoryImpl.kt b/feature_polkaswap_impl/src/main/java/jp/co/soramitsu/feature_polkaswap_impl/data/repository/PolkaswapSubscriptionRepositoryImpl.kt index a33cba885..f3fbf4a90 100644 --- a/feature_polkaswap_impl/src/main/java/jp/co/soramitsu/feature_polkaswap_impl/data/repository/PolkaswapSubscriptionRepositoryImpl.kt +++ b/feature_polkaswap_impl/src/main/java/jp/co/soramitsu/feature_polkaswap_impl/data/repository/PolkaswapSubscriptionRepositoryImpl.kt @@ -323,6 +323,10 @@ class PolkaswapSubscriptionRepositoryImpl @Inject constructor( } } } + val minus = db.poolDao().getBasicPools().filter { db -> + list.find { it.tokenIdBase == db.tokenIdBase && it.tokenIdTarget == db.tokenIdTarget } == null + } + db.poolDao().deleteBasicPools(minus) db.poolDao().insertBasicPools(list) }