refactor DAO's
This commit is contained in:
		
							parent
							
								
									8a395fbd4e
								
							
						
					
					
						commit
						a60422e004
					
				
					 4 changed files with 52 additions and 46 deletions
				
			
		|  | @ -12,5 +12,10 @@ interface SubjectDAO { | |||
|     fun deleteSubject(oldSubject: Subject) | ||||
| 
 | ||||
|     fun updateSubject(newSubject: Subject) | ||||
| 
 | ||||
|     suspend fun getTaskCount(subject: Subject): Int | ||||
|     suspend fun getCompletedTaskCount(subject: Subject): Int | ||||
|     fun getStudyTime(subject: Subject): Flow<Int> | ||||
| 
 | ||||
|     suspend fun getSubject(subjectId: String): Subject? | ||||
| } | ||||
|  | @ -14,11 +14,5 @@ interface TaskDAO { | |||
| 
 | ||||
|     fun deleteTask(oldTask: Task) | ||||
| 
 | ||||
|     fun toggleTaskCompleted(task: Task, completed: Boolean) | ||||
| 
 | ||||
|     suspend fun getTask(subjectId: String, taskId: String): Task | ||||
| 
 | ||||
|     suspend fun getTaskCount(subject: Subject): Int | ||||
| 
 | ||||
|     suspend fun getCompletedTaskCount(subject: Subject): Int | ||||
| } | ||||
|  | @ -4,6 +4,7 @@ import be.ugent.sel.studeez.data.local.models.task.Subject | |||
| import be.ugent.sel.studeez.domain.AccountDAO | ||||
| import be.ugent.sel.studeez.domain.SubjectDAO | ||||
| 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.ktx.snapshots | ||||
|  | @ -24,8 +25,8 @@ class FireBaseSubjectDAO @Inject constructor( | |||
|             .map { it.toObjects(Subject::class.java) } | ||||
|             .map { subjects -> | ||||
|                 subjects.map { subject -> | ||||
|                     subject.taskCount = taskDAO.getTaskCount(subject) | ||||
|                     subject.taskCompletedCount = taskDAO.getCompletedTaskCount(subject) | ||||
|                     subject.taskCount = getTaskCount(subject) | ||||
|                     subject.taskCompletedCount = getCompletedTaskCount(subject) | ||||
|                     subject | ||||
|                 } | ||||
|             } | ||||
|  | @ -47,8 +48,39 @@ class FireBaseSubjectDAO @Inject constructor( | |||
|         currentUserSubjectsCollection().document(newSubject.id).set(newSubject) | ||||
|     } | ||||
| 
 | ||||
|     override suspend fun getTaskCount(subject: Subject): Int { | ||||
|         return subjectTasksCollection(subject) | ||||
|             .nonArchived() | ||||
|             .count() | ||||
|             .get(AggregateSource.SERVER) | ||||
|             .await() | ||||
|             .count.toInt() | ||||
|     } | ||||
| 
 | ||||
|     override suspend fun getCompletedTaskCount(subject: Subject): Int { | ||||
|         return subjectTasksCollection(subject) | ||||
|             .nonArchived() | ||||
|             .completed() | ||||
|             .count() | ||||
|             .get(AggregateSource.SERVER) | ||||
|             .await() | ||||
|             .count.toInt() | ||||
|     } | ||||
| 
 | ||||
|     override fun getStudyTime(subject: Subject): Flow<Int> { | ||||
|         return taskDAO.getTasks(subject) | ||||
|             .map { tasks -> tasks.sumOf { it.time } } | ||||
|     } | ||||
| 
 | ||||
|     private fun currentUserSubjectsCollection(): CollectionReference = | ||||
|         firestore.collection(FireBaseCollections.USER_COLLECTION) | ||||
|             .document(auth.currentUserId) | ||||
|             .collection(FireBaseCollections.SUBJECT_COLLECTION) | ||||
| 
 | ||||
|     private fun subjectTasksCollection(subject: Subject): CollectionReference = | ||||
|         firestore.collection(FireBaseCollections.USER_COLLECTION) | ||||
|             .document(auth.currentUserId) | ||||
|             .collection(FireBaseCollections.SUBJECT_COLLECTION) | ||||
|             .document(subject.id) | ||||
|             .collection(FireBaseCollections.TASK_COLLECTION) | ||||
| } | ||||
|  | @ -5,7 +5,6 @@ import be.ugent.sel.studeez.data.local.models.task.Task | |||
| import be.ugent.sel.studeez.data.local.models.task.TaskDocument | ||||
| import be.ugent.sel.studeez.domain.AccountDAO | ||||
| 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 | ||||
|  | @ -31,44 +30,20 @@ class FireBaseTaskDAO @Inject constructor( | |||
|         return selectedSubjectTasksCollection(subjectId).document(taskId).get().await().toObject()!! | ||||
|     } | ||||
| 
 | ||||
