diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/TimerDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/TimerDAO.kt index 5498696..ab3edcb 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/TimerDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/TimerDAO.kt @@ -1,4 +1,19 @@ package be.ugent.sel.studeez.domain +import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo +import be.ugent.sel.studeez.data.local.models.timer_info.TimerJson +import kotlinx.coroutines.flow.Flow + interface TimerDAO { + + fun getUserTimers(): Flow> + + fun getAllTimers(): Flow> + + fun saveTimer(newTimer: TimerInfo) + + fun updateTimer(timerInfo: TimerInfo) + + fun deleteTimer(timerInfo: TimerInfo) + } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseTimerDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseTimerDAO.kt index c0b0a26..a25c37c 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseTimerDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseTimerDAO.kt @@ -1,4 +1,63 @@ package be.ugent.sel.studeez.domain.implementation -class FirebaseTimerDAO { +import be.ugent.sel.studeez.data.local.models.timer_info.* +import be.ugent.sel.studeez.data.local.models.timer_info.TimerType.* +import be.ugent.sel.studeez.domain.AccountDAO +import be.ugent.sel.studeez.domain.TimerDAO +import com.google.firebase.firestore.CollectionReference +import com.google.firebase.firestore.DocumentSnapshot +import com.google.firebase.firestore.FirebaseFirestore +import com.google.firebase.firestore.ktx.snapshots +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import javax.inject.Inject + +class FirebaseTimerDAO @Inject constructor( + private val firestore: FirebaseFirestore, + private val configurationService: FirebaseConfigurationService, + private val auth: AccountDAO +) : TimerDAO { + + override fun getUserTimers(): Flow> { + return currentUserTimersCollection() + .snapshots() + .map { it.toObjects(TimerJson::class.java) } + .map { ToTimerConverter().convertToTimerInfoList(it) } + } + + override fun getAllTimers(): Flow> { + // Wrap default timers in een flow en combineer met de userTimer flow. + val defaultTimers: List = configurationService.getDefaultTimers() + val defaultTimersFlow: Flow> = flowOf(defaultTimers) + val userTimersFlow: Flow> = getUserTimers() + return defaultTimersFlow.combine(userTimersFlow) { defaultTimersList, userTimersList -> + defaultTimersList + userTimersList + } + } + + override fun saveTimer(newTimer: TimerInfo) { + currentUserTimersCollection().add(newTimer.asJson()) + } + + override fun updateTimer(timerInfo: TimerInfo) { + currentUserTimersCollection().document(timerInfo.id).set(timerInfo.asJson()) + } + + override fun deleteTimer(timerInfo: TimerInfo) { + currentUserTimersCollection().document(timerInfo.id).delete() + } + + private fun currentUserTimersCollection(): CollectionReference = + firestore.collection(USER_COLLECTION) + .document(auth.currentUserId) + .collection(TIMER_COLLECTION) + + + companion object { + private const val TIMER_COLLECTION = "timers" + private const val USER_COLLECTION = "users" + } + } \ No newline at end of file