feat(backup): wire opportunistic backup trigger into HomeViewModel.loadHome

This commit is contained in:
null 2026-06-30 20:43:14 -05:00
parent fd854b635c
commit 72c251ae95
1 changed files with 8 additions and 1 deletions

View File

@ -198,7 +198,8 @@ class HomeViewModel @Inject constructor(
private val dailyQuestionResolver: app.closer.domain.usecase.DailyQuestionResolver, private val dailyQuestionResolver: app.closer.domain.usecase.DailyQuestionResolver,
private val dateMemoryDataSource: app.closer.data.remote.FirestoreDateMemoryDataSource, private val dateMemoryDataSource: app.closer.data.remote.FirestoreDateMemoryDataSource,
private val dateReflectionDataSource: app.closer.data.remote.FirestoreDateReflectionDataSource, private val dateReflectionDataSource: app.closer.data.remote.FirestoreDateReflectionDataSource,
private val answerDataSource: FirestoreAnswerDataSource private val answerDataSource: FirestoreAnswerDataSource,
private val backupManager: app.closer.data.backup.BackupManager
) : ViewModel() { ) : ViewModel() {
private val _uiState = MutableStateFlow(HomeUiState()) private val _uiState = MutableStateFlow(HomeUiState())
@ -273,6 +274,12 @@ class HomeViewModel @Inject constructor(
// stops showing a stale "your turn" and never offers a re-answer that the immutable // stops showing a stale "your turn" and never offers a re-answer that the immutable
// secure/payload rule would reject (R23). Room-first → a no-op once Room is correct; // secure/payload rule would reject (R23). Room-first → a no-op once Room is correct;
// the answers observer then recomputes the card. // the answers observer then recomputes the card.
// Opportunistic E2EE conversation backup (throttled + single-flighted inside the manager;
// no-op without a couple key). Keeps the device-durable backup fresh for restore.
if (couple != null) {
launch { runCatching { backupManager.backupNow() } }
}
val dailyAnswerCoupleId = couple?.id val dailyAnswerCoupleId = couple?.id
if (uid != null && dailyAnswerCoupleId != null && dailyQuestion != null) { if (uid != null && dailyAnswerCoupleId != null && dailyQuestion != null) {
launch { launch {