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 deleteSubject(oldSubject: Subject) | ||||||
| 
 | 
 | ||||||
|     fun updateSubject(newSubject: 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? |     suspend fun getSubject(subjectId: String): Subject? | ||||||
| } | } | ||||||
|  | @ -14,11 +14,5 @@ interface TaskDAO { | ||||||
| 
 | 
 | ||||||
|     fun deleteTask(oldTask: Task) |     fun deleteTask(oldTask: Task) | ||||||
| 
 | 
 | ||||||
|     fun toggleTaskCompleted(task: Task, completed: Boolean) |  | ||||||
| 
 |  | ||||||
|     suspend fun getTask(subjectId: String, taskId: String): Task |     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.AccountDAO | ||||||
| import be.ugent.sel.studeez.domain.SubjectDAO | import be.ugent.sel.studeez.domain.SubjectDAO | ||||||
| import be.ugent.sel.studeez.domain.TaskDAO | import be.ugent.sel.studeez.domain.TaskDAO | ||||||
|  | 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.ktx.snapshots | import com.google.firebase.firestore.ktx.snapshots | ||||||
|  | @ -24,8 +25,8 @@ class FireBaseSubjectDAO @Inject constructor( | ||||||
|             .map { it.toObjects(Subject::class.java) } |             .map { it.toObjects(Subject::class.java) } | ||||||
|             .map { subjects -> |             .map { subjects -> | ||||||
|                 subjects.map { subject -> |                 subjects.map { subject -> | ||||||
|                     subject.taskCount = taskDAO.getTaskCount(subject) |                     subject.taskCount = getTaskCount(subject) | ||||||
|                     subject.taskCompletedCount = taskDAO.getCompletedTaskCount(subject) |                     subject.taskCompletedCount = getCompletedTaskCount(subject) | ||||||
|                     subject |                     subject | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | @ -47,8 +48,39 @@ class FireBaseSubjectDAO @Inject constructor( | ||||||
|         currentUserSubjectsCollection().document(newSubject.id).set(newSubject) |         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 = |     private fun currentUserSubjectsCollection(): CollectionReference = | ||||||
|         firestore.collection(FireBaseCollections.USER_COLLECTION) |         firestore.collection(FireBaseCollections.USER_COLLECTION) | ||||||
|             .document(auth.currentUserId) |             .document(auth.currentUserId) | ||||||
|             .collection(FireBaseCollections.SUBJECT_COLLECTION) |             .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.data.local.models.task.TaskDocument | ||||||
| import be.ugent.sel.studeez.domain.AccountDAO | import be.ugent.sel.studeez.domain.AccountDAO | ||||||
| import be.ugent.sel.studeez.domain.TaskDAO | import be.ugent.sel.studeez.domain.TaskDAO | ||||||
| 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.Query | ||||||
|  | @ -31,44 +30,20 @@ class FireBaseTaskDAO @Inject constructor( | ||||||
|         return selectedSubjectTasksCollection(subjectId).document(taskId).get().await().toObject()!! |         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) { |     override fun saveTask(newTask: Task) { | ||||||
|         selectedSubjectTasksCollection(newTask.subjectId).add(newTask) |         selectedSubjectTasksCollection(newTask.subjectId).add(newTask) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun updateTask(newTask: Task) { |     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) { |     override fun deleteTask(oldTask: Task) { | ||||||
|         selectedSubjectTasksCollection(oldTask.subjectId).document(oldTask.id).delete() |         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 = |     private fun selectedSubjectTasksCollection(subjectId: String): CollectionReference = | ||||||
|         firestore.collection(FireBaseCollections.USER_COLLECTION) |         firestore.collection(FireBaseCollections.USER_COLLECTION) | ||||||
|             .document(auth.currentUserId) |             .document(auth.currentUserId) | ||||||
|  | @ -76,18 +51,18 @@ class FireBaseTaskDAO @Inject constructor( | ||||||
|             .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) |  | ||||||
| 
 |  | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // Extend CollectionReference and Query with some filters | ||||||
|  | 
 | ||||||
|  | fun CollectionReference.nonArchived(): Query = | ||||||
|  |     this.whereEqualTo(TaskDocument.archived, false) | ||||||
|  | 
 | ||||||
|  | fun Query.nonArchived(): Query = | ||||||
|  |     this.whereEqualTo(TaskDocument.archived, false) | ||||||
|  | 
 | ||||||
|  | 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