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