diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/SubjectDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/SubjectDAO.kt index da6abbe..bad8106 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/SubjectDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/SubjectDAO.kt @@ -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 + suspend fun getSubject(subjectId: String): Subject? } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/TaskDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/TaskDAO.kt index 4c7ee44..8a2dd41 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/TaskDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/TaskDAO.kt @@ -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 } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseSubjectDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseSubjectDAO.kt index 9156771..3e9ae13 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseSubjectDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseSubjectDAO.kt @@ -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 { + 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) } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseTaskDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseTaskDAO.kt index 049bb54..bde5c6f 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseTaskDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseTaskDAO.kt @@ -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) -} \ No newline at end of file +fun Query.completed(): Query = + this.whereEqualTo(TaskDocument.completed, true)