Merge pull request #82 from SELab1/session_report

Session report
This commit is contained in:
lbarraga 2023-04-18 16:08:45 +02:00 committed by GitHub Enterprise
commit 58d0d4fe91
7 changed files with 75 additions and 10 deletions

View file

@ -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)
)

View file

@ -19,4 +19,6 @@ abstract class DatabaseModule {
@Binds abstract fun provideLogService(impl: LogServiceImpl): LogService
@Binds abstract fun provideConfigurationService(impl: FirebaseConfigurationService): ConfigurationService
@Binds abstract fun provideSessionDAO(impl: FireBaseSessionDAO): SessionDAO
}

View 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)
}

View file

@ -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)
}

View file

@ -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"
}

View file

@ -50,14 +50,8 @@ class FirebaseTimerDAO @Inject constructor(
}
private fun currentUserTimersCollection(): CollectionReference =
firestore.collection(USER_COLLECTION)
firestore.collection(FirebaseCollectionRoutes.USER_COLLECTION)
.document(auth.currentUserId)
.collection(TIMER_COLLECTION)
companion object {
private const val TIMER_COLLECTION = "timers"
private const val USER_COLLECTION = "users"
}
.collection(FirebaseCollectionRoutes.TIMER_COLLECTION)
}

View file

@ -3,8 +3,6 @@ package be.ugent.sel.studeez.screens.home
import be.ugent.sel.studeez.domain.AccountDAO
import be.ugent.sel.studeez.domain.LogService
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 dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject