Implement local data source
This commit is contained in:
parent
2e645228f1
commit
1c3a09341b
|
@ -49,24 +49,28 @@ class ContactLocalDataSourceImpl(
|
|||
}.distinctUntilChanged()
|
||||
}
|
||||
|
||||
override suspend fun updateContacts(contacts: List<Contact>) {
|
||||
TODO("Not yet implemented")
|
||||
override suspend fun updateContactsOrThrow(contacts: List<Contact>) {
|
||||
val updateCount = contactDatabase.contactDao().update(*contacts.map { it.toContactEntity() }.toTypedArray())
|
||||
if (updateCount != contacts.size) throw IllegalStateException()
|
||||
}
|
||||
|
||||
override suspend fun updateContactEmails(emails: List<ContactEmail>) {
|
||||
TODO("Not yet implemented")
|
||||
override suspend fun updateContactEmailsOrThrow(emails: List<ContactEmail>) {
|
||||
val updateCount = contactDatabase.contactEmailDao().update(
|
||||
*emails.map { it.toContactEmailEntity() }.toTypedArray()
|
||||
)
|
||||
if (updateCount != emails.size) throw IllegalStateException()
|
||||
}
|
||||
|
||||
override suspend fun deleteContact(contactId: ContactId) {
|
||||
contactDatabase.contactDao().deleteContact(contactId)
|
||||
contactDatabase.contactDao().deleteContacts(contactId)
|
||||
}
|
||||
|
||||
override suspend fun deleteContacts(contactIds: List<ContactId>) {
|
||||
TODO("Not yet implemented")
|
||||
contactDatabase.contactDao().deleteContacts(*contactIds.toTypedArray())
|
||||
}
|
||||
|
||||
override suspend fun deleteContactEmails(emailIds: List<ContactEmailId>) {
|
||||
TODO("Not yet implemented")
|
||||
contactDatabase.contactEmailDao().deleteContactsEmails(*emailIds.toTypedArray())
|
||||
}
|
||||
|
||||
override suspend fun deleteAllContacts(userId: UserId) {
|
||||
|
|
|
@ -39,8 +39,8 @@ abstract class ContactDao: BaseDao<ContactEntity>() {
|
|||
@Query("SELECT * FROM ContactEntity WHERE userId = :userId")
|
||||
abstract fun observeAllContacts(userId: UserId): Flow<List<ContactWithMailsRelation>>
|
||||
|
||||
@Query("DELETE FROM ContactEntity WHERE contactId = :contactId")
|
||||
abstract suspend fun deleteContact(contactId: ContactId)
|
||||
@Query("DELETE FROM ContactEntity WHERE contactId IN (:contactIds)")
|
||||
abstract suspend fun deleteContacts(vararg contactIds: ContactId)
|
||||
|
||||
@Query("DELETE FROM ContactEntity")
|
||||
abstract suspend fun deleteAllContacts()
|
||||
|
|
|
@ -24,6 +24,7 @@ import androidx.room.Transaction
|
|||
import kotlinx.coroutines.flow.Flow
|
||||
import me.proton.core.contact.data.local.db.entity.ContactEmailEntity
|
||||
import me.proton.core.contact.data.local.db.entity.relation.ContactEmailWithLabelsRelation
|
||||
import me.proton.core.contact.domain.entity.ContactEmailId
|
||||
import me.proton.core.contact.domain.entity.ContactId
|
||||
import me.proton.core.data.room.db.BaseDao
|
||||
import me.proton.core.domain.entity.UserId
|
||||
|
@ -38,6 +39,9 @@ abstract class ContactEmailDao: BaseDao<ContactEmailEntity>() {
|
|||
@Query("SELECT * FROM ContactEmailEntity WHERE contactId = :contactId ORDER BY `order`, name")
|
||||
abstract fun observeAllContactsEmails(contactId: ContactId): Flow<List<ContactEmailWithLabelsRelation>>
|
||||
|
||||
@Query("DELETE FROM ContactEmailEntity WHERE contactId IN (:contactEmailIds)")
|
||||
abstract suspend fun deleteContactsEmails(vararg contactEmailIds: ContactEmailId)
|
||||
|
||||
@Query("DELETE FROM ContactEmailEntity WHERE userId = :userId")
|
||||
abstract suspend fun deleteAllContactsEmails(userId: UserId)
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ class ForeignKeyTests : ContactDatabaseTests() {
|
|||
db.contactDao().insertOrUpdate(User0.Contact0.contactEntity)
|
||||
db.contactCardDao().insertOrUpdate(User0.Contact0.ContactCard0.contactCardEntity)
|
||||
assert(hasContactCard())
|
||||
db.contactDao().deleteContact(User0.Contact0.contactId)
|
||||
db.contactDao().deleteContacts(User0.Contact0.contactId)
|
||||
assert(!hasContactCard())
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ class TransactionTests: ContactDatabaseTests() {
|
|||
fun `delete contact delete contact and emails`() = runBlocking {
|
||||
db.contactDao().insertOrUpdate(User0.Contact0.contactEntity)
|
||||
db.contactEmailDao().insertOrUpdate(User0.Contact0.ContactEmail0.contactEmailEntity)
|
||||
db.contactDao().deleteContact(User0.Contact0.contactId)
|
||||
db.contactDao().deleteContacts(User0.Contact0.contactId)
|
||||
assert(db.contactDao().observeContact(User0.Contact0.contactId).firstOrNull() == null)
|
||||
assert(db.contactEmailDao().observeAllContactsEmails(User0.Contact0.contactId).first().isEmpty())
|
||||
}
|
||||
|
@ -89,4 +89,15 @@ class TransactionTests: ContactDatabaseTests() {
|
|||
localDataSource.mergeContactWithCards(updatedContact)
|
||||
assert(localDataSource.observeContact(User0.Contact0.contactId).first() == updatedContact)
|
||||
}
|
||||
|
||||
@Test(expected = IllegalStateException::class)
|
||||
fun `update throws if entity not present`() = runBlocking {
|
||||
localDataSource.updateContactsOrThrow(listOf(User0.Contact0.contact))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `update doesn't throws if same entity present`() = runBlocking {
|
||||
localDataSource.mergeContacts(listOf(User0.Contact0.contact))
|
||||
localDataSource.updateContactsOrThrow(listOf(User0.Contact0.contact))
|
||||
}
|
||||
}
|
|
@ -30,8 +30,8 @@ interface ContactLocalDataSource {
|
|||
fun observeContact(contactId: ContactId): Flow<ContactWithCards>
|
||||
fun observeAllContacts(userId: UserId): Flow<List<Contact>>
|
||||
|
||||
suspend fun updateContacts(contacts: List<Contact>)
|
||||
suspend fun updateContactEmails(emails: List<ContactEmail>)
|
||||
suspend fun updateContactsOrThrow(contacts: List<Contact>)
|
||||
suspend fun updateContactEmailsOrThrow(emails: List<ContactEmail>)
|
||||
|
||||
suspend fun deleteContact(contactId: ContactId)
|
||||
suspend fun deleteContacts(contactIds: List<ContactId>)
|
||||
|
|
|
@ -23,7 +23,7 @@ plugins {
|
|||
kotlin("android")
|
||||
}
|
||||
|
||||
libVersion = Version(1, 15, 0)
|
||||
libVersion = Version(1, 16, 0)
|
||||
|
||||
android()
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ abstract class BaseDao<in T> {
|
|||
}
|
||||
|
||||
@Update
|
||||
abstract suspend fun update(vararg entities: T)
|
||||
abstract suspend fun update(vararg entities: T): Int
|
||||
|
||||
@Delete
|
||||
abstract suspend fun delete(vararg entities: T)
|
||||
|
|
Loading…
Reference in New Issue