|     override suspend fun getTaskCount(subject: Subject): Int { | ||||
|         return selectedSubjectTasksCollection(subject.id) | ||||
|             .nonArchived() | ||||
|             .count() | ||||
|             .get(AggregateSource.SERVER) | ||||
|             .await() | ||||
|             .count.toInt() | ||||
|     } | ||||
| 
 | ||||
|     override suspend fun getCompletedTaskCount(subject: Subject): Int { | ||||
|         return selectedSubjectTasksCollection(subject.id) | ||||
|             .completed() | ||||
|             .nonArchived() | ||||
|             .count() | ||||
|             .get(AggregateSource.SERVER) | ||||
|             .await() | ||||
|             .count.toInt() | ||||
|     } | ||||
| 
 | ||||
|     override fun saveTask(newTask: Task) { | ||||
|         selectedSubjectTasksCollection(newTask.subjectId).add(newTask) | ||||
|     } | ||||
| 
 | ||||
|     override fun updateTask(newTask: Task) { | ||||
|         selectedSubjectTasksCollection(newTask.subjectId).document(newTask.id).set(newTask) | ||||
|         selectedSubjectTasksCollection(newTask.subjectId) | ||||
|             .document(newTask.id) | ||||
|             .set(newTask) | ||||
|     } | ||||
| 
 | ||||
|     override fun deleteTask(oldTask: Task) { | ||||
|         selectedSubjectTasksCollection(oldTask.subjectId).document(oldTask.id).delete() | ||||
|     } | ||||
| 
 | ||||
|     override fun toggleTaskCompleted(task: Task, completed: Boolean) { | ||||
|         selectedSubjectTasksCollection(task.subjectId) | ||||
|             .document(task.id) | ||||
| //            .update(TaskDocument.completed, completed) | ||||
|             .set(task.copy(completed = completed)) | ||||
|     } | ||||
| 
 | ||||
|     private fun selectedSubjectTasksCollection(subjectId: String): CollectionReference = | ||||
|         firestore.collection(FireBaseCollections.USER_COLLECTION) | ||||
|             .document(auth.currentUserId) | ||||
|  | @ -76,18 +51,18 @@ class FireBaseTaskDAO @Inject constructor( | |||
|             .document(subjectId) | ||||
|             .collection(FireBaseCollections.TASK_COLLECTION) | ||||
| 
 | ||||
|     // Extend CollectionReference and Query with some filters | ||||
| } | ||||
| 
 | ||||
|     private fun CollectionReference.nonArchived(): Query = | ||||
|         this.whereEqualTo(TaskDocument.archived, false) | ||||
| // Extend CollectionReference and Query with some filters | ||||
| 
 | ||||
|     private fun Query.nonArchived(): Query = | ||||
|         this.whereEqualTo(TaskDocument.archived, false) | ||||
| fun CollectionReference.nonArchived(): Query = | ||||
|     this.whereEqualTo(TaskDocument.archived, false) | ||||
| 
 | ||||
|     private fun CollectionReference.completed(): Query = | ||||
|         this.whereEqualTo(TaskDocument.completed, true) | ||||
| fun Query.nonArchived(): Query = | ||||
|     this.whereEqualTo(TaskDocument.archived, false) | ||||
| 
 | ||||
|     private fun Query.completed(): Query = | ||||
|         this.whereEqualTo(TaskDocument.completed, true) | ||||
| fun CollectionReference.completed(): Query = | ||||
|     this.whereEqualTo(TaskDocument.completed, true) | ||||
| 
 | ||||
| } | ||||
| fun Query.completed(): Query = | ||||
|     this.whereEqualTo(TaskDocument.completed, true) | ||||
|  |  | |||
		Reference in a new issue
	
	 brreynie
						brreynie