From 11b286e2f2f3d8695abb71e0550b1c09751844a7 Mon Sep 17 00:00:00 2001 From: dodo Date: Fri, 17 Jul 2026 20:10:20 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[fix/#224]=20=ED=99=88=20=EC=B9=B4=EB=93=9C?= =?UTF-8?q?=20=EB=AC=B8=EA=B5=AC=20=EB=A7=A4=ED=95=91=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../consumerhome/ConsumerHomeViewModel.kt | 17 +++++++------- .../instructorhome/InstructorHomeViewModel.kt | 23 ++++++++++--------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/presentation/consumer-home/src/main/java/com/ssing/presentation/consumerhome/ConsumerHomeViewModel.kt b/presentation/consumer-home/src/main/java/com/ssing/presentation/consumerhome/ConsumerHomeViewModel.kt index f2df9580..528f16f9 100644 --- a/presentation/consumer-home/src/main/java/com/ssing/presentation/consumerhome/ConsumerHomeViewModel.kt +++ b/presentation/consumer-home/src/main/java/com/ssing/presentation/consumerhome/ConsumerHomeViewModel.kt @@ -77,16 +77,18 @@ internal class ConsumerHomeViewModel @Inject constructor( }.toImmutableList() } - private fun ConsumerLessonCard.toReservation(): Reservation = - Reservation( + private fun ConsumerLessonCard.toReservation(): Reservation { + val status = toCardStatus() + return Reservation( lessonId = lessonId, - chip = toChipText(), + chip = toChipText(status), displayText = title, location = resort.displayName, date = runCatching { OffsetDateTime.parse(scheduledAt).toLocalDateTime() }.getOrNull(), imageRes = toImageRes(), - status = toCardStatus(), + status = status, ) + } private fun ConsumerLessonCard.toImageRes(): Int = when (sport) { "SKI" -> R.drawable.img_ski_86 @@ -94,11 +96,8 @@ internal class ConsumerHomeViewModel @Inject constructor( else -> R.drawable.img_ski_86 } - private fun ConsumerLessonCard.toChipText(): String = when { - displayStatus == IN_PROGRESS -> "진행중" - remainingDays == 0 -> "Now" - else -> "D-$remainingDays" - } + private fun ConsumerLessonCard.toChipText(status: Status): String = + if (status == Status.Default) "D-$remainingDays" else "Now" private fun ConsumerLessonCard.toCardStatus(): Status = when { displayStatus == IN_PROGRESS -> Status.Matching diff --git a/presentation/instructor-home/src/main/java/com/ssing/presentation/instructorhome/InstructorHomeViewModel.kt b/presentation/instructor-home/src/main/java/com/ssing/presentation/instructorhome/InstructorHomeViewModel.kt index eef5137f..e56250fb 100644 --- a/presentation/instructor-home/src/main/java/com/ssing/presentation/instructorhome/InstructorHomeViewModel.kt +++ b/presentation/instructor-home/src/main/java/com/ssing/presentation/instructorhome/InstructorHomeViewModel.kt @@ -80,17 +80,19 @@ internal class InstructorHomeViewModel @Inject constructor( }.toImmutableList() } - private fun InstructorLessonCard.toReservation(): Reservation = - Reservation( + private fun InstructorLessonCard.toReservation(): Reservation { + val status = toReservationStatus() + return Reservation( lessonId = lessonId, offerId = offerId, - chip = toChipText(), + chip = toChipText(status), displayText = title, location = resort.displayName, date = runCatching { OffsetDateTime.parse(scheduledAt).toLocalDateTime() }.getOrNull(), imageRes = toImageRes(), - status = toReservationStatus(), + status = status, ) + } private fun InstructorLessonCard.toImageRes(): Int = when (sport) { "SKI" -> R.drawable.img_ski_86 @@ -98,11 +100,8 @@ internal class InstructorHomeViewModel @Inject constructor( else -> R.drawable.img_ski_86 } - private fun InstructorLessonCard.toChipText(): String = when { - displayStatus == IN_PROGRESS -> "진행중" - remainingDays == 0 -> "Now" - else -> "D-$remainingDays" - } + private fun InstructorLessonCard.toChipText(status: Status): String = + if (status == Status.Default) "D-$remainingDays" else "Now" private fun InstructorLessonCard.toReservationStatus(): Status = when (displayStatus) { @@ -111,8 +110,10 @@ internal class InstructorHomeViewModel @Inject constructor( WAITING_FOR_INSTRUCTOR, WAITING_FOR_CONFIRMATION, PAYMENT_PENDING -> Status.Matched - CONFIRMED, - IN_PROGRESS -> Status.Default + + IN_PROGRESS -> Status.Matching + + CONFIRMED -> Status.Default else -> Status.Default } From 221d4b741cbfdc99137afa77c8ae968ce2bf3610 Mon Sep 17 00:00:00 2001 From: dodo Date: Fri, 17 Jul 2026 20:18:32 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[fix/#224]=20=EA=B2=B0=EC=A0=9C=20=EC=9E=A5?= =?UTF-8?q?=EB=B9=84=20=EC=83=81=ED=83=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EA=B3=A0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ssing/presentation/consumerpayment/PaymentViewModel.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentViewModel.kt b/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentViewModel.kt index 45fbbba9..80c88321 100644 --- a/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentViewModel.kt +++ b/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentViewModel.kt @@ -51,6 +51,7 @@ internal class PaymentViewModel @Inject constructor( lessonCost = priceSummary?.lessonPriceAmount ?: lessonCost, resortCost = priceSummary?.resortPassFeeAmount ?: resortCost, totalPaymentAmount = priceSummary?.totalPaymentAmount ?: totalPaymentAmount, + equipmentStatus = "착용 완료", ) } } From 4209fc1a3561806688ca5d0de57a05d97b05b551 Mon Sep 17 00:00:00 2001 From: dodo Date: Fri, 17 Jul 2026 20:28:40 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[fix/#224]=20=EA=B0=95=EC=8A=B5=20=ED=9B=84?= =?UTF-8?q?=EA=B8=B0=20=EB=82=A0=EC=A7=9C=20=EC=9C=84=20=EC=97=AC=EB=B0=B1?= =?UTF-8?q?=2011dp=20=EB=B3=B4=EC=9E=A5=20=EC=95=88=20=EB=90=98=EB=8A=94?= =?UTF-8?q?=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/InstructorProfileContent.kt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/presentation/consumer-matching/src/main/java/com/ssing/presentation/consumermatching/component/InstructorProfileContent.kt b/presentation/consumer-matching/src/main/java/com/ssing/presentation/consumermatching/component/InstructorProfileContent.kt index 50ec62d2..912c872e 100644 --- a/presentation/consumer-matching/src/main/java/com/ssing/presentation/consumermatching/component/InstructorProfileContent.kt +++ b/presentation/consumer-matching/src/main/java/com/ssing/presentation/consumermatching/component/InstructorProfileContent.kt @@ -585,11 +585,9 @@ private fun ReviewCard( overflow = TextOverflow.Ellipsis, ) - Spacer( - Modifier - .weight(1f) - .heightIn(min = 11.dp), - ) + Spacer(Modifier.height(11.dp)) + + Spacer(Modifier.weight(1f)) Text( text = review.date, From 6ff899ec6c1b1bb551f331eaf1dc528ed1d5e623 Mon Sep 17 00:00:00 2001 From: dodo Date: Fri, 17 Jul 2026 21:29:03 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[fix/#229]=20=EC=86=8C=EB=B9=84=EC=9E=90=20?= =?UTF-8?q?=EB=A7=A4=EC=B9=AD=20=EB=B3=B5=EA=B5=AC=20API=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EB=8C=80?= =?UTF-8?q?=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../consumermatching/model/ConsumerMatchingActive.kt | 8 ++++++++ .../dto/response/ConsumerMatchingActiveResponse.kt | 9 +++++++++ .../repository/impl/ConsumerMatchingRepositoryImpl.kt | 9 +++++++++ 3 files changed, 26 insertions(+) diff --git a/data/src/main/java/com/ssing/data/matching/consumermatching/model/ConsumerMatchingActive.kt b/data/src/main/java/com/ssing/data/matching/consumermatching/model/ConsumerMatchingActive.kt index 2f8fea7a..91e941d1 100644 --- a/data/src/main/java/com/ssing/data/matching/consumermatching/model/ConsumerMatchingActive.kt +++ b/data/src/main/java/com/ssing/data/matching/consumermatching/model/ConsumerMatchingActive.kt @@ -25,7 +25,15 @@ data class ConsumerMatchingRequestSummary( val resort: ConsumerMatchingResort, val sport: String, val lessonLevel: String, + val requesterName: String, val headcount: Int, + val participants: List, +) + +data class ConsumerMatchingSummaryParticipant( + val name: String?, + val age: Int, + val gender: String, ) data class ConsumerMatchingResort( diff --git a/data/src/main/java/com/ssing/data/matching/consumermatching/remote/dto/response/ConsumerMatchingActiveResponse.kt b/data/src/main/java/com/ssing/data/matching/consumermatching/remote/dto/response/ConsumerMatchingActiveResponse.kt index fc25f713..b6ba3d69 100644 --- a/data/src/main/java/com/ssing/data/matching/consumermatching/remote/dto/response/ConsumerMatchingActiveResponse.kt +++ b/data/src/main/java/com/ssing/data/matching/consumermatching/remote/dto/response/ConsumerMatchingActiveResponse.kt @@ -26,7 +26,16 @@ internal data class ConsumerMatchingActiveResponse( @SerialName("resort") val resort: Resort, @SerialName("sport") val sport: String, @SerialName("lessonLevel") val lessonLevel: String, + @SerialName("requesterName") val requesterName: String, @SerialName("headcount") val headcount: Int, + @SerialName("participants") val participants: List = emptyList(), + ) + + @Serializable + internal data class Participant( + @SerialName("name") val name: String? = null, + @SerialName("age") val age: Int, + @SerialName("gender") val gender: String, ) @Serializable diff --git a/data/src/main/java/com/ssing/data/matching/consumermatching/repository/impl/ConsumerMatchingRepositoryImpl.kt b/data/src/main/java/com/ssing/data/matching/consumermatching/repository/impl/ConsumerMatchingRepositoryImpl.kt index 29980b06..4269c6b3 100644 --- a/data/src/main/java/com/ssing/data/matching/consumermatching/repository/impl/ConsumerMatchingRepositoryImpl.kt +++ b/data/src/main/java/com/ssing/data/matching/consumermatching/repository/impl/ConsumerMatchingRepositoryImpl.kt @@ -14,6 +14,7 @@ import com.ssing.data.matching.consumermatching.model.ConsumerMatchingProgressSu import com.ssing.data.matching.consumermatching.model.ConsumerMatchingRequestResult import com.ssing.data.matching.consumermatching.model.ConsumerMatchingRequestSummary import com.ssing.data.matching.consumermatching.model.ConsumerMatchingResort +import com.ssing.data.matching.consumermatching.model.ConsumerMatchingSummaryParticipant import com.ssing.data.matching.consumermatching.remote.datasource.api.ConsumerMatchingRemoteDataSource import com.ssing.data.matching.consumermatching.remote.dto.request.ConsumerMatchingConditionRequest import com.ssing.data.matching.consumermatching.remote.dto.request.ConsumerMatchingConfirmationRequest @@ -130,7 +131,15 @@ internal class ConsumerMatchingRepositoryImpl @Inject constructor( ), sport = requestSummary.sport, lessonLevel = requestSummary.lessonLevel, + requesterName = requestSummary.requesterName, headcount = requestSummary.headcount, + participants = requestSummary.participants.map { + ConsumerMatchingSummaryParticipant( + name = it.name, + age = it.age, + gender = it.gender, + ) + }, ), lessonSummary = lessonSummary?.let { ConsumerMatchingLessonSummary( From 99b9110be1a928deeb19fba0051da96daf30fe29 Mon Sep 17 00:00:00 2001 From: dodo Date: Fri, 17 Jul 2026 21:33:54 +0900 Subject: [PATCH 5/8] =?UTF-8?q?[fix/#229]=20=EC=86=8C=EB=B9=84=EC=9E=90=20?= =?UTF-8?q?=EA=B2=B0=EC=A0=9C=20=ED=99=94=EB=A9=B4=EC=97=90=20=EA=B0=95?= =?UTF-8?q?=EC=8A=B5=EC=9E=90=EB=AA=85,=20=ED=8C=80=EC=9B=90=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../consumerpayment/PaymentViewModel.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentViewModel.kt b/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentViewModel.kt index 80c88321..5aa09bc3 100644 --- a/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentViewModel.kt +++ b/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentViewModel.kt @@ -3,13 +3,17 @@ package com.ssing.presentation.consumerpayment import androidx.lifecycle.viewModelScope import com.ssing.core.network.exception.ApiException import com.ssing.core.ui.base.BaseViewModel +import com.ssing.core.ui.common.component.Gender +import com.ssing.core.ui.common.component.Participant import com.ssing.core.ui.extension.uiMessage import com.ssing.data.matching.consumermatching.model.ConsumerMatchingActive +import com.ssing.data.matching.consumermatching.model.ConsumerMatchingSummaryParticipant import com.ssing.data.matching.consumermatching.repository.api.ConsumerMatchingRepository import com.ssing.data.payment.model.PaymentSummary import com.ssing.data.payment.repository.api.PaymentRepository import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.launch import timber.log.Timber import javax.inject.Inject @@ -42,12 +46,15 @@ internal class PaymentViewModel @Inject constructor( updateState { copy( + nickname = requestSummary.requesterName, tags = persistentListOf( requestSummary.sport.toSport(), requestSummary.lessonLevel.toLessonLevel() ), location = requestSummary.resort.displayName, duration = lessonSummary?.durationMinutes?.toDurationText() ?: duration, + participants = requestSummary.participants.map { it.toParticipant() } + .toPersistentList(), lessonCost = priceSummary?.lessonPriceAmount ?: lessonCost, resortCost = priceSummary?.resortPassFeeAmount ?: resortCost, totalPaymentAmount = priceSummary?.totalPaymentAmount ?: totalPaymentAmount, @@ -81,6 +88,15 @@ internal class PaymentViewModel @Inject constructor( else -> "${this / 60}시간 ${this % 60}분" } + private fun ConsumerMatchingSummaryParticipant.toParticipant(): Participant = + Participant(age = age, gender = gender.toGender()) + + private fun String.toGender(): Gender = when (this) { + "MALE" -> Gender.MALE + "FEMALE" -> Gender.FEMALE + else -> Gender.MALE + } + fun onPaymentClick() { if (uiState.value.isLoading) return val matchingRequestId = matchingRequestId ?: run { From 27b07f2b7f5adcb6552fa07508ddb44ddc5c5df4 Mon Sep 17 00:00:00 2001 From: dodo Date: Fri, 17 Jul 2026 21:36:18 +0900 Subject: [PATCH 6/8] =?UTF-8?q?[fix/#229]=20=EC=86=8C=EB=B9=84=EC=9E=90=20?= =?UTF-8?q?=EA=B2=B0=EC=A0=9C=20=EA=B0=95=EC=8A=B5=20=EC=9D=BC=EC=8B=9C=20?= =?UTF-8?q?=EB=AC=B8=EA=B5=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ssing/presentation/consumerpayment/PaymentContract.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentContract.kt b/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentContract.kt index 9e220254..6303f437 100644 --- a/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentContract.kt +++ b/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentContract.kt @@ -13,7 +13,7 @@ internal interface PaymentContract { val showCancelModal: Boolean = false, val nickname: String = "", val tags: ImmutableList = persistentListOf(), - val classDateTime: String = "강사와 만난 뒤 강습 시작", + val classDateTime: String = "강사와 만난 뒤 강습이 시작돼요", val location: String = "", val duration: String = "", val participant: String = "", From c63e9a1d989defc85aed6a45a91319092ef81852 Mon Sep 17 00:00:00 2001 From: dodo Date: Fri, 17 Jul 2026 21:46:52 +0900 Subject: [PATCH 7/8] =?UTF-8?q?[fix/#229]=20=EC=86=8C=EB=B9=84=EC=9E=90=20?= =?UTF-8?q?=EA=B2=B0=EC=A0=9C=20=ED=8C=80=20=EC=88=98=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ssing/presentation/consumerpayment/PaymentScreen.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentScreen.kt b/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentScreen.kt index 5a5f75ae..525ee6a7 100644 --- a/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentScreen.kt +++ b/presentation/consumer-payment/src/main/java/com/ssing/presentation/consumerpayment/PaymentScreen.kt @@ -156,6 +156,7 @@ private fun PayInfoSection( ) { SsingMatchingDetailCard( nickname = state.nickname, + teamCount = state.participants.size, stepLabel = "결제 정보", stepLabelColor = SSINGTheme.colors.textAlternative, tags = state.tags, From 02bac09db3a4bd64b15a3849880586a11810e97f Mon Sep 17 00:00:00 2001 From: dodo Date: Fri, 17 Jul 2026 21:58:38 +0900 Subject: [PATCH 8/8] =?UTF-8?q?[fix/#229]=20=ED=99=88=20=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20now=20=EB=AF=B8=EB=85=B8=EC=B6=9C=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/consumerhome/ConsumerHomeViewModel.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/presentation/consumer-home/src/main/java/com/ssing/presentation/consumerhome/ConsumerHomeViewModel.kt b/presentation/consumer-home/src/main/java/com/ssing/presentation/consumerhome/ConsumerHomeViewModel.kt index 001c2e8f..528f16f9 100644 --- a/presentation/consumer-home/src/main/java/com/ssing/presentation/consumerhome/ConsumerHomeViewModel.kt +++ b/presentation/consumer-home/src/main/java/com/ssing/presentation/consumerhome/ConsumerHomeViewModel.kt @@ -99,7 +99,11 @@ internal class ConsumerHomeViewModel @Inject constructor( private fun ConsumerLessonCard.toChipText(status: Status): String = if (status == Status.Default) "D-$remainingDays" else "Now" - private fun ConsumerLessonCard.toCardStatus(): Status = Status.Default + private fun ConsumerLessonCard.toCardStatus(): Status = when { + displayStatus == IN_PROGRESS -> Status.Matching + remainingDays == 0 -> Status.Matched + else -> Status.Default + } private companion object { const val IN_PROGRESS = "IN_PROGRESS"