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.TransactionEntity
import cash.z.ecc.android.sdk.db.entity.Utxo import cash.z.ecc.android.sdk.db.entity.Utxo
import cash.z.ecc.android.sdk.ext.twig import cash.z.ecc.android.sdk.ext.twig
import cash.z.ecc.android.sdk.type.UnifiedAddressAccount
// //
// Database // Database
@ -46,6 +47,7 @@ abstract class DerivedDataDb : RoomDatabase() {
abstract fun blockDao(): BlockDao abstract fun blockDao(): BlockDao
abstract fun receivedDao(): ReceivedDao abstract fun receivedDao(): ReceivedDao
abstract fun sentDao(): SentDao abstract fun sentDao(): SentDao
abstract fun accountDao(): AccountDao
// //
// Migrations // Migrations
@ -175,7 +177,6 @@ abstract class DerivedDataDb : RoomDatabase() {
); );
""".trimIndent() """.trimIndent()
) )
database.execSQL("INSERT INTO accounts_new SELECT * FROM accounts;")
database.execSQL("DROP TABLE accounts;") database.execSQL("DROP TABLE accounts;")
database.execSQL("ALTER TABLE accounts_new RENAME TO accounts;") database.execSQL("ALTER TABLE accounts_new RENAME TO accounts;")
database.execSQL("PRAGMA foreign_keys = ON;") database.execSQL("PRAGMA foreign_keys = ON;")
@ -221,6 +222,20 @@ interface SentDao {
fun count(): Int 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 * The data access object for transactions, used for querying all transaction information, including
* whether transactions are mined. * whether transactions are mined.

View File

@ -4,6 +4,7 @@ import android.content.Context
import androidx.paging.PagedList import androidx.paging.PagedList
import androidx.room.Room import androidx.room.Room
import androidx.room.RoomDatabase 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.BlockDao
import cash.z.ecc.android.sdk.db.DerivedDataDb import cash.z.ecc.android.sdk.db.DerivedDataDb
import cash.z.ecc.android.sdk.db.TransactionDao 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.ZcashSdk
import cash.z.ecc.android.sdk.ext.android.toFlowPagedList import cash.z.ecc.android.sdk.ext.android.toFlowPagedList
import cash.z.ecc.android.sdk.ext.android.toRefreshable 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.Dispatchers.IO
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@ -50,6 +52,7 @@ open class PagedTransactionRepository(
} }
private val blocks: BlockDao = derivedDataDb.blockDao() private val blocks: BlockDao = derivedDataDb.blockDao()
private val accounts: AccountDao = derivedDataDb.accountDao()
private val transactions: TransactionDao = derivedDataDb.transactionDao() private val transactions: TransactionDao = derivedDataDb.transactionDao()
private val receivedTxDataSourceFactory = transactions.getReceivedTransactions().toRefreshable() private val receivedTxDataSourceFactory = transactions.getReceivedTransactions().toRefreshable()
private val sentTxDataSourceFactory = transactions.getSentTransactions().toRefreshable() private val sentTxDataSourceFactory = transactions.getSentTransactions().toRefreshable()
@ -95,6 +98,9 @@ open class PagedTransactionRepository(
override suspend fun count(): Int = withContext(IO) { override suspend fun count(): Int = withContext(IO) {
transactions.count() transactions.count()
} }
override suspend fun getAccount(accountId: Int): UnifiedAddressAccount? = accounts.findAccountById(accountId)
/** /**
* Close the underlying database. * 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 // 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 findBlockHash(height: Int): ByteArray? = blocks.findHashByHeight(height)
fun getTransactionCount(): Int = transactions.count() 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 androidx.paging.PagedList
import cash.z.ecc.android.sdk.db.entity.ConfirmedTransaction import cash.z.ecc.android.sdk.db.entity.ConfirmedTransaction
import cash.z.ecc.android.sdk.db.entity.EncodedTransaction import cash.z.ecc.android.sdk.db.entity.EncodedTransaction
import cash.z.ecc.android.sdk.type.UnifiedAddressAccount
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
/** /**
@ -76,6 +77,8 @@ interface TransactionRepository {
suspend fun count(): Int suspend fun count(): Int
suspend fun getAccount(accountId: Int): UnifiedAddressAccount?
// //
// Transactions // Transactions
// //