#74 added FeedDAO and firebase implementation
This commit is contained in:
parent
a0ea97dc52
commit
bee7101bef
2 changed files with 54 additions and 1 deletions
|
@ -1,4 +1,10 @@
|
||||||
package be.ugent.sel.studeez.domain
|
package be.ugent.sel.studeez.domain
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.local.models.FeedEntry
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
interface FeedDAO {
|
interface FeedDAO {
|
||||||
|
|
||||||
|
fun getFeedEntries(): Flow<List<FeedEntry>>
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,4 +1,51 @@
|
||||||
package be.ugent.sel.studeez.domain.implementation
|
package be.ugent.sel.studeez.domain.implementation
|
||||||
|
|
||||||
class FirebaseFeedDAO {
|
import be.ugent.sel.studeez.data.local.models.FeedEntry
|
||||||
|
import be.ugent.sel.studeez.data.local.models.SessionReport
|
||||||
|
import be.ugent.sel.studeez.data.local.models.task.Subject
|
||||||
|
import be.ugent.sel.studeez.data.local.models.task.Task
|
||||||
|
import be.ugent.sel.studeez.domain.FeedDAO
|
||||||
|
import be.ugent.sel.studeez.domain.SessionDAO
|
||||||
|
import be.ugent.sel.studeez.domain.TaskDAO
|
||||||
|
import kotlinx.coroutines.flow.*
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class FirebaseFeedDAO @Inject constructor(
|
||||||
|
private val sessionDAO: SessionDAO,
|
||||||
|
private val taskDAO: TaskDAO,
|
||||||
|
private val subjectDAO: FireBaseSubjectDAO
|
||||||
|
) : FeedDAO {
|
||||||
|
|
||||||
|
override fun getFeedEntries(): Flow<List<FeedEntry>> {
|
||||||
|
return sessionDAO.getSessions().map {sessionReports ->
|
||||||
|
sessionReports
|
||||||
|
.map { sessionReport -> sessionToFeedEntry(sessionReport) }
|
||||||
|
.groupBy { it.taskId }
|
||||||
|
.map { fuseFeedEntries(it.component2()) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun fuseFeedEntries(entries: List<FeedEntry>): FeedEntry =
|
||||||
|
entries.fold(entries[0]) { accEntry, newEntry ->
|
||||||
|
val newStudyTime = accEntry.totalStudyTime + newEntry.totalStudyTime
|
||||||
|
accEntry.copy(totalStudyTime = newStudyTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private suspend fun sessionToFeedEntry(sessionReport: SessionReport): FeedEntry {
|
||||||
|
val subjectId: String = sessionReport.subjectId
|
||||||
|
val taskId: String = sessionReport.taskId
|
||||||
|
|
||||||
|
val task: Task = taskDAO.getTask(subjectId, taskId)
|
||||||
|
val subject: Subject = subjectDAO.getSubject(subjectId)!!
|
||||||
|
|
||||||
|
return FeedEntry(
|
||||||
|
argb_color = subject.argb_color,
|
||||||
|
subJectName = subject.name,
|
||||||
|
taskName = task.name,
|
||||||
|
taskId = task.id,
|
||||||
|
subjectId = subject.id,
|
||||||
|
totalStudyTime = sessionReport.studyTime
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
Reference in a new issue