Conversation
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. Walkthrough날짜 선택 및 여행 팔로우 기능을 추가하는 대규모 업데이트입니다. 새로운 DatePicker 및 FollowTravel 화면 모듈, 구글 맵스 통합, 로컬라이제이션을 위한 한국어 문자열 리소스, 그리고 기존 TravelDetail을 FollowTravel로 대체하는 네비게이션 재구성이 포함됩니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant DatePickerScreen
participant DatePickerViewModel
participant DatePickerRoute
User->>DatePickerScreen: 화면 표시
DatePickerScreen->>DatePickerRoute: 초기 상태 구독
DatePickerRoute->>DatePickerViewModel: initialState 조회
User->>DatePickerScreen: 날짜 선택
DatePickerScreen->>DatePickerRoute: selectDate(date) 콜백 호출
DatePickerRoute->>DatePickerViewModel: handleIntent(SelectDate)
DatePickerViewModel->>DatePickerViewModel: 범위 선택 로직 처리<br/>(startDate, endDate 설정)
DatePickerViewModel->>DatePickerRoute: 업데이트된 상태 방출
DatePickerRoute->>DatePickerScreen: 새로운 상태로 UI 갱신
User->>DatePickerScreen: 완료 버튼 클릭
DatePickerScreen->>DatePickerRoute: clickCompleteButton() 호출
DatePickerRoute->>DatePickerViewModel: handleIntent(ClickCompleteButton)
DatePickerViewModel->>DatePickerViewModel: showDialog = true
User->>DatePickerScreen: 모달 확인 클릭
DatePickerScreen->>DatePickerRoute: clickTravelButton() 호출
DatePickerRoute->>DatePickerViewModel: handleIntent(ClickViewTravelButton)
DatePickerViewModel->>DatePickerRoute: NavigateToTravelDetail 사이드이펙트
DatePickerRoute->>User: FollowTravel 화면으로 네비게이션
sequenceDiagram
participant User
participant FollowTravelScreen
participant FollowTravelRoute
participant FollowTravelViewModel
participant TravelMap
User->>FollowTravelRoute: 여행 ID로 화면 진입
FollowTravelRoute->>FollowTravelViewModel: travelId 파라미터로 생성
FollowTravelViewModel->>FollowTravelViewModel: loadTravelData()<br/>(ContentInfo, Itineraries 로드)
FollowTravelViewModel->>FollowTravelRoute: 초기화된 상태 제공
FollowTravelRoute->>FollowTravelScreen: 상태 및 콜백 전달
User->>FollowTravelScreen: 특정 일자 탭 선택
FollowTravelScreen->>FollowTravelRoute: selectDay(dayIndex) 콜백
FollowTravelRoute->>FollowTravelViewModel: handleIntent(SelectDay)
FollowTravelViewModel->>FollowTravelRoute: selectedDay 업데이트
FollowTravelRoute->>FollowTravelScreen: 상태 갱신
FollowTravelScreen->>TravelMap: 선택된 일자의 장소 리스트 전달
TravelMap->>User: 지도상 경로 및 마커 렌더링
User->>FollowTravelScreen: 팔로우 버튼 클릭
FollowTravelScreen->>FollowTravelRoute: clickFollowTravel() 콜백
FollowTravelRoute->>FollowTravelViewModel: handleIntent(ClickFollowTravel)
FollowTravelViewModel->>FollowTravelRoute: 사이드이펙트 발생
FollowTravelRoute->>User: 다음 화면으로 네비게이션
Estimated code review effort🎯 4 (Complex) | ⏱️ ~55 분 Possibly related PRs
🚥 Pre-merge checks | ✅ 2 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
6280f0d to
337b1ca
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Fix all issues with AI agents
In
`@feature/travel/src/main/java/com/yapp/ndgl/feature/travel/datepicker/component/CalendarView.kt`:
- Around line 150-154: The current Text uses dayOfWeek.name.take(3) which
returns English names; replace that with a localized display name by calling
dayOfWeek.getDisplayName(TextStyle.SHORT, Locale("ko")) (or Locale.KOREA) inside
the Text composable so Korean abbreviations like "일", "월" are shown; update
imports to include java.time.format.TextStyle and java.util.Locale and keep the
existing styling and color logic that references dayOfWeek (the Text in
CalendarView.kt that currently uses dayOfWeek.name.take(3)...).
In
`@feature/travel/src/main/java/com/yapp/ndgl/feature/travel/datepicker/DatePickerScreen.kt`:
- Around line 74-78: The TODO inside viewModel.collectSideEffect is blocking
navigation for DatePickerSideEffect.NavigateToTravelDetail; implement that
branch to call the external navigation callback (e.g., navigateToTravelDetail)
or invoke the NavController/navigation lambda passed into DatePickerScreen so
the modal's "여행 보기" action actually navigates; update the DatePickerScreen
constructor/call site to accept and forward a navigateToTravelDetail callback if
missing and call it from the DatePickerSideEffect.NavigateToTravelDetail
handling in collectSideEffect.
In `@gradle/libs.versions.toml`:
- Line 25: Update the kotlinx-datetime dependency entry named "kotlinxDatetime"
in libs.versions.toml by replacing the version string "0.6.1" with "0.7.1" (or
at minimum "0.6.2" if you need a smaller change); ensure the single source of
truth for the version (kotlinxDatetime = "...") is updated so all modules using
the kotlinxDatetime reference pick up the new version.
🧹 Nitpick comments (3)
feature/travel/src/main/java/com/yapp/ndgl/feature/travel/datepicker/component/CalendarView.kt (2)
103-104: 접근성: contentDescription을 문자열 리소스로 분리하세요.현재 "Previous Month", "Next Month"가 영어로 하드코딩되어 있습니다. 다국어 지원 및 접근성을 위해 strings.xml에 리소스로 추가하는 것이 좋습니다.
♻️ 제안된 수정
strings.xml에 추가:
<string name="calendar_previous_month">이전 달</string> <string name="calendar_next_month">다음 달</string>CalendarView.kt에서 사용:
Icon( painter = painterResource(R.drawable.ic_24_chevron_left), - contentDescription = "Previous Month", + contentDescription = stringResource(R.string.calendar_previous_month), modifier = Modifier.clickable(onClick = onPreviousMonth), tint = NDGLTheme.colors.black400, ) ... Icon( painter = painterResource(R.drawable.ic_24_chevron_right), - contentDescription = "Next Month", + contentDescription = stringResource(R.string.calendar_next_month), modifier = Modifier.clickable(onClick = onNextMonth), tint = NDGLTheme.colors.black400, )Also applies to: 109-111
140-142: LazyVerticalGrid 높이 제한 고려
LazyVerticalGrid가Column내에서 높이 제약 없이 사용되고 있습니다. 캘린더는 최대 6주 + 헤더 행으로 제한되므로, 명시적인 높이 설정을 통해 성능과 레이아웃 안정성을 개선할 수 있습니다.♻️ 제안된 수정
LazyVerticalGrid( columns = GridCells.Fixed(7), - modifier = Modifier.fillMaxWidth(), + modifier = Modifier + .fillMaxWidth() + .heightIn(max = 350.dp), // 적절한 최대 높이 설정 )feature/travel/src/main/java/com/yapp/ndgl/feature/travel/datepicker/DatePickerContract.kt (1)
13-15: 현재 년/월 계산을 한 번에 고정하는 편이 안전합니다.
now()를 두 번 호출하면 월/년 경계(예: 12/31→1/1)에서 불일치가 생길 수 있어요. ViewModel에서now를 한 번 계산해currentYear/currentMonth를 넘기는 방식도 고려해주세요.
337b1ca to
fe07b30
Compare
99fa92b to
a5c1da5
Compare
c55d440 to
590d057
Compare
c9c0269 to
e23c4ae
Compare
c5d9ac0 to
2daaeef
Compare
e6e34e3 to
1b0fc4a
Compare
2daaeef to
72d2990
Compare
72d2990 to
12e75c7
Compare
개요
디자인
https://www.figma.com/design/qHn9o58ENLeHjiBWNuZFJx/Design_-YAPP-1%ED%8C%80-?node-id=2044-4970&t=ZStfQoOkSrncjY0d-0
변경사항
테스트 체크 리스트
Summary by CodeRabbit
새로운 기능
개선 사항