fix: simplify hasPremium with first(), leave couple before deleting account

This commit is contained in:
null 2026-06-18 02:56:34 -05:00
parent dfd9974683
commit 2521e91db4
2 changed files with 7 additions and 14 deletions

View File

@ -10,15 +10,13 @@ import com.revenuecat.purchases.EntitlementInfo
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import javax.inject.Inject
import javax.inject.Singleton
@ -64,17 +62,7 @@ class FirestoreEntitlementChecker @Inject constructor(
}
.distinctUntilChanged()
override suspend fun hasPremium(): Boolean = isPremium()
.map { it }
.let { flow ->
// Safe one-shot collector; this is called from non-flow callers.
var value = false
val job = CoroutineScope(Dispatchers.IO).launch {
flow.collect { value = it }
}
job.cancel()
value
}
override suspend fun hasPremium(): Boolean = isPremium().first()
override fun onCustomerInfoUpdated(customerInfo: CustomerInfo) {
revenueCatFallback = customerInfo.entitlements.active

View File

@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import app.closer.core.navigation.AppRoute
import app.closer.domain.repository.AuthRepository
import app.closer.domain.repository.CoupleRepository
import app.closer.domain.repository.UserRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@ -68,6 +69,7 @@ data class DeleteAccountUiState(
@HiltViewModel
class DeleteAccountViewModel @Inject constructor(
private val authRepository: AuthRepository,
private val coupleRepository: CoupleRepository,
private val userRepository: UserRepository
) : ViewModel() {
@ -84,6 +86,9 @@ class DeleteAccountViewModel @Inject constructor(
viewModelScope.launch {
_uiState.update { it.copy(showConfirm = false, isDeleting = true, error = null) }
if (uid != null) {
// Leave couple first so the partner is notified and the couple doc
// is cleaned up before the auth account disappears.
runCatching { coupleRepository.leaveCouple(uid) }
runCatching { userRepository.deleteUserData(uid) }
}
authRepository.deleteAccount()