refactor DAO's

This commit is contained in:
brreynie 2023-05-09 21:01:19 +02:00
parent 8a395fbd4e
commit a60422e004
4 changed files with 52 additions and 46 deletions

View file

@ -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?
}

View file

@ -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
}

View file

@ -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)
}

View file

@ -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)