diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/FeedDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/FeedDAO.kt index cc8ae0c..05d4425 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/FeedDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/FeedDAO.kt @@ -1,4 +1,10 @@ package be.ugent.sel.studeez.domain +import be.ugent.sel.studeez.data.local.models.FeedEntry +import kotlinx.coroutines.flow.Flow + interface FeedDAO { + + fun getFeedEntries(): Flow> + } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseFeedDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseFeedDAO.kt index df9ef8f..c406b45 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseFeedDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseFeedDAO.kt @@ -1,4 +1,51 @@ 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> { + return sessionDAO.getSessions().map {sessionReports -> + sessionReports + .map { sessionReport -> sessionToFeedEntry(sessionReport) } + .groupBy { it.taskId } + .map { fuseFeedEntries(it.component2()) } + } + } + + private fun fuseFeedEntries(entries: List): 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 + ) + } } \ No newline at end of file