cook4me/android

View on GitHub
app/src/main/java/ch/epfl/sdp/cook4me/persistence/repository/ChallengeRepository.kt

Summary

Maintainability
A
30 mins
Test Coverage
B
81%
package ch.epfl.sdp.cook4me.persistence.repository

import ch.epfl.sdp.cook4me.ui.challenge.Challenge
import com.google.firebase.firestore.DocumentSnapshot
import com.google.firebase.firestore.FirebaseFirestore
import kotlinx.coroutines.tasks.await

private const val COLLECTION_PATH = "challenges"

class ChallengeRepository(private val store: FirebaseFirestore = FirebaseFirestore.getInstance()) {
    suspend fun add(challenge: Challenge) =
        store.collection(COLLECTION_PATH).add(challenge.toMap()).await().id

    suspend fun getById(id: String) =
        store.getObjectByIdFromCollection(id, COLLECTION_PATH) {
            Challenge(
                it.data ?: emptyMap()
            )
        }

    suspend fun update(id: String, challenge: Challenge) =
        store.updateObjectInCollection(id, challenge, COLLECTION_PATH)

    suspend fun getAll() = store.getAllObjectsFromCollection(COLLECTION_PATH, ::transformToChallenge)

    suspend fun deleteAll() = store.deleteAllDocumentsFromCollection(COLLECTION_PATH)

    private fun transformToChallenge(snapshot: DocumentSnapshot) = Challenge(snapshot.data ?: emptyMap())
}