From a7633bfc939d168a06945fb5b4d81df07ec0159a Mon Sep 17 00:00:00 2001 From: tgyuuAn Date: Sat, 1 Feb 2025 20:25:41 +0900 Subject: [PATCH] =?UTF-8?q?[PC-476]=20Splash=EC=97=90=EC=84=9C=20ValueTalk?= =?UTF-8?q?,=20ValuePick=EC=9D=84=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 - .../data/repository/MatchingRepositoryImpl.kt | 4 +- .../repository/MatchingRepositoryImplTest.kt | 8 +-- .../domain/repository/MatchingRepository.kt | 4 +- .../graph/detail/page/ValuePickPage.kt | 68 +++++++++---------- .../com/puzzle/presentation/MainViewModel.kt | 29 +++++--- 6 files changed, 63 insertions(+), 51 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dd7210cf..f4c0269c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,7 +3,6 @@ xmlns:tools="http://schemas.android.com/tools"> - diff --git a/core/data/src/main/java/com/puzzle/data/repository/MatchingRepositoryImpl.kt b/core/data/src/main/java/com/puzzle/data/repository/MatchingRepositoryImpl.kt index f06d1039..23e456d1 100644 --- a/core/data/src/main/java/com/puzzle/data/repository/MatchingRepositoryImpl.kt +++ b/core/data/src/main/java/com/puzzle/data/repository/MatchingRepositoryImpl.kt @@ -17,7 +17,7 @@ class MatchingRepositoryImpl @Inject constructor( private val matchingDataSource: MatchingDataSource, private val localMatchingDataSource: LocalMatchingDataSource, ) : MatchingRepository { - override suspend fun loadValuePick(): Result = suspendRunCatching { + override suspend fun loadValuePicks(): Result = suspendRunCatching { val valuePicks = matchingDataSource.loadValuePicks() .getOrThrow() .toDomain() @@ -43,7 +43,7 @@ class MatchingRepositoryImpl @Inject constructor( localMatchingDataSource.replaceValuePicks(valuePickEntities) } - override suspend fun loadValueTalk(): Result = suspendRunCatching { + override suspend fun loadValueTalks(): Result = suspendRunCatching { val valueTalks = matchingDataSource.loadValueTalks() .getOrThrow() .toDomain() diff --git a/core/data/src/test/java/com/puzzle/data/repository/MatchingRepositoryImplTest.kt b/core/data/src/test/java/com/puzzle/data/repository/MatchingRepositoryImplTest.kt index b2b8b420..ade426e3 100644 --- a/core/data/src/test/java/com/puzzle/data/repository/MatchingRepositoryImplTest.kt +++ b/core/data/src/test/java/com/puzzle/data/repository/MatchingRepositoryImplTest.kt @@ -52,7 +52,7 @@ class MatchingRepositoryImplTest { coEvery { localMatchingDataSource.replaceValuePicks(any()) } returns Result.success(Unit) // when - val result = matchingRepository.loadValuePick() + val result = matchingRepository.loadValuePicks() // then assertTrue(result.isSuccess) @@ -86,7 +86,7 @@ class MatchingRepositoryImplTest { coEvery { localMatchingDataSource.replaceValueTalks(any()) } returns Result.success(Unit) // when - val result = matchingRepository.loadValueTalk() + val result = matchingRepository.loadValueTalks() // then assertTrue(result.isSuccess) @@ -129,7 +129,7 @@ class MatchingRepositoryImplTest { coEvery { localMatchingDataSource.replaceValuePicks(any()) } returns Result.success(Unit) // when - val result = matchingRepository.loadValuePick() + val result = matchingRepository.loadValuePicks() // then assertTrue(result.isSuccess) @@ -171,7 +171,7 @@ class MatchingRepositoryImplTest { coEvery { localMatchingDataSource.replaceValueTalks(any()) } returns Result.success(Unit) // when - val result = matchingRepository.loadValueTalk() + val result = matchingRepository.loadValueTalks() // then assertTrue(result.isSuccess) diff --git a/core/domain/src/main/java/com/puzzle/domain/repository/MatchingRepository.kt b/core/domain/src/main/java/com/puzzle/domain/repository/MatchingRepository.kt index 5928db3a..8583d26c 100644 --- a/core/domain/src/main/java/com/puzzle/domain/repository/MatchingRepository.kt +++ b/core/domain/src/main/java/com/puzzle/domain/repository/MatchingRepository.kt @@ -4,8 +4,8 @@ import com.puzzle.domain.model.matching.ValuePick import com.puzzle.domain.model.matching.ValueTalk interface MatchingRepository { - suspend fun loadValuePick(): Result - suspend fun loadValueTalk(): Result + suspend fun loadValuePicks(): Result + suspend fun loadValueTalks(): Result suspend fun retrieveValuePick(): Result> suspend fun retrieveValueTalk(): Result> } diff --git a/feature/matching/src/main/java/com/puzzle/matching/graph/detail/page/ValuePickPage.kt b/feature/matching/src/main/java/com/puzzle/matching/graph/detail/page/ValuePickPage.kt index 15060aa2..f117d3d1 100644 --- a/feature/matching/src/main/java/com/puzzle/matching/graph/detail/page/ValuePickPage.kt +++ b/feature/matching/src/main/java/com/puzzle/matching/graph/detail/page/ValuePickPage.kt @@ -49,6 +49,7 @@ import com.puzzle.common.ui.CollapsingHeaderNestedScrollConnection import com.puzzle.designsystem.R import com.puzzle.designsystem.component.PieceSubButton import com.puzzle.designsystem.foundation.PieceTheme +import com.puzzle.domain.model.matching.Answer import com.puzzle.domain.model.matching.ValuePick import com.puzzle.matching.graph.detail.common.component.BasicInfoHeader @@ -175,16 +176,13 @@ private fun ValuePickCards( .padding(horizontal = 20.dp), ) { itemsIndexed(pickCards) { idx, item -> - Spacer(Modifier.height(20.dp)) - ValuePickCard( valuePick = item, + modifier = Modifier.padding(top = 20.dp) ) } item { - Spacer(Modifier.height(60.dp)) - Text( text = stringResource(R.string.valuepick_refuse), style = PieceTheme.typography.bodyMM.copy( @@ -194,12 +192,11 @@ private fun ValuePickCards( textAlign = TextAlign.Center, modifier = Modifier .fillMaxWidth() + .padding(vertical = 60.dp) .clickable { onDeclineClick() }, ) - - Spacer(Modifier.height(60.dp)) } } } @@ -294,31 +291,26 @@ private fun ValuePickCard( } } - Spacer(modifier = Modifier.height(12.dp)) - Text( text = valuePick.question, style = PieceTheme.typography.headingMSB, color = PieceTheme.colors.dark1, + modifier = Modifier.padding(top = 12.dp, bottom = 24.dp), ) - Spacer(modifier = Modifier.height(24.dp)) - - PieceSubButton( - label = valuePick.option1, - onClick = {}, - enabled = true, - modifier = Modifier.fillMaxWidth(), - ) - - Spacer(modifier = Modifier.height(8.dp)) - - PieceSubButton( - label = valuePick.option2, - onClick = {}, - enabled = false, - modifier = Modifier.fillMaxWidth(), - ) + valuePick.answers.forEachIndexed { idx, answer -> + PieceSubButton( + label = answer.content, + onClick = {}, + enabled = true, + modifier = Modifier + .fillMaxWidth() + .then( + if (idx != 0) Modifier.padding(top = 8.dp) + else Modifier + ), + ) + } } } @@ -333,31 +325,39 @@ private fun ProfileValuePickPagePreview() { ValuePick( category = "음주", question = "사귀는 사람과 함께 술을 마시는 것을 좋아하나요?", - option1 = "함께 술을 즐기고 싶어요", - option2 = "같이 술을 즐길 수 없어도 괜찮아요", + answers = listOf( + Answer(1, "함께 술을 즐기고 싶어요"), + Answer(2, "같이 술을 즐길 수 없어도 괜찮아요") + ), isSimilarToMe = true, ), ValuePick( category = "만남 빈도", question = "주말에 얼마나 자주 데이트를 하고싶나요?", - option1 = "주말에는 최대한 같이 있고 싶어요", - option2 = "하루 정도는 각자 보내고 싶어요", + answers = listOf( + Answer(1, "주말에는 최대한 같이 있고 싶어요"), + Answer(2, "하루 정도는 각자 보내고 싶어요") + ), isSimilarToMe = false, ), ValuePick( category = "연락 빈도", question = "연인 사이에 얼마나 자주 연락하는게 좋은가요?", - option1 = "바빠도 최대한 자주 연락하고 싶어요", - option2 = "연락은 생각날 때만 종종 해도 괜찮아요", + answers = listOf( + Answer(1, "바빠도 최대한 자주 연락하고 싶어요"), + Answer(2, "연락은 생각날 때만 종종 해도 괜찮아요") + ), isSimilarToMe = true, ), ValuePick( category = "연락 방식", question = "연락할 때 어떤 방법을 더 좋아하나요?", - option1 = "전화보다는 문자나 카톡이 좋아요", - option2 = "문자나 카톡보다는 전화가 좋아요", + answers = listOf( + Answer(1, "전화보다는 문자나 카톡이 좋아요"), + Answer(2, "문자나 카톡보다는 전화가 좋아요") + ), isSimilarToMe = false, - ) + ), ), onDeclineClick = {}, ) diff --git a/presentation/src/main/java/com/puzzle/presentation/MainViewModel.kt b/presentation/src/main/java/com/puzzle/presentation/MainViewModel.kt index 5ae766d5..ec1a96de 100644 --- a/presentation/src/main/java/com/puzzle/presentation/MainViewModel.kt +++ b/presentation/src/main/java/com/puzzle/presentation/MainViewModel.kt @@ -9,6 +9,7 @@ import com.puzzle.domain.model.error.HttpResponseException import com.puzzle.domain.model.user.UserRole.PENDING import com.puzzle.domain.model.user.UserRole.REGISTER import com.puzzle.domain.model.user.UserRole.USER +import com.puzzle.domain.repository.MatchingRepository import com.puzzle.domain.repository.TermsRepository import com.puzzle.domain.repository.UserRepository import com.puzzle.navigation.AuthGraphDest @@ -27,6 +28,7 @@ import javax.inject.Inject class MainViewModel @Inject constructor( private val termsRepository: TermsRepository, private val userRepository: UserRepository, + private val matchingRepository: MatchingRepository, internal val navigationHelper: NavigationHelper, internal val eventHelper: EventHelper, private val errorHelper: ErrorHelper, @@ -36,7 +38,7 @@ class MainViewModel @Inject constructor( init { handleError() - loadTerms() + initConfigure() checkRedirection() } @@ -55,18 +57,29 @@ class MainViewModel @Inject constructor( } } - private fun loadTerms() = viewModelScope.launch { - termsRepository.loadTerms().onFailure { - errorHelper.sendError(it) - } - } + private fun initConfigure() = viewModelScope.launch { + val loadTermsJob = launch { loadTerms() } + val loadValuePicksJob = launch { loadValuePicks() } + val loadValueTalksJob = launch { loadValueTalks() } - private fun loadValuePick() = viewModelScope.launch { + loadTermsJob.join() + loadValuePicksJob.join() + loadValueTalksJob.join() + } + private suspend fun loadTerms() { + termsRepository.loadTerms() + .onFailure { errorHelper.sendError(it) } } - private fun loadValueTalk() = viewModelScope.launch { + private suspend fun loadValuePicks() { + matchingRepository.loadValuePicks() + .onFailure { errorHelper.sendError(it) } + } + private suspend fun loadValueTalks() { + matchingRepository.loadValueTalks() + .onFailure { errorHelper.sendError(it) } } private fun checkRedirection() = viewModelScope.launch {