commit
58d0d4fe91
7 changed files with 75 additions and 10 deletions
|
@ -0,0 +1,10 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models
|
||||||
|
|
||||||
|
import com.google.firebase.Timestamp
|
||||||
|
import com.google.firebase.firestore.DocumentId
|
||||||
|
|
||||||
|
data class SessionReport(
|
||||||
|
@DocumentId val id: String = "",
|
||||||
|
val studyTime: Int = 0,
|
||||||
|
val endTime: Timestamp = Timestamp(0, 0)
|
||||||
|
)
|
|
@ -19,4 +19,6 @@ abstract class DatabaseModule {
|
||||||
@Binds abstract fun provideLogService(impl: LogServiceImpl): LogService
|
@Binds abstract fun provideLogService(impl: LogServiceImpl): LogService
|
||||||
|
|
||||||
@Binds abstract fun provideConfigurationService(impl: FirebaseConfigurationService): ConfigurationService
|
@Binds abstract fun provideConfigurationService(impl: FirebaseConfigurationService): ConfigurationService
|
||||||
|
|
||||||
|
@Binds abstract fun provideSessionDAO(impl: FireBaseSessionDAO): SessionDAO
|
||||||
}
|
}
|
15
app/src/main/java/be/ugent/sel/studeez/domain/SessionDAO.kt
Normal file
15
app/src/main/java/be/ugent/sel/studeez/domain/SessionDAO.kt
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
package be.ugent.sel.studeez.domain
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.local.models.SessionReport
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
|
interface SessionDAO {
|
||||||
|
|
||||||
|
fun getSessions(): Flow<List<SessionReport>>
|
||||||
|
|
||||||
|
fun saveSession(newSessionReport: SessionReport)
|
||||||
|
|
||||||
|
fun deleteSession(newTimer: TimerInfo)
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package be.ugent.sel.studeez.domain.implementation
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.local.models.SessionReport
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
||||||
|
import be.ugent.sel.studeez.domain.AccountDAO
|
||||||
|
import be.ugent.sel.studeez.domain.SessionDAO
|
||||||
|
import com.google.firebase.firestore.CollectionReference
|
||||||
|
import com.google.firebase.firestore.FirebaseFirestore
|
||||||
|
import com.google.firebase.firestore.ktx.snapshots
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.map
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class FireBaseSessionDAO @Inject constructor(
|
||||||
|
private val firestore: FirebaseFirestore,
|
||||||
|
private val auth: AccountDAO
|
||||||
|
) : SessionDAO {
|
||||||
|
|
||||||
|
override fun getSessions(): Flow<List<SessionReport>> {
|
||||||
|
return currentUserSessionsCollection()
|
||||||
|
.snapshots()
|
||||||
|
.map { it.toObjects(SessionReport::class.java) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun saveSession(newSessionReport: SessionReport) {
|
||||||
|
currentUserSessionsCollection().add(newSessionReport)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun deleteSession(newTimer: TimerInfo) {
|
||||||
|
currentUserSessionsCollection().document(newTimer.id).delete()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun currentUserSessionsCollection(): CollectionReference =
|
||||||
|
firestore.collection(FirebaseCollectionRoutes.USER_COLLECTION)
|
||||||
|
.document(auth.currentUserId)
|
||||||
|
.collection(FirebaseCollectionRoutes.SESSION_COLLECTION)
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package be.ugent.sel.studeez.domain.implementation
|
||||||
|
|
||||||
|
object FirebaseCollectionRoutes {
|
||||||
|
const val SESSION_COLLECTION = "sessions"
|
||||||
|
const val USER_COLLECTION = "users"
|
||||||
|
const val TIMER_COLLECTION = "timers"
|
||||||
|
|
||||||
|
}
|
|
@ -50,14 +50,8 @@ class FirebaseTimerDAO @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun currentUserTimersCollection(): CollectionReference =
|
private fun currentUserTimersCollection(): CollectionReference =
|
||||||
firestore.collection(USER_COLLECTION)
|
firestore.collection(FirebaseCollectionRoutes.USER_COLLECTION)
|
||||||
.document(auth.currentUserId)
|
.document(auth.currentUserId)
|
||||||
.collection(TIMER_COLLECTION)
|
.collection(FirebaseCollectionRoutes.TIMER_COLLECTION)
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
private const val TIMER_COLLECTION = "timers"
|
|
||||||
private const val USER_COLLECTION = "users"
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -3,8 +3,6 @@ package be.ugent.sel.studeez.screens.home
|
||||||
import be.ugent.sel.studeez.domain.AccountDAO
|
import be.ugent.sel.studeez.domain.AccountDAO
|
||||||
import be.ugent.sel.studeez.domain.LogService
|
import be.ugent.sel.studeez.domain.LogService
|
||||||
import be.ugent.sel.studeez.navigation.StudeezDestinations
|
import be.ugent.sel.studeez.navigation.StudeezDestinations
|
||||||
import be.ugent.sel.studeez.navigation.StudeezDestinations.HOME_SCREEN
|
|
||||||
import be.ugent.sel.studeez.navigation.StudeezDestinations.LOGIN_SCREEN
|
|
||||||
import be.ugent.sel.studeez.screens.StudeezViewModel
|
import be.ugent.sel.studeez.screens.StudeezViewModel
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
Reference in a new issue