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
	
	 brreynie
						brreynie