diff --git a/app/src/main/java/app/closer/ui/answers/AnswerRevealScreen.kt b/app/src/main/java/app/closer/ui/answers/AnswerRevealScreen.kt index b0143b4c..f02ff5af 100644 --- a/app/src/main/java/app/closer/ui/answers/AnswerRevealScreen.kt +++ b/app/src/main/java/app/closer/ui/answers/AnswerRevealScreen.kt @@ -55,7 +55,13 @@ fun AnswerRevealScreen( questionId = questionId, onReveal = viewModel::revealAnswer, onAnswerQuestion = { - onNavigate(AppRoute.questionThread("couple", questionId)) + val coupleId = state.coupleId + if (coupleId != null) { + onNavigate(AppRoute.questionThread(coupleId, questionId)) + } else { + // Discussing requires a paired partner; send unpaired users to invite one. + onNavigate(AppRoute.CREATE_INVITE) + } }, onHistory = { onNavigate(AppRoute.ANSWER_HISTORY) }, onHome = { onNavigate(AppRoute.HOME) } diff --git a/app/src/main/java/app/closer/ui/answers/AnswerRevealViewModel.kt b/app/src/main/java/app/closer/ui/answers/AnswerRevealViewModel.kt index 583c0526..8399b118 100644 --- a/app/src/main/java/app/closer/ui/answers/AnswerRevealViewModel.kt +++ b/app/src/main/java/app/closer/ui/answers/AnswerRevealViewModel.kt @@ -5,6 +5,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import app.closer.domain.model.LocalAnswer import app.closer.domain.model.Question +import app.closer.domain.repository.AuthRepository +import app.closer.domain.repository.CoupleRepository import app.closer.domain.repository.LocalAnswerRepository import app.closer.domain.repository.QuestionRepository import dagger.hilt.android.lifecycle.HiltViewModel @@ -19,13 +21,16 @@ data class AnswerRevealUiState( val isLoading: Boolean = true, val error: String? = null, val question: Question? = null, - val answer: LocalAnswer? = null + val answer: LocalAnswer? = null, + val coupleId: String? = null ) @HiltViewModel class AnswerRevealViewModel @Inject constructor( private val questionRepository: QuestionRepository, private val localAnswerRepository: LocalAnswerRepository, + private val authRepository: AuthRepository, + private val coupleRepository: CoupleRepository, savedStateHandle: SavedStateHandle ) : ViewModel() { @@ -43,10 +48,14 @@ class AnswerRevealViewModel @Inject constructor( viewModelScope.launch { _uiState.value = AnswerRevealUiState(isLoading = true) try { + val coupleId = authRepository.currentUserId?.let { uid -> + runCatching { coupleRepository.getCoupleForUser(uid)?.id }.getOrNull() + } _uiState.value = AnswerRevealUiState( isLoading = false, question = questionRepository.getQuestionById(questionId), - answer = localAnswerRepository.getAnswer(questionId) + answer = localAnswerRepository.getAnswer(questionId), + coupleId = coupleId ) } catch (e: Exception) { _uiState.value = AnswerRevealUiState( diff --git a/app/src/main/java/app/closer/ui/questions/DailyQuestionScreen.kt b/app/src/main/java/app/closer/ui/questions/DailyQuestionScreen.kt index 662f8b18..7e167a14 100644 --- a/app/src/main/java/app/closer/ui/questions/DailyQuestionScreen.kt +++ b/app/src/main/java/app/closer/ui/questions/DailyQuestionScreen.kt @@ -21,7 +21,13 @@ fun DailyQuestionScreen( subtitle = "Answer privately first, then choose whether to reveal it or keep the conversation going.", primaryRouteLabel = "Discuss", onPrimaryRoute = { question -> - onNavigate(AppRoute.questionThread(state.coupleId ?: "couple", question.id)) + val coupleId = state.coupleId + if (coupleId != null) { + onNavigate(AppRoute.questionThread(coupleId, question.id)) + } else { + // Discussing requires a paired partner; send unpaired users to invite one. + onNavigate(AppRoute.CREATE_INVITE) + } }, onSecondaryRoute = state.question?.let { { onNavigate(AppRoute.answerReveal(it.id)) } diff --git a/app/src/main/java/app/closer/ui/questions/QuestionCategoryScreen.kt b/app/src/main/java/app/closer/ui/questions/QuestionCategoryScreen.kt index 852ca972..6deeb937 100644 --- a/app/src/main/java/app/closer/ui/questions/QuestionCategoryScreen.kt +++ b/app/src/main/java/app/closer/ui/questions/QuestionCategoryScreen.kt @@ -55,7 +55,13 @@ fun QuestionCategoryScreen( categoryId = categoryId, state = state, onQuestionSelected = { question -> - onNavigate(AppRoute.questionThread("couple", question.id)) + val coupleId = state.coupleId + if (coupleId != null) { + onNavigate(AppRoute.questionThread(coupleId, question.id)) + } else { + // Discussing requires a paired partner; send unpaired users to invite one. + onNavigate(AppRoute.CREATE_INVITE) + } } ) } diff --git a/app/src/main/java/app/closer/ui/questions/QuestionCategoryViewModel.kt b/app/src/main/java/app/closer/ui/questions/QuestionCategoryViewModel.kt index 73da66bf..7a0426f7 100644 --- a/app/src/main/java/app/closer/ui/questions/QuestionCategoryViewModel.kt +++ b/app/src/main/java/app/closer/ui/questions/QuestionCategoryViewModel.kt @@ -5,6 +5,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import app.closer.domain.model.Question import app.closer.domain.model.QuestionCategory +import app.closer.domain.repository.AuthRepository +import app.closer.domain.repository.CoupleRepository import app.closer.domain.repository.QuestionRepository import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -17,12 +19,15 @@ data class QuestionCategoryUiState( val isLoading: Boolean = true, val error: String? = null, val category: QuestionCategory? = null, - val questions: List = emptyList() + val questions: List = emptyList(), + val coupleId: String? = null ) @HiltViewModel class QuestionCategoryViewModel @Inject constructor( private val repository: QuestionRepository, + private val authRepository: AuthRepository, + private val coupleRepository: CoupleRepository, savedStateHandle: SavedStateHandle ) : ViewModel() { @@ -41,10 +46,14 @@ class QuestionCategoryViewModel @Inject constructor( try { val category = repository.getCategoryById(categoryId) val questions = repository.getQuestionsByCategory(categoryId) + val coupleId = authRepository.currentUserId?.let { uid -> + runCatching { coupleRepository.getCoupleForUser(uid)?.id }.getOrNull() + } _uiState.value = QuestionCategoryUiState( isLoading = false, category = category, - questions = questions + questions = questions, + coupleId = coupleId ) } catch (e: Exception) { _uiState.value = QuestionCategoryUiState(