Coverage Summary for Class: FirebaseUserWorkspacesProvider (com.georgeci.moneysurfer.data.sync)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| FirebaseUserWorkspacesProvider |
0%
(0/4)
|
0%
(0/12)
|
0%
(0/9)
|
0%
(0/90)
|
| FirebaseUserWorkspacesProvider$invitedWorkspaceIds$1 |
|
| FirebaseUserWorkspacesProvider$userDoc$1 |
|
| FirebaseUserWorkspacesProvider$workspaceIds$1 |
|
| Total |
0%
(0/4)
|
0%
(0/12)
|
0%
(0/9)
|
0%
(0/90)
|
package com.georgeci.moneysurfer.data.sync
import com.georgeci.moneysurfer.data.remote.UserDoc
import com.georgeci.moneysurfer.domain.auth.SessionPointers
import dev.gitlive.firebase.firestore.FirebaseFirestore
import kotlinx.coroutines.flow.first
import org.koin.core.annotation.Single
/**
* Fetches `users/{uid}.workspaceIds` from Firestore so [PullRemoteChangesUseCaseImpl] can
* discover workspaces not yet present in the local database (e.g. added by an admin or
* accepted via invite on another device).
*/
@Single(binds = [UserWorkspacesProvider::class])
class FirebaseUserWorkspacesProvider(
private val firestore: FirebaseFirestore,
private val session: SessionPointers,
) : UserWorkspacesProvider {
private suspend fun userDoc(): UserDoc? {
val uid = session.currentFirebaseUid.first() ?: return null
val snap = firestore.collection("users").document(uid).get()
if (!snap.exists) return null
return snap.data(UserDoc.serializer())
}
override suspend fun workspaceIds(): List<String> =
userDoc()?.workspaceIds ?: emptyList()
override suspend fun invitedWorkspaceIds(): List<String> =
userDoc()?.invitedWorkspaceIds ?: emptyList()
}