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
|
// Extend CollectionReference and Query with some filters
|
||||||
|
|
||||||
private fun CollectionReference.nonArchived(): Query =
|
fun CollectionReference.nonArchived(): Query =
|
||||||
this.whereEqualTo(TaskDocument.archived, false)
|
this.whereEqualTo(TaskDocument.archived, false)
|
||||||
|
|
||||||
private fun Query.nonArchived(): Query =
|
fun Query.nonArchived(): Query =
|
||||||
this.whereEqualTo(TaskDocument.archived, false)
|
this.whereEqualTo(TaskDocument.archived, false)
|
||||||
|
|
||||||
private fun CollectionReference.completed(): Query =
|
fun CollectionReference.completed(): Query =
|
||||||
this.whereEqualTo(TaskDocument.completed, true)
|
this.whereEqualTo(TaskDocument.completed, true)
|
||||||
|
|
||||||
private fun Query.completed(): Query =
|
fun Query.completed(): Query =
|
||||||
this.whereEqualTo(TaskDocument.completed, true)
|
this.whereEqualTo(TaskDocument.completed, true)
|
||||||
|
|
||||||
}
|
|
Reference in a new issue