New: Add getAccount.

This commit is contained in:
Kevin Gorham 2021-04-05 18:39:26 -04:00
parent 39972d8e43
commit 278adfe0b9
No known key found for this signature in database
GPG Key ID: CCA55602DF49FC38
3 changed files with 27 additions and 1 deletions

View File

@ -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.

View File

@ -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"
}

View File

@ -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
//