From 1c018346aed1163acfa91f47424354aa50412bb1 Mon Sep 17 00:00:00 2001 From: Severiano Jaramillo Date: Thu, 1 Nov 2018 11:19:32 -0600 Subject: [PATCH] Create UserAccountAuthority entity to establish a N:N relationship between the UserAccount and Authority entities in the database. Also made some structure improvements to all the Entities and Daos already described. --- .../bitsybitshareswallet/daos/AssetDao.kt | 6 ++--- .../bitsybitshareswallet/daos/AuthorityDao.kt | 6 ++--- .../bitsybitshareswallet/daos/BalanceDao.kt | 6 ++--- .../daos/BitsyDatabase.kt | 11 ++++++-- .../daos/UserAccountAuthorityDao.kt | 17 +++++++++++++ .../daos/UserAccountDao.kt | 6 ++--- .../bitsybitshareswallet/models/Authority.kt | 11 +------- .../bitsybitshareswallet/models/Balance.kt | 5 ++-- .../models/EquivalentValue.kt | 8 ++---- .../bitsybitshareswallet/models/Transfer.kt | 12 ++++----- .../models/UserAccount.kt | 3 ++- .../models/UserAccountAuthority.kt | 25 +++++++++++++++++++ 12 files changed, 76 insertions(+), 40 deletions(-) create mode 100644 app/src/main/java/cy/agorise/bitsybitshareswallet/daos/UserAccountAuthorityDao.kt create mode 100644 app/src/main/java/cy/agorise/bitsybitshareswallet/models/UserAccountAuthority.kt diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/AssetDao.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/AssetDao.kt index 2970c84..aaac373 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/AssetDao.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/AssetDao.kt @@ -9,9 +9,9 @@ import cy.agorise.bitsybitshareswallet.models.Asset @Dao interface AssetDao { - @Query("SELECT * FROM assets") - fun getAllAssets(): LiveData> - @Insert fun insert(asset: Asset) + + @Query("SELECT * FROM assets") + fun getAllAssets(): LiveData> } diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/AuthorityDao.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/AuthorityDao.kt index 678e6af..01e743c 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/AuthorityDao.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/AuthorityDao.kt @@ -9,9 +9,9 @@ import cy.agorise.bitsybitshareswallet.models.Authority @Dao interface AuthorityDao { - @Query("SELECT * FROM authorities") - fun getAllAuthorities(): LiveData> - @Insert fun insert(authority: Authority) + + @Query("SELECT * FROM authorities") + fun getAllAuthorities(): LiveData> } \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/BalanceDao.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/BalanceDao.kt index 3e1cf65..c646f78 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/BalanceDao.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/BalanceDao.kt @@ -9,9 +9,9 @@ import cy.agorise.bitsybitshareswallet.models.Balance @Dao interface BalanceDao { - @Query("SELECT * FROM balances") - fun getAllBalances(): LiveData> - @Insert fun insert(balance: Balance) + + @Query("SELECT * FROM balances") + fun getAllBalances(): LiveData> } \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/BitsyDatabase.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/BitsyDatabase.kt index b1dfa75..b428930 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/BitsyDatabase.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/BitsyDatabase.kt @@ -4,15 +4,22 @@ import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase -import cy.agorise.bitsybitshareswallet.models.Asset +import cy.agorise.bitsybitshareswallet.models.* -@Database(entities = [Asset::class], version = 1, exportSchema = false) +@Database(entities = [ + Asset::class, + Balance::class, + UserAccount::class, + Authority::class, + UserAccountAuthority::class + ], version = 1, exportSchema = false) abstract class BitsyDatabase : RoomDatabase() { abstract fun assetDao(): AssetDao abstract fun balanceDao(): BalanceDao abstract fun userAccountDao(): UserAccountDao abstract fun authorityDao(): AuthorityDao + abstract fun userAccountAuthorityDao(): UserAccountAuthorityDao companion object { diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/UserAccountAuthorityDao.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/UserAccountAuthorityDao.kt new file mode 100644 index 0000000..d263509 --- /dev/null +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/UserAccountAuthorityDao.kt @@ -0,0 +1,17 @@ +package cy.agorise.bitsybitshareswallet.daos + +import androidx.lifecycle.LiveData +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.Query +import cy.agorise.bitsybitshareswallet.models.Authority + +@Dao +interface UserAccountAuthorityDao { + + @Insert + fun insert(userAccountAuthorityDao: UserAccountAuthorityDao) + + @Query("SELECT * FROM user_accounts INNER JOIN user_accounts__authorities ON user_accounts.id=user_accounts__authorities.user_account_id WHERE user_accounts__authorities.user_account_id=:userAccountId") + fun getAuthoritiesForUserAccount(userAccountId: String): LiveData> +} \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/UserAccountDao.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/UserAccountDao.kt index 9bb78f4..5319b6f 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/UserAccountDao.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/daos/UserAccountDao.kt @@ -9,9 +9,9 @@ import cy.agorise.bitsybitshareswallet.models.UserAccount @Dao interface UserAccountDao { - @Query("SELECT * FROM user_accounts") - fun getAllUserAccounts(): LiveData> - @Insert fun insert(userAccount: UserAccount) + + @Query("SELECT * FROM user_accounts") + fun getAllUserAccounts(): LiveData> } \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Authority.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Authority.kt index 38d6c80..70ee83b 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Authority.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Authority.kt @@ -2,18 +2,9 @@ package cy.agorise.bitsybitshareswallet.models import androidx.room.ColumnInfo import androidx.room.Entity -import androidx.room.ForeignKey import androidx.room.PrimaryKey -@Entity(tableName = "authorities", foreignKeys = - [ForeignKey( - entity = UserAccount::class, - parentColumns = ["id"], - childColumns = ["user_id"], - onUpdate = ForeignKey.CASCADE, - onDelete = ForeignKey.CASCADE - )] -) +@Entity(tableName = "authorities") data class Authority ( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") val id: Long, diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Balance.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Balance.kt index 8bfd802..47e2900 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Balance.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Balance.kt @@ -3,9 +3,10 @@ package cy.agorise.bitsybitshareswallet.models import androidx.room.ColumnInfo import androidx.room.Entity -@Entity(tableName = "balances", primaryKeys = ["user_id", "asset_id"]) +@Entity(tableName = "balances", primaryKeys = ["user_account_id", "asset_id"]) +// TODO verify if we can add user_account_id as primary key data class Balance( - @ColumnInfo(name = "user_id") val userId: String, + @ColumnInfo(name = "user_account_id") val userAccountId: String, @ColumnInfo(name = "asset_id") val assetId: String, @ColumnInfo(name = "asset_amount") val assetAmount: Long, @ColumnInfo(name = "last_update") val lastUpdate: Long diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/EquivalentValue.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/EquivalentValue.kt index 19a126d..d37cf33 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/EquivalentValue.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/EquivalentValue.kt @@ -9,15 +9,11 @@ import androidx.room.PrimaryKey [ForeignKey( entity = Transfer::class, parentColumns = ["operation_id"], - childColumns = ["transfer_id"], - onUpdate = ForeignKey.CASCADE, - onDelete = ForeignKey.CASCADE + childColumns = ["transfer_id"] ), ForeignKey( entity = Asset::class, parentColumns = ["id"], - childColumns = ["asset_id"], - onUpdate = ForeignKey.CASCADE, - onDelete = ForeignKey.CASCADE + childColumns = ["asset_id"] )] ) data class EquivalentValue ( diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Transfer.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Transfer.kt index abf1456..b582d55 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Transfer.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/Transfer.kt @@ -9,20 +9,18 @@ import androidx.room.PrimaryKey [ForeignKey( entity = Operation::class, parentColumns = ["id"], - childColumns = ["operation_id"], - onUpdate = ForeignKey.CASCADE, - onDelete = ForeignKey.CASCADE + childColumns = ["operation_id"] )] ) data class Transfer ( @PrimaryKey @ColumnInfo(name = "operation_id") val operationId: String, @ColumnInfo(name = "fee_amount") val feeAmount: Long, - @ColumnInfo(name = "fee_asset_id") val feeAssetId: String, - @ColumnInfo(name = "source") val source: String, - @ColumnInfo(name = "destination") val destination: String, + @ColumnInfo(name = "fee_asset_id") val feeAssetId: String, // TODO should be foreign key to Asset + @ColumnInfo(name = "source") val source: String, // TODO should be foreign key to UserAccount + @ColumnInfo(name = "destination") val destination: String, // TODO should be foreign key to UserAccount @ColumnInfo(name = "transfer_amount") val transferAmount: Long, - @ColumnInfo(name = "transfer_asset_id") val transferAssetId: String, + @ColumnInfo(name = "transfer_asset_id") val transferAssetId: String, // TODO should be foreign key to Asset @ColumnInfo(name = "memo") val memo: String, @ColumnInfo(name = "memo_from_key") val memoFromKey: String, @ColumnInfo(name = "memo_to_key") val memoToKey: String diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/UserAccount.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/UserAccount.kt index 7ed6aa9..ad6a3b5 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/UserAccount.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/UserAccount.kt @@ -9,5 +9,6 @@ data class UserAccount ( @PrimaryKey @ColumnInfo(name = "id") val id: String, @ColumnInfo(name = "name") val name: String, - @ColumnInfo(name = "is_ltm") val isLtm: Boolean // Todo verify data type + @ColumnInfo(name = "is_ltm") val isLtm: Boolean, // Todo verify data type + @ColumnInfo(name = "weight_threshold") val weightThreshold: Int // TODO verify data type ) \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/models/UserAccountAuthority.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/UserAccountAuthority.kt new file mode 100644 index 0000000..6eb09ef --- /dev/null +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/models/UserAccountAuthority.kt @@ -0,0 +1,25 @@ +package cy.agorise.bitsybitshareswallet.models + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.ForeignKey + +/** + * Table to create a N:N relationship between [UserAccount] and [Authority] + */ +@Entity(tableName = "user_accounts__authorities", + primaryKeys = ["user_account_id", "authority_id"], + foreignKeys = [ForeignKey( + entity = UserAccount::class, + parentColumns = ["id"], + childColumns = ["user_account_id"] + ), ForeignKey( + entity = Authority::class, + parentColumns = ["id"], + childColumns = ["authority_id"] + )]) +data class UserAccountAuthority ( + @ColumnInfo(name = "user_account_id") val userAccountId: String, + @ColumnInfo(name = "authority_id") val authorityId: Long, + @ColumnInfo(name = "weight") val weight: Int // TODO verify data type +) \ No newline at end of file