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.CollectionReference
 | 
			
		||||
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.toObject
 | 
			
		||||
import kotlinx.coroutines.flow.Flow
 | 
			
		||||
| 
						 | 
				
			
			@ -21,7 +22,7 @@ class FireBaseTaskDAO @Inject constructor(
 | 
			
		|||
) : TaskDAO {
 | 
			
		||||
    override fun getTasks(subject: Subject): Flow<List<Task>> {
 | 
			
		||||
        return selectedSubjectTasksCollection(subject.id)
 | 
			
		||||
            .whereEqualTo(TaskDocument.archived, false)
 | 
			
		||||
            .nonArchived()
 | 
			
		||||
            .snapshots()
 | 
			
		||||
            .map { it.toObjects(Task::class.java) }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +33,7 @@ class FireBaseTaskDAO @Inject constructor(
 | 
			
		|||
 | 
			
		||||
    override suspend fun getTaskCount(subject: Subject): Int {
 | 
			
		||||
        return selectedSubjectTasksCollection(subject.id)
 | 
			
		||||
            .whereEqualTo(TaskDocument.archived, false)
 | 
			
		||||
            .nonArchived()
 | 
			
		||||
            .count()
 | 
			
		||||
            .get(AggregateSource.SERVER)
 | 
			
		||||
            .await()
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +42,8 @@ class FireBaseTaskDAO @Inject constructor(
 | 
			
		|||
 | 
			
		||||
    override suspend fun getCompletedTaskCount(subject: Subject): Int {
 | 
			
		||||
        return selectedSubjectTasksCollection(subject.id)
 | 
			
		||||
            .whereEqualTo(TaskDocument.completed, true)
 | 
			
		||||
            .whereEqualTo(TaskDocument.archived, false)
 | 
			
		||||
            .completed()
 | 
			
		||||
            .nonArchived()
 | 
			
		||||
            .count()
 | 
			
		||||
            .get(AggregateSource.SERVER)
 | 
			
		||||
            .await()
 | 
			
		||||
| 
						 | 
				
			
			@ -74,4 +75,19 @@ class FireBaseTaskDAO @Inject constructor(
 | 
			
		|||
            .collection(FireBaseCollections.SUBJECT_COLLECTION)
 | 
			
		||||
            .document(subjectId)
 | 
			
		||||
            .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