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