implement TaskDAO as a very simple fluent interface
This commit is contained in:
parent
e35f143854
commit
8a395fbd4e
1 changed files with 20 additions and 4 deletions
|
@ -8,6 +8,7 @@ import be.ugent.sel.studeez.domain.TaskDAO
|
||||||
import com.google.firebase.firestore.AggregateSource
|
import com.google.firebase.firestore.AggregateSource
|
||||||
import com.google.firebase.firestore.CollectionReference
|
import com.google.firebase.firestore.CollectionReference
|
||||||
import com.google.firebase.firestore.FirebaseFirestore
|
import com.google.firebase.firestore.FirebaseFirestore
|
||||||
|
import com.google.firebase.firestore.Query
|
||||||
import com.google.firebase.firestore.ktx.snapshots
|
import com.google.firebase.firestore.ktx.snapshots
|
||||||
import com.google.firebase.firestore.ktx.toObject
|
import com.google.firebase.firestore.ktx.toObject
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
@ -21,7 +22,7 @@ class FireBaseTaskDAO @Inject constructor(
|
||||||
) : TaskDAO {
|
) : TaskDAO {
|
||||||
override fun getTasks(subject: Subject): Flow<List<Task>> {
|
override fun getTasks(subject: Subject): Flow<List<Task>> {
|
||||||
return selectedSubjectTasksCollection(subject.id)
|
return selectedSubjectTasksCollection(subject.id)
|
||||||
.whereEqualTo(TaskDocument.archived, false)
|
.nonArchived()
|
||||||
.snapshots()
|
.snapshots()
|
||||||
.map { it.toObjects(Task::class.java) }
|
.map { it.toObjects(Task::class.java) }
|
||||||
}
|
}
|
||||||
|
@ -32,7 +33,7 @@ class FireBaseTaskDAO @Inject constructor(
|
||||||
|
|
||||||
override suspend fun getTaskCount(subject: Subject): Int {
|
override suspend fun getTaskCount(subject: Subject): Int {
|
||||||
return selectedSubjectTasksCollection(subject.id)
|
return selectedSubjectTasksCollection(subject.id)
|
||||||
.whereEqualTo(TaskDocument.archived, false)
|
.nonArchived()
|
||||||
.count()
|
.count()
|
||||||
.get(AggregateSource.SERVER)
|
.get(AggregateSource.SERVER)
|
||||||
.await()
|
.await()
|
||||||
|
@ -41,8 +42,8 @@ class FireBaseTaskDAO @Inject constructor(
|
||||||
|
|
||||||
override suspend fun getCompletedTaskCount(subject: Subject): Int {
|
override suspend fun getCompletedTaskCount(subject: Subject): Int {
|
||||||
return selectedSubjectTasksCollection(subject.id)
|
return selectedSubjectTasksCollection(subject.id)
|
||||||
.whereEqualTo(TaskDocument.completed, true)
|
.completed()
|
||||||
.whereEqualTo(TaskDocument.archived, false)
|
.nonArchived()
|
||||||
.count()
|
.count()
|
||||||
.get(AggregateSource.SERVER)
|
.get(AggregateSource.SERVER)
|
||||||
.await()
|
.await()
|
||||||
|
@ -74,4 +75,19 @@ class FireBaseTaskDAO @Inject constructor(
|
||||||
.collection(FireBaseCollections.SUBJECT_COLLECTION)
|
.collection(FireBaseCollections.SUBJECT_COLLECTION)
|
||||||
.document(subjectId)
|
.document(subjectId)
|
||||||
.collection(FireBaseCollections.TASK_COLLECTION)
|
.collection(FireBaseCollections.TASK_COLLECTION)
|
||||||
|
|
||||||
|
// Extend CollectionReference and Query with some filters
|
||||||
|
|
||||||
|
private fun CollectionReference.nonArchived(): Query =
|
||||||
|
this.whereEqualTo(TaskDocument.archived, false)
|
||||||
|
|
||||||
|
private fun Query.nonArchived(): Query =
|
||||||
|
this.whereEqualTo(TaskDocument.archived, false)
|
||||||
|
|
||||||
|
private fun CollectionReference.completed(): Query =
|
||||||
|
this.whereEqualTo(TaskDocument.completed, true)
|
||||||
|
|
||||||
|
private fun Query.completed(): Query =
|
||||||
|
this.whereEqualTo(TaskDocument.completed, true)
|
||||||
|
|
||||||
}
|
}
|
Reference in a new issue