From e4497b918c9f4bedf0cd80e5c8054561df0de4d8 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Sat, 5 Apr 2025 02:23:36 +0900 Subject: [PATCH 01/24] =?UTF-8?q?#79=20[RENAME]=20CalculateTimeFromString?= =?UTF-8?q?=20=ED=8C=8C=EC=9D=BC=20rename?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{CalculateTime.kt => time/CalculateTimeFromString.kt} | 4 ++-- .../src/main/java/com/sopt/core/util/timetable/TimeTable.kt | 6 +++--- .../appointmentConfirm/AppointmentConfirmRoute.kt | 4 ++-- .../presentation/appointment/screen/RecommendationScreen.kt | 4 ++-- .../groupDetail/confirmedDetail/ConfirmedDetailRoute.kt | 4 ++-- .../sopt/presentation/groupDetail/screen/ConfirmedScreen.kt | 4 ++-- .../sopt/presentation/groupDetail/screen/ProgressScreen.kt | 4 ++-- 7 files changed, 15 insertions(+), 15 deletions(-) rename core/src/main/java/com/sopt/core/util/{CalculateTime.kt => time/CalculateTimeFromString.kt} (96%) diff --git a/core/src/main/java/com/sopt/core/util/CalculateTime.kt b/core/src/main/java/com/sopt/core/util/time/CalculateTimeFromString.kt similarity index 96% rename from core/src/main/java/com/sopt/core/util/CalculateTime.kt rename to core/src/main/java/com/sopt/core/util/time/CalculateTimeFromString.kt index fc306788..7fce3017 100644 --- a/core/src/main/java/com/sopt/core/util/CalculateTime.kt +++ b/core/src/main/java/com/sopt/core/util/time/CalculateTimeFromString.kt @@ -1,11 +1,11 @@ -package com.sopt.core.util +package com.sopt.core.util.time import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.time.format.TextStyle import java.util.Locale -class CalculateTime { +class CalculateTimeFromString { // ex) 09/07 fun extractFullDateWithSlash(dateTime: String): String { return parseDateTime(dateTime).toLocalDate().format(DateTimeFormatter.ofPattern("MM/dd")) diff --git a/core/src/main/java/com/sopt/core/util/timetable/TimeTable.kt b/core/src/main/java/com/sopt/core/util/timetable/TimeTable.kt index 35b3a1a1..cbe07ffa 100644 --- a/core/src/main/java/com/sopt/core/util/timetable/TimeTable.kt +++ b/core/src/main/java/com/sopt/core/util/timetable/TimeTable.kt @@ -5,7 +5,7 @@ import androidx.compose.ui.graphics.Color import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.type.AvailabilityLevel import com.sopt.core.type.CellType -import com.sopt.core.util.CalculateTime +import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.domain.entity.AppointmentMembersInfoEntity import com.sopt.domain.entity.TimeEntity @@ -138,8 +138,8 @@ class TimeTable { } private fun formatDateTimeToCustomFormat(dateTime: String): String { - val dayOfWeek = CalculateTime().extractDayOfWeek(dateTime) - val date = CalculateTime().extractDateWithSlash(dateTime) + val dayOfWeek = CalculateTimeFromString().extractDayOfWeek(dateTime) + val date = CalculateTimeFromString().extractDateWithSlash(dateTime) return "$dayOfWeek\n$date" } diff --git a/presentation/src/main/java/com/sopt/presentation/appointment/appointmentConfirm/AppointmentConfirmRoute.kt b/presentation/src/main/java/com/sopt/presentation/appointment/appointmentConfirm/AppointmentConfirmRoute.kt index 281a8279..861397fa 100644 --- a/presentation/src/main/java/com/sopt/presentation/appointment/appointmentConfirm/AppointmentConfirmRoute.kt +++ b/presentation/src/main/java/com/sopt/presentation/appointment/appointmentConfirm/AppointmentConfirmRoute.kt @@ -38,7 +38,7 @@ import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.extension.showIf import com.sopt.core.state.UiState -import com.sopt.core.util.CalculateTime +import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.core.util.RearrangeList import com.sopt.domain.entity.AppointmentDetailEntity import com.sopt.domain.entity.IdentityEntity @@ -130,7 +130,7 @@ fun AppointmentConfirmScreen( onConfirmButtonClick: (Long) -> Unit, data: AppointmentDetailEntity ) { - val calculateTime = CalculateTime() + val calculateTime = CalculateTimeFromString() val date = calculateTime.extractDateWithKorean(data.date) val dayOfWeek = calculateTime.extractDayOfWeekWithBraces(data.date) val startHour = calculateTime.extractHourWithZero(data.startTime) diff --git a/presentation/src/main/java/com/sopt/presentation/appointment/screen/RecommendationScreen.kt b/presentation/src/main/java/com/sopt/presentation/appointment/screen/RecommendationScreen.kt index 2dbbfd11..54dfa08f 100644 --- a/presentation/src/main/java/com/sopt/presentation/appointment/screen/RecommendationScreen.kt +++ b/presentation/src/main/java/com/sopt/presentation/appointment/screen/RecommendationScreen.kt @@ -41,7 +41,7 @@ import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.extension.noRippleClickable import com.sopt.core.extension.showIf -import com.sopt.core.util.CalculateTime +import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.core.util.RearrangeList import com.sopt.domain.entity.IdentityEntity import com.sopt.domain.entity.OptionEntity @@ -114,7 +114,7 @@ fun RecommendationItem( } } val (isLiked, likes) = likeState - val calculateTime = CalculateTime() + val calculateTime = CalculateTimeFromString() val date = calculateTime.extractDateWithKorean(data.date) val dayOfWeek = calculateTime.extractDayOfWeekWithBraces(data.date) val startHour = calculateTime.extractHourWithZero(data.startTime) diff --git a/presentation/src/main/java/com/sopt/presentation/groupDetail/confirmedDetail/ConfirmedDetailRoute.kt b/presentation/src/main/java/com/sopt/presentation/groupDetail/confirmedDetail/ConfirmedDetailRoute.kt index c945cdbb..b48d6a72 100644 --- a/presentation/src/main/java/com/sopt/presentation/groupDetail/confirmedDetail/ConfirmedDetailRoute.kt +++ b/presentation/src/main/java/com/sopt/presentation/groupDetail/confirmedDetail/ConfirmedDetailRoute.kt @@ -38,7 +38,7 @@ import com.sopt.core.designsystem.screen.NoostakLoadingScreen import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.state.UiState -import com.sopt.core.util.CalculateTime +import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.core.util.RearrangeList import com.sopt.domain.entity.ConfirmedDetailEntity import com.sopt.presentation.R @@ -111,7 +111,7 @@ fun ConfirmedDetailScreen( ) } ) { innerPadding -> - val calculateTime = CalculateTime() + val calculateTime = CalculateTimeFromString() val date = calculateTime.extractDateWithSlash(data.date) val startHour = calculateTime.extractHourWithZero(data.startTime) val rearrangeList = RearrangeList() diff --git a/presentation/src/main/java/com/sopt/presentation/groupDetail/screen/ConfirmedScreen.kt b/presentation/src/main/java/com/sopt/presentation/groupDetail/screen/ConfirmedScreen.kt index 12ef97f1..87eba75d 100644 --- a/presentation/src/main/java/com/sopt/presentation/groupDetail/screen/ConfirmedScreen.kt +++ b/presentation/src/main/java/com/sopt/presentation/groupDetail/screen/ConfirmedScreen.kt @@ -22,7 +22,7 @@ import com.sopt.core.designsystem.component.box.CategoryBox import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.extension.noRippleClickable -import com.sopt.core.util.CalculateTime +import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.domain.entity.ConfirmedEntity import com.sopt.presentation.R import com.sopt.presentation.groupDetail.GroupDetailViewModel @@ -71,7 +71,7 @@ fun ConfirmedItem( confirmedEntity: ConfirmedEntity, onItemClicked: (Long, Long, String) -> Unit ) { - val calculateTime = CalculateTime() + val calculateTime = CalculateTimeFromString() val date = calculateTime.extractDateWithKorean(confirmedEntity.date) val dayOfWeek = calculateTime.extractDayOfWeekWithBraces(confirmedEntity.date) val startHour = calculateTime.extractHourWithZero(confirmedEntity.startTime) diff --git a/presentation/src/main/java/com/sopt/presentation/groupDetail/screen/ProgressScreen.kt b/presentation/src/main/java/com/sopt/presentation/groupDetail/screen/ProgressScreen.kt index 7894d4b4..b5a21758 100644 --- a/presentation/src/main/java/com/sopt/presentation/groupDetail/screen/ProgressScreen.kt +++ b/presentation/src/main/java/com/sopt/presentation/groupDetail/screen/ProgressScreen.kt @@ -29,7 +29,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.extension.noRippleClickable -import com.sopt.core.util.CalculateTime +import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.domain.entity.ProgressEntity import com.sopt.presentation.R import com.sopt.presentation.groupDetail.GroupDetailViewModel @@ -74,7 +74,7 @@ fun ProgressItem( progressEntity: ProgressEntity, onItemClicked: (Long, Long, String) -> Unit ) { - val calculateTime = CalculateTime() + val calculateTime = CalculateTimeFromString() val startDate = calculateTime.extractDateWithKorean(progressEntity.startDate) val dayOfWeek = calculateTime.extractDayOfWeekWithBraces(progressEntity.startDate) val startHour = calculateTime.extractHourWithZero(progressEntity.startDate) From 0978b370de291a809f1f4ed2782e6e37ce001415 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Sat, 5 Apr 2025 02:24:00 +0900 Subject: [PATCH 02/24] =?UTF-8?q?#79=20[MOD]=20appointmentName=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/mapper/ResponseGetConfirmedDtoMapper.kt | 1 + .../sopt/domain/entity/AppointmentDetailEntity.kt | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/data/src/main/java/com/sopt/data/mapper/ResponseGetConfirmedDtoMapper.kt b/data/src/main/java/com/sopt/data/mapper/ResponseGetConfirmedDtoMapper.kt index 2b2bd66e..949a7ee2 100644 --- a/data/src/main/java/com/sopt/data/mapper/ResponseGetConfirmedDtoMapper.kt +++ b/data/src/main/java/com/sopt/data/mapper/ResponseGetConfirmedDtoMapper.kt @@ -6,6 +6,7 @@ import com.sopt.domain.entity.IdentityEntity fun ResponseGetOptionDetailDto.toAppointmentDetailEntity() = AppointmentDetailEntity( myIdentity = myInfo?.toIdentityEntity() ?: IdentityEntity("unavailable", -1, "나"), + appointmentName = appointmentName, date = appointmentTime.date, startTime = appointmentTime.startTime, endTime = appointmentTime.endTime, diff --git a/domain/src/main/java/com/sopt/domain/entity/AppointmentDetailEntity.kt b/domain/src/main/java/com/sopt/domain/entity/AppointmentDetailEntity.kt index 04ed688c..0547e612 100644 --- a/domain/src/main/java/com/sopt/domain/entity/AppointmentDetailEntity.kt +++ b/domain/src/main/java/com/sopt/domain/entity/AppointmentDetailEntity.kt @@ -2,12 +2,13 @@ package com.sopt.domain.entity data class AppointmentDetailEntity( val myIdentity: IdentityEntity, - val date: String, - val startTime: String, - val endTime: String, - val category: String, - val availableMembersCount: Int, + val appointmentName: String = "", + val date: String = "", + val startTime: String = "", + val endTime: String = "", + val category: String = "", + val availableMembersCount: Int = 0, val availableMembers: List, - val unavailableMembersCount: Int, + val unavailableMembersCount: Int = 0, val unavailableMembers: List ) From cf69dcf5eaecd43fc7eac80c5b6bc1686083b5fd Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Sat, 5 Apr 2025 02:24:07 +0900 Subject: [PATCH 03/24] =?UTF-8?q?#79=20[DEL]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=8C=8C=EC=9D=BC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/domain/entity/ScheduleDetailEntity.kt | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 domain/src/main/java/com/sopt/domain/entity/ScheduleDetailEntity.kt diff --git a/domain/src/main/java/com/sopt/domain/entity/ScheduleDetailEntity.kt b/domain/src/main/java/com/sopt/domain/entity/ScheduleDetailEntity.kt deleted file mode 100644 index a87f7bfc..00000000 --- a/domain/src/main/java/com/sopt/domain/entity/ScheduleDetailEntity.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.sopt.domain.entity - -data class ScheduleDetailEntity( - val myIdentity: IdentityEntity, - val appointmentName: String = "", - val date: String = "", // YYYY-MM-DDTHH:mm:ss - ex) 2024-09-07T00:00:00 - val startTime: String = "", // YYYY-MM-DDTHH:mm:ss - ex) 2024-09-07T00:00:00 - val endTime: String = "", // YYYY-MM-DDTHH:mm:ss - ex) 2024-09-07T00:00:00 - val category: String = "", - val availableMembersCount: Int = 0, - val availableMembers: List, - val unavailableMembersCount: Int = 0, - val unavailableMembers: List -) From c92ff89e13d3da690705bd7957d34464b9f3128b Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Sat, 5 Apr 2025 02:24:51 +0900 Subject: [PATCH 04/24] =?UTF-8?q?#79=20[FEAT]=20CalculateTimeFromLocalDate?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/util/time/CalculateTimeFromLocalDate.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 core/src/main/java/com/sopt/core/util/time/CalculateTimeFromLocalDate.kt diff --git a/core/src/main/java/com/sopt/core/util/time/CalculateTimeFromLocalDate.kt b/core/src/main/java/com/sopt/core/util/time/CalculateTimeFromLocalDate.kt new file mode 100644 index 00000000..801a110d --- /dev/null +++ b/core/src/main/java/com/sopt/core/util/time/CalculateTimeFromLocalDate.kt @@ -0,0 +1,16 @@ +package com.sopt.core.util.time + +import java.time.LocalDate +import java.time.format.TextStyle +import java.util.Locale + +class CalculateTimeFromLocalDate { + // ex) 1월 1일 (월) + fun formatLocalDateWithDay(localDate: LocalDate): String { + val month = localDate.monthValue + val day = localDate.dayOfMonth + val dayOfWeek = localDate.dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.KOREAN) + + return "${month}월 ${day}일 ($dayOfWeek)" + } +} \ No newline at end of file From f495fc5189194ad0cfe35d9a8cc5a4aec0b66534 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Sat, 5 Apr 2025 02:25:06 +0900 Subject: [PATCH 05/24] =?UTF-8?q?#79=20[MOD]=20onItemClick=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/component/bottomsheet/ScheduleItem.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleItem.kt b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleItem.kt index 4d28cb1f..08506cba 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleItem.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleItem.kt @@ -24,13 +24,13 @@ import com.sopt.presentation.R @Composable fun ScheduleItem( data: CalendarAppointmentEntity, - onItemClick: (CalendarAppointmentEntity) -> Unit = {} + onItemClick: (Long) -> Unit = {} ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() - .noRippleClickable { onItemClick(data) } + .noRippleClickable { onItemClick(data.id) } .background(color = NoostakTheme.colors.gray50, shape = RoundedCornerShape(8.dp)) .padding(8.dp) ) { From 0810c6a17dc2c8005a544986d499c87a9f5e1088 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Sat, 5 Apr 2025 02:25:19 +0900 Subject: [PATCH 06/24] =?UTF-8?q?#79=20[MOD]=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domain/src/main/java/com/sopt/domain/entity/ScheduleEntity.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/domain/src/main/java/com/sopt/domain/entity/ScheduleEntity.kt b/domain/src/main/java/com/sopt/domain/entity/ScheduleEntity.kt index 93dcb63b..8410a2d4 100644 --- a/domain/src/main/java/com/sopt/domain/entity/ScheduleEntity.kt +++ b/domain/src/main/java/com/sopt/domain/entity/ScheduleEntity.kt @@ -1,7 +1,9 @@ package com.sopt.domain.entity +import java.time.LocalDate + data class ScheduleEntity( val groupId: Long = -1, - val date: String, // M월 D일 (E) - ex) 1월 13일 (월) + val date: LocalDate, val scheduleList: List ) From e82fa1aaaa5f0f6eea5a59b62137c665bbd4e373 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Sat, 5 Apr 2025 02:25:28 +0900 Subject: [PATCH 07/24] =?UTF-8?q?#79=20[MOD]=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/component/bottomsheet/ScheduleListScreen.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleListScreen.kt b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleListScreen.kt index f2e9174a..c2cec83c 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleListScreen.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleListScreen.kt @@ -23,14 +23,16 @@ import com.sopt.core.designsystem.component.button.NoostakBottomButton import com.sopt.core.designsystem.screen.NoostakEmptyScreen import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme +import com.sopt.core.util.time.CalculateTimeFromLocalDate import com.sopt.domain.entity.CalendarAppointmentEntity import com.sopt.domain.entity.ScheduleEntity import com.sopt.presentation.R +import java.time.LocalDate @Composable fun ScheduleListScreen( data: ScheduleEntity, - onItemClick: (CalendarAppointmentEntity) -> Unit = {}, + onItemClick: (Long) -> Unit = {}, onCreateAppointmentBtnClick: () -> Unit = {} ) { Column( @@ -45,7 +47,7 @@ fun ScheduleListScreen( contentAlignment = Alignment.Center ) { Text( - text = data.date, + text = CalculateTimeFromLocalDate().formatLocalDateWithDay(data.date), color = NoostakTheme.colors.black, style = NoostakTheme.typography.b1SemiBold ) @@ -99,7 +101,7 @@ fun ScheduleListScreenPreview() { ScheduleListScreen( data = ScheduleEntity( groupId = 1, - date = "1월 13일 (월)", + date = LocalDate.of(2025, 4, 4), scheduleList = listOf( CalendarAppointmentEntity( id = 1, From 5b82e22fee53804f759b75a84b78c40d142f07a2 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Sat, 5 Apr 2025 02:25:36 +0900 Subject: [PATCH 08/24] =?UTF-8?q?#79=20[MOD]=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/component/bottomsheet/ScheduleDetailScreen.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleDetailScreen.kt b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleDetailScreen.kt index 91d5b0ff..a7e09734 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleDetailScreen.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleDetailScreen.kt @@ -27,15 +27,15 @@ import com.sopt.core.designsystem.component.chip.UnavailableUserChips import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.util.RearrangeList +import com.sopt.domain.entity.AppointmentDetailEntity import com.sopt.domain.entity.IdentityEntity -import com.sopt.domain.entity.ScheduleDetailEntity import com.sopt.presentation.R import com.sopt.presentation.groupDetail.confirmedDetail.CompleteDetailInfo @OptIn(ExperimentalLayoutApi::class) @Composable fun ScheduleDetailScreen( - data: ScheduleDetailEntity, + data: AppointmentDetailEntity, onBackBtnClick: () -> Unit = {} ) { val rearrangeList = RearrangeList() @@ -129,7 +129,7 @@ fun ScheduleDetailScreen( fun ScheduleDetailScreenPreview() { NoostakAndroidTheme { ScheduleDetailScreen( - ScheduleDetailEntity( + AppointmentDetailEntity( myIdentity = IdentityEntity( availability = "available", position = 0, From 4e4956d56fdf5d2221ecfe26874cfacc348c36fb Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Sat, 5 Apr 2025 02:26:12 +0900 Subject: [PATCH 09/24] =?UTF-8?q?#79=20[MOD]=20getOptionDetail=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/CalendarViewModel.kt | 98 +++++++------------ 1 file changed, 35 insertions(+), 63 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt index ec391f58..f84e1b5d 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt @@ -2,19 +2,19 @@ package com.sopt.presentation.calendar import androidx.lifecycle.viewModelScope import com.sopt.core.extension.toDateString +import com.sopt.core.state.UiState import com.sopt.core.util.BaseViewModel -import com.sopt.core.util.calendar.toFormattedKoreanDate +import com.sopt.domain.entity.AppointmentDetailEntity import com.sopt.domain.entity.CalendarAppointmentDayEntity import com.sopt.domain.entity.CalendarAppointmentEntity import com.sopt.domain.entity.CalendarGroupEntity import com.sopt.domain.entity.CalendarSchedule -import com.sopt.domain.entity.IdentityEntity -import com.sopt.domain.entity.ScheduleDetailEntity -import com.sopt.domain.entity.ScheduleEntity +import com.sopt.domain.repository.AppointmentConfirmRepository import com.sopt.domain.usecase.GetCalendarAppointmentsUseCase import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import timber.log.Timber @@ -24,7 +24,8 @@ import javax.inject.Inject @HiltViewModel class CalendarViewModel @Inject constructor( - private val getCalendarAppointmentsUseCase: GetCalendarAppointmentsUseCase + private val getCalendarAppointmentsUseCase: GetCalendarAppointmentsUseCase, + private val appointmentConfirmRepository: AppointmentConfirmRepository ) : BaseViewModel() { private val _showAddDialog = MutableStateFlow(false) @@ -38,15 +39,35 @@ class CalendarViewModel @Inject constructor( private var currentYearMonth: YearMonth = YearMonth.now() - private val _selectedDayAppointments = MutableStateFlow>(emptyList()) + private val _selectedDayAppointments = + MutableStateFlow>(emptyList()) val selectedDayAppointments: StateFlow> get() = _selectedDayAppointments private var _currentMonthAppointments = emptyList() + private val _getConfirmedState: MutableStateFlow> = + MutableStateFlow(UiState.Empty) + val getConfirmedState: StateFlow> = + _getConfirmedState.asStateFlow() + init { getCalendarAppointments(currentYearMonth.year, currentYearMonth.monthValue) } + fun getOptionDetail(appointmentOptionId: Long) { + viewModelScope.launch { + _getConfirmedState.emit(UiState.Loading) + appointmentConfirmRepository.getOptionDetail(appointmentOptionId).fold( + onSuccess = { + _getConfirmedState.emit(UiState.Success(it)) + }, + onFailure = { + _getConfirmedState.emit(UiState.Failure(it.message.toString())) + } + ) + } + } + fun showAddDialog(show: Boolean) { _showAddDialog.update { show } } @@ -55,6 +76,10 @@ class CalendarViewModel @Inject constructor( _showBottomSheet.update { show } } + private fun triggerShowBottomSheet() { + emitSideEffect(CalendarSideEffect.ShowBottomSheet) + } + fun navigateToGroupCreate() { emitSideEffect(CalendarSideEffect.NavigateToGroupCreate) } @@ -70,7 +95,7 @@ class CalendarViewModel @Inject constructor( // 캘린더 약속 정보 가져오기 private fun getCalendarAppointments(year: Int, month: Int) { viewModelScope.launch { - getCalendarAppointmentsUseCase(1, year, month) + getCalendarAppointmentsUseCase(10006, year, month) .fold( onSuccess = { response -> val newScheduleMap = @@ -107,35 +132,12 @@ class CalendarViewModel @Inject constructor( val appointments = _currentMonthAppointments .firstOrNull { it.day == date.dayOfMonth && - currentYearMonth.year == date.year && - currentYearMonth.monthValue == date.monthValue + currentYearMonth.year == date.year && + currentYearMonth.monthValue == date.monthValue }?.appointments ?: emptyList() _selectedDayAppointments.value = appointments - - if (appointments.isNotEmpty()) { - showBottomSheet(true) - emitSideEffect(CalendarSideEffect.ShowBottomSheet) - } - } - - // 해당 날짜 일정 가져오기 - fun getSelectedScheduleEntity(): ScheduleEntity { - return ScheduleEntity( - groupId = 1, - date = _selectedDayAppointments.value.first().date.toFormattedKoreanDate(), - scheduleList = _selectedDayAppointments.value.map { - CalendarAppointmentEntity( - id = it.id, - name = it.name, - category = it.category, - startTime = it.startTime, - endTime = it.endTime, - duration = it.duration, - date = it.date - ) - } - ) + triggerShowBottomSheet() } val mockGroups = listOf( @@ -185,34 +187,4 @@ class CalendarViewModel @Inject constructor( groupImage = "https://avatars.githubusercontent.com/u/85453429?s=96&v=4" ) ) - - val mockScheduleDetail = ScheduleDetailEntity( - myIdentity = IdentityEntity( - availability = "available", - position = 0, - name = "김언지" - ), - appointmentName = "누스탁이올시다 으아아아아아아아아아아아아아", - date = "1월 13일 (월)", - startTime = "1/13 21:00", - endTime = "1/13 21:00", - category = "기타", - availableMembersCount = 81, - availableMembers = listOf( - "하루", "야마다", "이누마키", "츠키시마", - "마이키", "호크스", "토도로키", "아이자와", "리바이", "이구로", "호시나", "신에이", - "하루", "야마다", "이누마키", "츠키시마", - "마이키", "호크스", "토도로키", "아이자와", "리바이", "이구로", "호시나", "신에이", - "하루", "야마다", "이누마키", "츠키시마", - "마이키", "호크스", "토도로키", "아이자와", "리바이", "이구로", "호시나", "신에이", - "하루", "야마다", "이누마키", "츠키시마", - "마이키", "호크스", "토도로키", "아이자와", "리바이", "이구로", "호시나", "신에이", - "하루", "야마다", "이누마키", "츠키시마", - "마이키", "호크스", "토도로키", "아이자와", "리바이", "이구로", "호시나", "신에이", - "하루", "야마다", "이누마키", "츠키시마", - "마이키", "호크스", "토도로키", "아이자와", "리바이", "이구로", "호시나", "신에이" - ), - unavailableMembersCount = 3, - unavailableMembers = listOf("박보검", "정해인", "권지용") - ) } From 203f668a6c52cdb4428cdcb458bfb8a455883389 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Sat, 5 Apr 2025 02:26:40 +0900 Subject: [PATCH 10/24] =?UTF-8?q?#79=20[MOD]=20getOptionDetail=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20=EB=B0=8F=20=ED=95=84=EB=93=9C=20=ED=83=80=EC=9E=85?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/calendar/CalendarRoute.kt | 83 ++++++++++++------- 1 file changed, 54 insertions(+), 29 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarRoute.kt b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarRoute.kt index 623e687a..360bf5aa 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarRoute.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarRoute.kt @@ -1,5 +1,6 @@ package com.sopt.presentation.calendar +import android.annotation.SuppressLint import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -17,7 +18,9 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -33,13 +36,17 @@ import com.sopt.core.designsystem.component.bottomsheet.NoostakBottomSheet import com.sopt.core.designsystem.component.calendar.WeekDaysHeader import com.sopt.core.designsystem.component.calendar.YearMonthHeader import com.sopt.core.designsystem.component.topappbar.NoostakLogoAppBar +import com.sopt.core.designsystem.screen.NoostakLoadingScreen import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.extension.getYearMonthByPage import com.sopt.core.extension.initialPage import com.sopt.core.extension.pageCount +import com.sopt.core.state.UiState +import com.sopt.domain.entity.CalendarAppointmentEntity import com.sopt.domain.entity.CalendarGroupEntity import com.sopt.domain.entity.CalendarSchedule +import com.sopt.domain.entity.ScheduleEntity import com.sopt.presentation.R import com.sopt.presentation.calendar.component.CalendarFloatingActionDialog import com.sopt.presentation.calendar.component.CalendarGroup @@ -48,6 +55,7 @@ import com.sopt.presentation.calendar.component.bottomsheet.ScheduleListScreen import java.time.LocalDate import java.time.YearMonth +@SuppressLint("StateFlowValueCalledInComposition") @OptIn(ExperimentalMaterial3Api::class) @Composable fun CalendarRoute( @@ -57,12 +65,13 @@ fun CalendarRoute( navigateToGroupEnter: () -> Unit, navigateToAppointmentCreate: (Long) -> Unit ) { - val showAddDialog by calendarViewModel.showAddDialog.collectAsStateWithLifecycle() + val navController = rememberNavController() + val showAddDialog by calendarViewModel.showAddDialog.collectAsStateWithLifecycle() val showBottomSheet by calendarViewModel.showBottomSheet.collectAsStateWithLifecycle() - val navController = rememberNavController() val scheduleMap by calendarViewModel.scheduleMap.collectAsStateWithLifecycle() + val getConfirmedState by calendarViewModel.getConfirmedState.collectAsStateWithLifecycle() val pagerState = rememberPagerState( initialPage = initialPage, @@ -71,6 +80,8 @@ fun CalendarRoute( val currentYearMonth by remember { derivedStateOf { getYearMonthByPage(pagerState.currentPage) } } + var clickDate by remember { mutableStateOf(null) } + LaunchedEffect(pagerState) { snapshotFlow { pagerState.currentPage } .collect { page -> @@ -83,10 +94,7 @@ fun CalendarRoute( when (sideEffect) { is CalendarSideEffect.NavigateToGroupCreate -> navigateToGroupCreate() is CalendarSideEffect.NavigateToGroupEnter -> navigateToGroupEnter() - is CalendarSideEffect.NavigateToAppointmentCreate -> navigateToAppointmentCreate( - calendarViewModel.getSelectedScheduleEntity().groupId - ) - + is CalendarSideEffect.NavigateToAppointmentCreate -> navigateToAppointmentCreate(10006) // 임의 GroupId is CalendarSideEffect.ShowAddDialog -> calendarViewModel.showAddDialog(true) is CalendarSideEffect.ShowBottomSheet -> calendarViewModel.showBottomSheet(true) } @@ -116,30 +124,46 @@ fun CalendarRoute( }, content = { NavHost(navController, startDestination = SCHEDULE_LIST) { - composable(SCHEDULE_LIST) { backStackEntry -> - ScheduleListScreen( - data = calendarViewModel.getSelectedScheduleEntity(), - onItemClick = { schedule -> - backStackEntry.savedStateHandle[SCHEDULE] = - schedule.id // 바꿔야 함 - navController.navigate(SCHEDULE_DETAIL) - }, - onCreateAppointmentBtnClick = { - calendarViewModel.navigateToAppointmentCreate() - calendarViewModel.showBottomSheet(false) - } - ) + composable(SCHEDULE_LIST) { + clickDate?.let { date -> + ScheduleListScreen( + data = ScheduleEntity( + groupId = 10006, // 임의 GroupId + date = date, + scheduleList = calendarViewModel.selectedDayAppointments.value.map { + CalendarAppointmentEntity( + id = it.id, + name = it.name, + category = it.category, + startTime = it.startTime, + endTime = it.endTime, + duration = it.duration, + date = it.date + ) + } + ), + onItemClick = { id -> + calendarViewModel.getOptionDetail(id) + navController.navigate(SCHEDULE_DETAIL) + }, + onCreateAppointmentBtnClick = { + calendarViewModel.navigateToAppointmentCreate() + calendarViewModel.showBottomSheet(false) + } + ) + } } composable(SCHEDULE_DETAIL) { - val schedule = - navController.previousBackStackEntry?.savedStateHandle?.get( - SCHEDULE - ) - schedule?.let { id -> - ScheduleDetailScreen( - data = calendarViewModel.mockScheduleDetail, - onBackBtnClick = { navController.popBackStack() } - ) + when (getConfirmedState) { + is UiState.Loading -> NoostakLoadingScreen() + is UiState.Success -> { + ScheduleDetailScreen( + data = (getConfirmedState as UiState.Success).data, + onBackBtnClick = { navController.popBackStack() } + ) + } + + else -> Unit } } } @@ -156,6 +180,7 @@ fun CalendarRoute( showAddDialog = showAddDialog, onAddBtnClick = { calendarViewModel.showAddDialog(true) }, onItemClick = { clickedDate -> + clickDate = clickedDate calendarViewModel.onDayClicked(clickedDate) } ) @@ -230,7 +255,7 @@ private fun CalendarContent( } } -const val SCHEDULE = "schedule" + const val SCHEDULE_LIST = "schedule_list" const val SCHEDULE_DETAIL = "schedule_detail" From d1c751d826f06063174656d5c7443f36c08f8194 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:56:18 +0900 Subject: [PATCH 11/24] =?UTF-8?q?#79=20[MOD]=20ktlint=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appointment/appointmentConfirm/AppointmentConfirmRoute.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/appointment/appointmentConfirm/AppointmentConfirmRoute.kt b/presentation/src/main/java/com/sopt/presentation/appointment/appointmentConfirm/AppointmentConfirmRoute.kt index 861397fa..df711625 100644 --- a/presentation/src/main/java/com/sopt/presentation/appointment/appointmentConfirm/AppointmentConfirmRoute.kt +++ b/presentation/src/main/java/com/sopt/presentation/appointment/appointmentConfirm/AppointmentConfirmRoute.kt @@ -38,8 +38,8 @@ import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.extension.showIf import com.sopt.core.state.UiState -import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.core.util.RearrangeList +import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.domain.entity.AppointmentDetailEntity import com.sopt.domain.entity.IdentityEntity import com.sopt.presentation.R @@ -103,7 +103,7 @@ fun AppointmentConfirmRoute( ) } - else -> {} + else -> Unit } if (showErrorDialog.first) { From a175893344833c53c9902e1a2d8edf327c087cd2 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:56:29 +0900 Subject: [PATCH 12/24] =?UTF-8?q?#79=20[MOD]=20ktlint=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sopt/core/util/time/CalculateTimeFromLocalDate.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/sopt/core/util/time/CalculateTimeFromLocalDate.kt b/core/src/main/java/com/sopt/core/util/time/CalculateTimeFromLocalDate.kt index 801a110d..6cb5525f 100644 --- a/core/src/main/java/com/sopt/core/util/time/CalculateTimeFromLocalDate.kt +++ b/core/src/main/java/com/sopt/core/util/time/CalculateTimeFromLocalDate.kt @@ -13,4 +13,4 @@ class CalculateTimeFromLocalDate { return "${month}월 ${day}일 ($dayOfWeek)" } -} \ No newline at end of file +} From cdb41b4359101beadbfb73c98454f19c5619137a Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:57:16 +0900 Subject: [PATCH 13/24] =?UTF-8?q?#79=20[FEAT]=20getConfirmedDetail,=20Data?= =?UTF-8?q?ErrorDialog=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/calendar/CalendarRoute.kt | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarRoute.kt b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarRoute.kt index 38f2c8c0..da1fba2f 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarRoute.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarRoute.kt @@ -18,6 +18,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -35,6 +36,7 @@ import androidx.navigation.compose.rememberNavController import com.sopt.core.designsystem.component.bottomsheet.NoostakBottomSheet import com.sopt.core.designsystem.component.calendar.WeekDaysHeader import com.sopt.core.designsystem.component.calendar.YearMonthHeader +import com.sopt.core.designsystem.component.dialog.NoostakDialog import com.sopt.core.designsystem.component.topappbar.NoostakLogoAppBar import com.sopt.core.designsystem.screen.NoostakLoadingScreen import com.sopt.core.designsystem.theme.NoostakAndroidTheme @@ -43,11 +45,11 @@ import com.sopt.core.extension.getYearMonthByPage import com.sopt.core.extension.initialPage import com.sopt.core.extension.pageCount import com.sopt.core.state.UiState +import com.sopt.core.type.DialogType import com.sopt.domain.entity.CalendarAppointmentEntity -import com.sopt.domain.entity.CalendarGroupEntity import com.sopt.domain.entity.CalendarSchedule -import com.sopt.domain.entity.ScheduleEntity import com.sopt.domain.entity.GroupEntity +import com.sopt.domain.entity.ScheduleEntity import com.sopt.presentation.R import com.sopt.presentation.calendar.component.CalendarFloatingActionDialog import com.sopt.presentation.calendar.component.CalendarGroup @@ -69,12 +71,13 @@ fun CalendarRoute( val navController = rememberNavController() val getGroupsState by calendarViewModel.getGroupsState.collectAsStateWithLifecycle() + val getConfirmedDetailState by calendarViewModel.getConfirmedDetailState.collectAsStateWithLifecycle() val showAddDialog by calendarViewModel.showAddDialog.collectAsStateWithLifecycle() val showBottomSheet by calendarViewModel.showBottomSheet.collectAsStateWithLifecycle() + val showDataErrorDialog by calendarViewModel.showDataErrorDialog.collectAsStateWithLifecycle() val scheduleMap by calendarViewModel.scheduleMap.collectAsStateWithLifecycle() - val getConfirmedState by calendarViewModel.getConfirmedState.collectAsStateWithLifecycle() val pagerState = rememberPagerState( initialPage = initialPage, @@ -84,6 +87,7 @@ fun CalendarRoute( val currentYearMonth by remember { derivedStateOf { getYearMonthByPage(pagerState.currentPage) } } var clickDate by remember { mutableStateOf(null) } + var clickAppointmentId by remember { mutableLongStateOf(-1) } LaunchedEffect(pagerState) { snapshotFlow { pagerState.currentPage } @@ -97,13 +101,32 @@ fun CalendarRoute( when (sideEffect) { is CalendarSideEffect.NavigateToGroupCreate -> navigateToGroupCreate() is CalendarSideEffect.NavigateToGroupEnter -> navigateToGroupEnter() - is CalendarSideEffect.NavigateToAppointmentCreate -> navigateToAppointmentCreate(10006) // 임의 GroupId + is CalendarSideEffect.NavigateToAppointmentCreate -> navigateToAppointmentCreate( + calendarViewModel.selectedGroupId.value ?: -1 + ) + is CalendarSideEffect.ShowAddDialog -> calendarViewModel.showAddDialog(true) is CalendarSideEffect.ShowBottomSheet -> calendarViewModel.showBottomSheet(true) + is CalendarSideEffect.ShowDataErrorDialog -> calendarViewModel.showDataErrorDialog( + true + ) } } } + if (showDataErrorDialog) { + NoostakDialog( + dialogType = DialogType.DATA_FAILURE, + onClick = { + calendarViewModel.getConfirmedDetail(clickAppointmentId) + }, + onDismissRequest = { + calendarViewModel.showDataErrorDialog(false) + navController.popBackStack() + } + ) + } + if (showAddDialog) { CalendarFloatingActionDialog( onClick = { calendarViewModel.showAddDialog(false) }, @@ -131,7 +154,7 @@ fun CalendarRoute( clickDate?.let { date -> ScheduleListScreen( data = ScheduleEntity( - groupId = 10006, // 임의 GroupId + groupId = calendarViewModel.selectedGroupId.value ?: -1, date = date, scheduleList = calendarViewModel.selectedDayAppointments.value.map { CalendarAppointmentEntity( @@ -146,7 +169,8 @@ fun CalendarRoute( } ), onItemClick = { id -> - calendarViewModel.getOptionDetail(id) + clickAppointmentId = id + calendarViewModel.getConfirmedDetail(clickAppointmentId) navController.navigate(SCHEDULE_DETAIL) }, onCreateAppointmentBtnClick = { @@ -157,11 +181,11 @@ fun CalendarRoute( } } composable(SCHEDULE_DETAIL) { - when (getConfirmedState) { + when (getConfirmedDetailState) { is UiState.Loading -> NoostakLoadingScreen() is UiState.Success -> { ScheduleDetailScreen( - data = (getConfirmedState as UiState.Success).data, + data = (getConfirmedDetailState as UiState.Success).data, onBackBtnClick = { navController.popBackStack() } ) } @@ -263,7 +287,6 @@ private fun CalendarContent( } } - const val SCHEDULE_LIST = "schedule_list" const val SCHEDULE_DETAIL = "schedule_detail" From 8c9cf41dbfb2bc9adc1066c80ff7ec71a24de998 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:57:25 +0900 Subject: [PATCH 14/24] =?UTF-8?q?#79=20[FEAT]=20ShowDataErrorDialog=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sopt/presentation/calendar/CalendarSideEffect.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarSideEffect.kt b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarSideEffect.kt index 6811dec5..a4f32484 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarSideEffect.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarSideEffect.kt @@ -6,4 +6,5 @@ sealed interface CalendarSideEffect { data object NavigateToAppointmentCreate : CalendarSideEffect data class ShowAddDialog(val show: Boolean) : CalendarSideEffect data object ShowBottomSheet : CalendarSideEffect + data object ShowDataErrorDialog : CalendarSideEffect } From e4ebb7216640ad5bd3d1d5272ee86366435325f9 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:58:06 +0900 Subject: [PATCH 15/24] =?UTF-8?q?#79=20[MOD]=20ConfirmedDetailEntity=20app?= =?UTF-8?q?ointmentName=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/sopt/domain/entity/ConfirmedDetailEntity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/domain/src/main/java/com/sopt/domain/entity/ConfirmedDetailEntity.kt b/domain/src/main/java/com/sopt/domain/entity/ConfirmedDetailEntity.kt index 2b907743..2446930c 100644 --- a/domain/src/main/java/com/sopt/domain/entity/ConfirmedDetailEntity.kt +++ b/domain/src/main/java/com/sopt/domain/entity/ConfirmedDetailEntity.kt @@ -2,6 +2,7 @@ package com.sopt.domain.entity data class ConfirmedDetailEntity( val myIdentity: IdentityEntity, + val appointmentName: String = "", val date: String, val startTime: String, val endTime: String, From 7046b2cc00b9a8e9ab2e4130af98c33240760354 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:58:10 +0900 Subject: [PATCH 16/24] =?UTF-8?q?#79=20[MOD]=20ConfirmedDetailEntity=20app?= =?UTF-8?q?ointmentName=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/data/mapper/ResponseGetGroupConfirmedDetailDtoMapper.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/data/src/main/java/com/sopt/data/mapper/ResponseGetGroupConfirmedDetailDtoMapper.kt b/data/src/main/java/com/sopt/data/mapper/ResponseGetGroupConfirmedDetailDtoMapper.kt index d8b16c71..d896df7c 100644 --- a/data/src/main/java/com/sopt/data/mapper/ResponseGetGroupConfirmedDetailDtoMapper.kt +++ b/data/src/main/java/com/sopt/data/mapper/ResponseGetGroupConfirmedDetailDtoMapper.kt @@ -10,6 +10,7 @@ fun ResponseGetGroupConfirmedDetailDto.toConfirmedDetailEntity() = ConfirmedDeta position = myInfo.position, name = myInfo.name ), + appointmentName = appointmentName, date = appointmentTime.date, startTime = appointmentTime.startTime, endTime = appointmentTime.endTime, From 3cf55dbe7118ab4b7aa1d233d3d6e2390cef9ab6 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:58:29 +0900 Subject: [PATCH 17/24] =?UTF-8?q?#79=20[MOD]=20=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/component/bottomsheet/ScheduleItem.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleItem.kt b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleItem.kt index 08506cba..9c703ab0 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleItem.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleItem.kt @@ -18,6 +18,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.extension.noRippleClickable +import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.domain.entity.CalendarAppointmentEntity import com.sopt.presentation.R @@ -51,10 +52,20 @@ fun ScheduleItem( modifier = Modifier.padding(bottom = 3.dp) ) Text( - text = if (data.duration.toInt() == 24) stringResource(R.string.text_calendar_schedule_item_all_day) else data.duration.toString(), + text = if (data.duration.toInt() == FULL_DURATION) { + stringResource(R.string.text_calendar_schedule_item_all_day) + } else { + "${ + CalculateTimeFromString().extractHourWithZero( + data.startTime + ) + }~${CalculateTimeFromString().extractHourWithZero(data.endTime)}" + }, style = NoostakTheme.typography.c4Regular, color = NoostakTheme.colors.gray700 ) } } } + +const val FULL_DURATION = 24 From b8e4f1ab868e1f6f71f150cb39768ec5c545e4b9 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:58:34 +0900 Subject: [PATCH 18/24] =?UTF-8?q?#79=20[MOD]=20=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/bottomsheet/ScheduleListScreen.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleListScreen.kt b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleListScreen.kt index c2cec83c..8668844f 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleListScreen.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleListScreen.kt @@ -107,8 +107,8 @@ fun ScheduleListScreenPreview() { id = 1, name = "누스탁 회의dasfdsafsafdafdafsdfsafdsafdsadsdafsadfsdfsdafadafdsafsdafsaf", category = "중요", - startTime = "1월 13일(월)", - endTime = "1월 13일(월)", + startTime = "2024-09-07T00:00:00", + endTime = "2024-09-07T00:20:00", duration = 24, date = "" ), @@ -116,8 +116,8 @@ fun ScheduleListScreenPreview() { id = 2, name = "누스탁 모각작", category = "일정", - startTime = "1월 15일(수)", - endTime = "1월 15일(수)", + startTime = "2024-09-07T06:00:00", + endTime = "2024-09-07T08:00:00", duration = 5, date = "" ), @@ -125,8 +125,8 @@ fun ScheduleListScreenPreview() { id = 3, name = "누스탁 회식", category = "취미", - startTime = "1월 20일(화)", - endTime = "1월 20일(화)", + startTime = "2024-09-07T12:00:00", + endTime = "2024-09-07T13:00:00", duration = 2, date = "" ) From 90c66c901c1db4b29016a076090d22ede42ca2a7 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:58:40 +0900 Subject: [PATCH 19/24] =?UTF-8?q?#79=20[MOD]=20=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bottomsheet/ScheduleDetailScreen.kt | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleDetailScreen.kt b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleDetailScreen.kt index a7e09734..300692de 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleDetailScreen.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/component/bottomsheet/ScheduleDetailScreen.kt @@ -27,7 +27,8 @@ import com.sopt.core.designsystem.component.chip.UnavailableUserChips import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.util.RearrangeList -import com.sopt.domain.entity.AppointmentDetailEntity +import com.sopt.core.util.time.CalculateTimeFromString +import com.sopt.domain.entity.ConfirmedDetailEntity import com.sopt.domain.entity.IdentityEntity import com.sopt.presentation.R import com.sopt.presentation.groupDetail.confirmedDetail.CompleteDetailInfo @@ -35,7 +36,7 @@ import com.sopt.presentation.groupDetail.confirmedDetail.CompleteDetailInfo @OptIn(ExperimentalLayoutApi::class) @Composable fun ScheduleDetailScreen( - data: AppointmentDetailEntity, + data: ConfirmedDetailEntity, onBackBtnClick: () -> Unit = {} ) { val rearrangeList = RearrangeList() @@ -71,7 +72,12 @@ fun ScheduleDetailScreen( horizontalArrangement = Arrangement.spacedBy(13.dp) ) { Text( - text = data.date, + text = CalculateTimeFromString().extractDateWithSlash(data.date), + color = NoostakTheme.colors.black, + style = NoostakTheme.typography.b4SemiBold + ) + Text( + text = CalculateTimeFromString().extractHourWithZero(data.date), color = NoostakTheme.colors.black, style = NoostakTheme.typography.b4SemiBold ) @@ -129,14 +135,14 @@ fun ScheduleDetailScreen( fun ScheduleDetailScreenPreview() { NoostakAndroidTheme { ScheduleDetailScreen( - AppointmentDetailEntity( + ConfirmedDetailEntity( myIdentity = IdentityEntity( availability = "available", position = 0, name = "김언지" ), appointmentName = "누스탁 전체회의 호이호이호이호이호이", - date = "1월 13일 (월)", + date = "2024-09-07T00:00:00", startTime = "1/13 21:00", endTime = "1/13 21:00", category = "기타", From 1863ef41e3a54a011d747aeec406300ebe0c480b Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:58:51 +0900 Subject: [PATCH 20/24] =?UTF-8?q?#79=20[MOD]=20ktlint=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/appointment/screen/RecommendationScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/presentation/src/main/java/com/sopt/presentation/appointment/screen/RecommendationScreen.kt b/presentation/src/main/java/com/sopt/presentation/appointment/screen/RecommendationScreen.kt index 54dfa08f..cceb3f50 100644 --- a/presentation/src/main/java/com/sopt/presentation/appointment/screen/RecommendationScreen.kt +++ b/presentation/src/main/java/com/sopt/presentation/appointment/screen/RecommendationScreen.kt @@ -41,8 +41,8 @@ import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.extension.noRippleClickable import com.sopt.core.extension.showIf -import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.core.util.RearrangeList +import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.domain.entity.IdentityEntity import com.sopt.domain.entity.OptionEntity import com.sopt.domain.entity.RecommendationPriorityEntity From b14994f278711fe68db47d5eb60c2c55be591a07 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:58:55 +0900 Subject: [PATCH 21/24] =?UTF-8?q?#79=20[MOD]=20ktlint=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../groupDetail/confirmedDetail/ConfirmedDetailRoute.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/presentation/src/main/java/com/sopt/presentation/groupDetail/confirmedDetail/ConfirmedDetailRoute.kt b/presentation/src/main/java/com/sopt/presentation/groupDetail/confirmedDetail/ConfirmedDetailRoute.kt index b48d6a72..9921f49f 100644 --- a/presentation/src/main/java/com/sopt/presentation/groupDetail/confirmedDetail/ConfirmedDetailRoute.kt +++ b/presentation/src/main/java/com/sopt/presentation/groupDetail/confirmedDetail/ConfirmedDetailRoute.kt @@ -38,8 +38,8 @@ import com.sopt.core.designsystem.screen.NoostakLoadingScreen import com.sopt.core.designsystem.theme.NoostakAndroidTheme import com.sopt.core.designsystem.theme.NoostakTheme import com.sopt.core.state.UiState -import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.core.util.RearrangeList +import com.sopt.core.util.time.CalculateTimeFromString import com.sopt.domain.entity.ConfirmedDetailEntity import com.sopt.presentation.R From 2d643277b6145cd5b782f864ad86ac546e6cc735 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 01:59:32 +0900 Subject: [PATCH 22/24] =?UTF-8?q?#79=20[MOD]=20ktlint=20=EC=A0=81=EC=9A=A9?= =?UTF-8?q?,=20getConfirmedDetail,=20DataErrorDialog=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/CalendarViewModel.kt | 73 ++++++++----------- 1 file changed, 29 insertions(+), 44 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt index 340d7798..ab93328d 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt @@ -4,15 +4,12 @@ import androidx.lifecycle.viewModelScope import com.sopt.core.extension.toDateString import com.sopt.core.state.UiState import com.sopt.core.util.BaseViewModel -import com.sopt.domain.entity.AppointmentDetailEntity import com.sopt.domain.entity.CalendarAppointmentDayEntity import com.sopt.domain.entity.CalendarAppointmentEntity import com.sopt.domain.entity.CalendarSchedule -import com.sopt.domain.repository.AppointmentConfirmRepository +import com.sopt.domain.entity.ConfirmedDetailEntity import com.sopt.domain.entity.GroupEntity -import com.sopt.domain.entity.IdentityEntity -import com.sopt.domain.entity.ScheduleDetailEntity -import com.sopt.domain.entity.ScheduleEntity +import com.sopt.domain.repository.GroupDetailRepository import com.sopt.domain.usecase.GetCalendarAppointmentsUseCase import com.sopt.domain.usecase.GetCalendarGroupsUseCase import dagger.hilt.android.lifecycle.HiltViewModel @@ -29,7 +26,7 @@ import javax.inject.Inject @HiltViewModel class CalendarViewModel @Inject constructor( private val getCalendarAppointmentsUseCase: GetCalendarAppointmentsUseCase, - private val appointmentConfirmRepository: AppointmentConfirmRepository, + private val groupDetailRepository: GroupDetailRepository, private val getCalendarGroupsUseCase: GetCalendarGroupsUseCase ) : BaseViewModel() { @@ -38,7 +35,7 @@ class CalendarViewModel @Inject constructor( val getGroupsState: StateFlow>> get() = _getGroupsState.asStateFlow() private val _selectedGroupId = MutableStateFlow(null) - private val selectedGroupId: StateFlow get() = _selectedGroupId + val selectedGroupId: StateFlow get() = _selectedGroupId private val _showAddDialog = MutableStateFlow(false) val showAddDialog get() = _showAddDialog @@ -46,6 +43,9 @@ class CalendarViewModel @Inject constructor( private val _showBottomSheet = MutableStateFlow(false) val showBottomSheet: StateFlow get() = _showBottomSheet + private val _showDataErrorDialog = MutableStateFlow(false) + val showDataErrorDialog: StateFlow get() = _showDataErrorDialog + private val _scheduleMap = MutableStateFlow>>(emptyMap()) val scheduleMap: StateFlow>> get() = _scheduleMap @@ -57,29 +57,32 @@ class CalendarViewModel @Inject constructor( private var _currentMonthAppointments = emptyList() - private val _getConfirmedState: MutableStateFlow> = - MutableStateFlow(UiState.Empty) - val getConfirmedState: StateFlow> = - _getConfirmedState.asStateFlow() + private val _getConfirmedDetailState = + MutableStateFlow>(UiState.Empty) + val getConfirmedDetailState: StateFlow> = + _getConfirmedDetailState.asStateFlow() init { getGroups() } - fun getOptionDetail(appointmentOptionId: Long) { + fun getConfirmedDetail(appointmentId: Long) { viewModelScope.launch { - _getConfirmedState.emit(UiState.Loading) - appointmentConfirmRepository.getOptionDetail(appointmentOptionId).fold( - onSuccess = { - _getConfirmedState.emit(UiState.Success(it)) - }, - onFailure = { - _getConfirmedState.emit(UiState.Failure(it.message.toString())) + _getConfirmedDetailState.emit(UiState.Loading) + groupDetailRepository.getConfirmedDetail(appointmentId) + .onSuccess { + _getConfirmedDetailState.emit(UiState.Success(it)) + }.onFailure { + triggerDataErrorDialog() + _getConfirmedDetailState.emit(UiState.Failure(it.message.toString())) } - ) } } + fun showDataErrorDialog(show: Boolean) { + _showDataErrorDialog.update { show } + } + fun showAddDialog(show: Boolean) { _showAddDialog.update { show } } @@ -88,6 +91,10 @@ class CalendarViewModel @Inject constructor( _showBottomSheet.update { show } } + private fun triggerDataErrorDialog() { + emitSideEffect(CalendarSideEffect.ShowDataErrorDialog) + } + private fun triggerShowBottomSheet() { emitSideEffect(CalendarSideEffect.ShowBottomSheet) } @@ -126,30 +133,8 @@ class CalendarViewModel @Inject constructor( getCalendarAppointments(currentYearMonth.year, currentYearMonth.monthValue) } - // 캘린더 약속 정보 가져오기 private fun getCalendarAppointments(year: Int, month: Int) { viewModelScope.launch { - getCalendarAppointmentsUseCase(10006, year, month) - .fold( - onSuccess = { response -> - val newScheduleMap = - response.currentMonthAppointments.associate { dayAppointments -> - LocalDate.of(year, month, dayAppointments.day) - .toDateString() to dayAppointments.appointments.map { appointment -> - CalendarSchedule( - scrapId = appointment.id, - title = appointment.name, - categoryType = appointment.category - ) - } - } - _scheduleMap.value = newScheduleMap - _currentMonthAppointments = response.currentMonthAppointments - }, - onFailure = { error -> - Timber.e("getCalendarAppointments Failed: ${error.message}") - } - ) selectedGroupId.value?.let { getCalendarAppointmentsUseCase(it, year, month) .fold( @@ -189,8 +174,8 @@ class CalendarViewModel @Inject constructor( val appointments = _currentMonthAppointments .firstOrNull { it.day == date.dayOfMonth && - currentYearMonth.year == date.year && - currentYearMonth.monthValue == date.monthValue + currentYearMonth.year == date.year && + currentYearMonth.monthValue == date.monthValue }?.appointments ?: emptyList() _selectedDayAppointments.value = appointments From d3ab49bd3da217ae2bcb44884be053d4bc5082a8 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Wed, 9 Apr 2025 02:03:44 +0900 Subject: [PATCH 23/24] =?UTF-8?q?#79=20[MOD]=20GroupCreate=20name=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/presentation/groupCreate/GroupCreateViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/presentation/src/main/java/com/sopt/presentation/groupCreate/GroupCreateViewModel.kt b/presentation/src/main/java/com/sopt/presentation/groupCreate/GroupCreateViewModel.kt index 699e6bc7..682b8077 100644 --- a/presentation/src/main/java/com/sopt/presentation/groupCreate/GroupCreateViewModel.kt +++ b/presentation/src/main/java/com/sopt/presentation/groupCreate/GroupCreateViewModel.kt @@ -86,7 +86,7 @@ class GroupCreateViewModel @Inject constructor( private fun validateGroupName(groupName: String) { viewModelScope.launch { - _groupProfileState.update { it.copy(isGroupNameCheck = groupName.length in 1..30) } + _groupProfileState.update { it.copy(isGroupNameCheck = groupName.isNotBlank() && groupName.length in 1..30) } } } } From e8a49ca8ab047df03929018ada86e4a0fe39d026 Mon Sep 17 00:00:00 2001 From: Eonji-sw Date: Thu, 10 Apr 2025 16:55:27 +0900 Subject: [PATCH 24/24] =?UTF-8?q?#79=20[MOD]=20fold=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/calendar/CalendarViewModel.kt | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt index ab93328d..4048fc9d 100644 --- a/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt +++ b/presentation/src/main/java/com/sopt/presentation/calendar/CalendarViewModel.kt @@ -70,12 +70,11 @@ class CalendarViewModel @Inject constructor( viewModelScope.launch { _getConfirmedDetailState.emit(UiState.Loading) groupDetailRepository.getConfirmedDetail(appointmentId) - .onSuccess { - _getConfirmedDetailState.emit(UiState.Success(it)) - }.onFailure { - triggerDataErrorDialog() - _getConfirmedDetailState.emit(UiState.Failure(it.message.toString())) - } + .fold(onSuccess = { _getConfirmedDetailState.emit(UiState.Success(it)) }, + onFailure = { + triggerDataErrorDialog() + _getConfirmedDetailState.emit(UiState.Failure(it.message.toString())) + }) } } @@ -174,8 +173,8 @@ class CalendarViewModel @Inject constructor( val appointments = _currentMonthAppointments .firstOrNull { it.day == date.dayOfMonth && - currentYearMonth.year == date.year && - currentYearMonth.monthValue == date.monthValue + currentYearMonth.year == date.year && + currentYearMonth.monthValue == date.monthValue }?.appointments ?: emptyList() _selectedDayAppointments.value = appointments