From 278adfe0b9e8be5cf9524393d60908db915c05b2 Mon Sep 17 00:00:00 2001 From: Kevin Gorham Date: Mon, 5 Apr 2021 18:39:26 -0400 Subject: [PATCH] New: Add getAccount. --- .../cash/z/ecc/android/sdk/db/DerivedDataDb.kt | 17 ++++++++++++++++- .../transaction/PagedTransactionRepository.kt | 8 ++++++++ .../sdk/transaction/TransactionRepository.kt | 3 +++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/cash/z/ecc/android/sdk/db/DerivedDataDb.kt b/src/main/java/cash/z/ecc/android/sdk/db/DerivedDataDb.kt index 833dbc08..8b35419d 100644 --- a/src/main/java/cash/z/ecc/android/sdk/db/DerivedDataDb.kt +++ b/src/main/java/cash/z/ecc/android/sdk/db/DerivedDataDb.kt @@ -17,6 +17,7 @@ import cash.z.ecc.android.sdk.db.entity.Sent import cash.z.ecc.android.sdk.db.entity.TransactionEntity import cash.z.ecc.android.sdk.db.entity.Utxo import cash.z.ecc.android.sdk.ext.twig +import cash.z.ecc.android.sdk.type.UnifiedAddressAccount // // Database @@ -46,6 +47,7 @@ abstract class DerivedDataDb : RoomDatabase() { abstract fun blockDao(): BlockDao abstract fun receivedDao(): ReceivedDao abstract fun sentDao(): SentDao + abstract fun accountDao(): AccountDao // // Migrations @@ -175,7 +177,6 @@ abstract class DerivedDataDb : RoomDatabase() { ); """.trimIndent() ) - database.execSQL("INSERT INTO accounts_new SELECT * FROM accounts;") database.execSQL("DROP TABLE accounts;") database.execSQL("ALTER TABLE accounts_new RENAME TO accounts;") database.execSQL("PRAGMA foreign_keys = ON;") @@ -221,6 +222,20 @@ interface SentDao { fun count(): Int } +@Dao +interface AccountDao { + @Query( + """ + SELECT account AS accountId, + transparent_address AS rawTransparentAddress, + address AS rawShieldedAddress + FROM accounts + WHERE account = :id + """ + ) + suspend fun findAccountById(id: Int): UnifiedAddressAccount? +} + /** * The data access object for transactions, used for querying all transaction information, including * whether transactions are mined. diff --git a/src/main/java/cash/z/ecc/android/sdk/transaction/PagedTransactionRepository.kt b/src/main/java/cash/z/ecc/android/sdk/transaction/PagedTransactionRepository.kt index 7ea38b14..18311524 100644 --- a/src/main/java/cash/z/ecc/android/sdk/transaction/PagedTransactionRepository.kt +++ b/src/main/java/cash/z/ecc/android/sdk/transaction/PagedTransactionRepository.kt @@ -4,6 +4,7 @@ import android.content.Context import androidx.paging.PagedList import androidx.room.Room import androidx.room.RoomDatabase +import cash.z.ecc.android.sdk.db.AccountDao import cash.z.ecc.android.sdk.db.BlockDao import cash.z.ecc.android.sdk.db.DerivedDataDb import cash.z.ecc.android.sdk.db.TransactionDao @@ -11,6 +12,7 @@ import cash.z.ecc.android.sdk.db.entity.ConfirmedTransaction import cash.z.ecc.android.sdk.ext.ZcashSdk import cash.z.ecc.android.sdk.ext.android.toFlowPagedList import cash.z.ecc.android.sdk.ext.android.toRefreshable +import cash.z.ecc.android.sdk.type.UnifiedAddressAccount import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.withContext @@ -50,6 +52,7 @@ open class PagedTransactionRepository( } private val blocks: BlockDao = derivedDataDb.blockDao() + private val accounts: AccountDao = derivedDataDb.accountDao() private val transactions: TransactionDao = derivedDataDb.transactionDao() private val receivedTxDataSourceFactory = transactions.getReceivedTransactions().toRefreshable() private val sentTxDataSourceFactory = transactions.getSentTransactions().toRefreshable() @@ -95,6 +98,9 @@ open class PagedTransactionRepository( override suspend fun count(): Int = withContext(IO) { transactions.count() } + + override suspend fun getAccount(accountId: Int): UnifiedAddressAccount? = accounts.findAccountById(accountId) + /** * Close the underlying database. */ @@ -105,4 +111,6 @@ open class PagedTransactionRepository( // TODO: begin converting these into Data Access API. For now, just collect the desired operations and iterate/refactor, later fun findBlockHash(height: Int): ByteArray? = blocks.findHashByHeight(height) fun getTransactionCount(): Int = transactions.count() + + // TODO: convert this into a wallet repository rather than "transaction repository" } diff --git a/src/main/java/cash/z/ecc/android/sdk/transaction/TransactionRepository.kt b/src/main/java/cash/z/ecc/android/sdk/transaction/TransactionRepository.kt index 9d477285..3957fd47 100644 --- a/src/main/java/cash/z/ecc/android/sdk/transaction/TransactionRepository.kt +++ b/src/main/java/cash/z/ecc/android/sdk/transaction/TransactionRepository.kt @@ -3,6 +3,7 @@ package cash.z.ecc.android.sdk.transaction import androidx.paging.PagedList import cash.z.ecc.android.sdk.db.entity.ConfirmedTransaction import cash.z.ecc.android.sdk.db.entity.EncodedTransaction +import cash.z.ecc.android.sdk.type.UnifiedAddressAccount import kotlinx.coroutines.flow.Flow /** @@ -76,6 +77,8 @@ interface TransactionRepository { suspend fun count(): Int + suspend fun getAccount(accountId: Int): UnifiedAddressAccount? + // // Transactions //