Skip to content

Conversation

@jinukeu
Copy link
Member

@jinukeu jinukeu commented Oct 23, 2025

💡 Issue

🌱 Key changes

  • 네비게이션 애니메이션 적용했습니다. 한번 봐주세요.
  • 기타 잔버그 수정했습니다.

✅ To Reviewers

📸 스크린샷

스크린샷
파일첨부바람

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 화면 전환 시 페이드 및 슬라이드 애니메이션 적용으로 네비게이션 경험 개선
    • 세션 상세 정보 화면 진입 시 애니메이션 효과 추가
  • 개선 사항

    • 세션 날짜 표시 아이콘을 시계에서 캘린더로 변경
    • UI 레이아웃 최적화
    • 서버 API 업데이트로 세션 정보 제공 개선

@jinukeu jinukeu self-assigned this Oct 23, 2025
@jinukeu jinukeu added the Feature 기능 추가, 개발 label Oct 23, 2025
@coderabbitai
Copy link

coderabbitai bot commented Oct 23, 2025

Important

Review skipped

Auto reviews are limited based on label configuration.

🏷️ Required labels (at least one) (1)
  • CodeRabbit

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

세션 상세 정보 API를 v1에서 v2로 업데이트하고, 날짜/시간 필드를 개별 문자열에서 LocalDateTime으로 통합했습니다. 네비게이션 애니메이션을 추가하고, SessionScreen UI를 조정하며, 예외 처리를 개선했습니다.

Changes

코호트 / 파일 변경 요약
네비게이션 애니메이션
app/src/main/java/com/yapp/app/official/navigation/NavigationAnimations.kt
4개의 새로운 확장 함수 추가: yappEnterTransition(), yappExitTransition(), yappPopEnterTransition(), yappPopExitTransition(). 200ms 트윈 애니메이션으로 슬라이드 및 페이드 효과 구현
네비게이션 호스트
app/src/main/java/com/yapp/app/official/navigation/YappNavHost.kt
NavHost 호출에서 None 전환을 yappEnterTransition/yappExitTransition/yappPopEnterTransition/yappPopExitTransition으로 변경
API 및 데이터 모델
core/data/src/main/java/com/yapp/core/data/remote/api/ScheduleApi.kt, core/data/src/main/java/com/yapp/core/data/remote/model/response/SessionDetailResponse.kt, core/model/src/main/java/com/yapp/model/SessionDetailInfo.kt
ScheduleApi 경로를 v1에서 v2로 업데이트. SessionDetailResponse와 SessionDetailInfo의 개별 startDate/startTime/endDate/endTime 필드를 startDateTime/endDateTime LocalDateTime으로 통합
예외 처리
core/model/src/main/java/com/yapp/model/exceptions/YappExceptions.kt, feature/home/src/main/java/com/yapp/feature/home/HomeViewModel.kt
UndefineNoticeWriterInfo 예외 추가. HomeViewModel에서 해당 예외 처리 추가
날짜/시간 유틸리티
core/ui/src/main/java/com/yapp/core/ui/util/DateTime.kt
formatSessionDateTime 함수 시그니처 변경: 개별 문자열 인자에서 LocalDateTime 인자로 변환. 같은 날짜/다른 날짜 세션에 따른 포맷팅 로직 수정
기능 업데이트
feature/session/src/main/java/com/yapp/feature/session/SessionContract.kt, feature/session/src/main/java/com/yapp/feature/session/SessionViewModel.kt, feature/session/src/main/java/com/yapp/feature/session/SessionScreen.kt
SessionState의 isLoading 기본값을 false에서 true로 변경. sessionDateTime 계산 로직 업데이트. SessionViewModel에 EnterSessionScreen 가드 조건 추가. SessionScreen에 350ms 지연 및 UI 조정(아이콘, 정렬) 추가
일정 UI 조정
feature/schedule/src/main/java/com/yapp/feature/schedule/component/DateGroupedScheduleItem.kt
showMonth가 false일 때 날짜 표시 너비를 58.dp에서 60.dp로 조정

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • TaeseongYun
  • DongChyeon
  • ashwon12

Poem

🐰 시간을 하나로 모아,
날짜는 깔끔하게,
슬라이드 애니메이션 휘날리며,
API는 버전을 올려 질주하고,
세션 상세함이 반짝인다! ✨

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings, 1 inconclusive)
Check name Status Explanation Resolution
Out of Scope Changes Check ⚠️ Warning 이슈 #227의 명시된 범위를 벗어나는 여러 변경사항이 있습니다. NavigationAnimations.kt에서 4개의 새로운 애니메이션 함수를 추가하고 YappNavHost에 적용한 것은 세션 상세 기능과 직접적인 관련이 없습니다. 또한 UndefineNoticeWriterInfo 예외 클래스 추가, SessionViewModel의 로딩 상태 가드 추가, SessionContract의 isLoading 기본값 변경, DateGroupedScheduleItem 너비 조정 등도 이슈에 명시되지 않은 변경사항입니다. PR 설명에 "기타 작업"이라고 표시되었으나, 이러한 변경들은 이슈 #227의 핵심 범위를 벗어나 있습니다. 범위 벗어난 변경사항들을 별도의 PR이나 이슈로 분리하기를 권장합니다. 특히 네비게이션 애니메이션은 독립적인 기능으로 별도 PR에서 처리하는 것이 더 적절해 보입니다. 혹은 이슈 #227을 확장하여 이러한 추가 작업들을 명시적으로 포함시키거나, 각 변경사항이 세션 상세 기능과 어떤 관련이 있는지 명확하게 문서화하기를 권장합니다.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title Check ❓ Inconclusive PR 제목 "Feature/#227 세션 상세 남은 작업 및 기타 작업"은 "남은 작업"과 "기타 작업"이라는 비설명적인 용어를 사용하고 있습니다. 실제 변경 사항은 v2 API 적용, 날짜/시간 필드 구조 개선, 네비게이션 애니메이션 추가 등 여러 구체적인 작업들이 포함되어 있으나, 제목은 이러한 내용을 명확하게 반영하지 못하고 있어 스캔만으로는 주요 변경 내용을 파악하기 어렵습니다. PR 제목을 더욱 구체적이고 설명적으로 수정하기를 권장합니다. 예를 들어 "세션 상세: v2 API 적용 및 날짜 UI 개선" 또는 "세션 상세: LocalDateTime 기반 날짜 처리 및 네비게이션 애니메이션" 같이 주요 변경 내용을 명확하게 반영하는 제목이 더 적절합니다.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues Check ✅ Passed 이슈 #227의 주요 목표인 "세션 상세 기능 v2 API 적용"과 "날짜 관련 UI 변경"이 모두 구현되었습니다. ScheduleApi.kt에서 v1 API를 v2로 업데이트했고, SessionDetailResponse, SessionDetailInfo, DateTime 포매팅 함수 등을 개선하여 새로운 LocalDateTime 기반 구조를 적용했으며, SessionScreen에서 UI를 개선했습니다. 이슈에서 명시된 코딩 요구사항들이 충실하게 구현되어 있습니다.

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@jinukeu
Copy link
Member Author

jinukeu commented Oct 23, 2025

@coderabbitai review

@coderabbitai
Copy link

coderabbitai bot commented Oct 23, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
core/data/src/main/java/com/yapp/core/data/remote/model/response/SessionDetailResponse.kt (1)

24-37: Repository 레이어에서 날짜 파싱 예외 처리 필요

검증 결과, 지적 사항이 정당합니다.

  • ScheduleRepositoryImpl.kt 74번 줄에서 toSessionDetailInfo() 호출 시 try-catch 없음
  • SessionDetailResponse.kt 29-30번 줄의 LocalDateTime.parse() 호출에서 DateTimeParseException 발생 가능
  • 예외가 ViewModel의 runCatchingIgnoreCancelled에서는 처리되지만, Repository 레이어 자체에 명시적 예외 처리가 없음

데이터 변환 오류는 발생 지점인 Repository 레이어에서 처리해야 합니다. ViewModel이 예외를 처리하기 전에 Repository에서 명확한 예외 처리를 추가하는 것을 권장합니다.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1837076 and 6063392.

📒 Files selected for processing (12)
  • app/src/main/java/com/yapp/app/official/navigation/NavigationAnimations.kt (1 hunks)
  • app/src/main/java/com/yapp/app/official/navigation/YappNavHost.kt (1 hunks)
  • core/data/src/main/java/com/yapp/core/data/remote/api/ScheduleApi.kt (1 hunks)
  • core/data/src/main/java/com/yapp/core/data/remote/model/response/SessionDetailResponse.kt (2 hunks)
  • core/model/src/main/java/com/yapp/model/SessionDetailInfo.kt (1 hunks)
  • core/model/src/main/java/com/yapp/model/exceptions/YappExceptions.kt (2 hunks)
  • core/ui/src/main/java/com/yapp/core/ui/util/DateTime.kt (1 hunks)
  • feature/home/src/main/java/com/yapp/feature/home/HomeViewModel.kt (3 hunks)
  • feature/schedule/src/main/java/com/yapp/feature/schedule/component/DateGroupedScheduleItem.kt (1 hunks)
  • feature/session/src/main/java/com/yapp/feature/session/SessionContract.kt (1 hunks)
  • feature/session/src/main/java/com/yapp/feature/session/SessionScreen.kt (3 hunks)
  • feature/session/src/main/java/com/yapp/feature/session/SessionViewModel.kt (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: ci_dev (test, ./gradlew clean testDebugUnitTest) / build_check
  • GitHub Check: ci_dev (build, ./gradlew app:assembleDebug) / build_check
🔇 Additional comments (13)
feature/schedule/src/main/java/com/yapp/feature/schedule/component/DateGroupedScheduleItem.kt (1)

57-57: 날짜 영역 너비 조정을 확인해 주세요.

showMonth가 false일 때 날짜 영역 너비를 58.dp에서 60.dp로 2dp 증가시켰습니다. v2 API 마이그레이션 및 날짜 포맷 변경에 따른 조정으로 보입니다.

다양한 날짜 형식과 로케일에서 날짜 텍스트가 잘 정렬되고 잘리지 않는지 시각적으로 확인해 주세요.

core/model/src/main/java/com/yapp/model/exceptions/YappExceptions.kt (1)

30-30: 새로운 예외 타입 추가가 적절합니다.

BRD_1001 매핑과 UndefineNoticeWriterInfo 예외 클래스가 올바르게 추가되었으며, 다른 예외들과 일관된 패턴을 따르고 있습니다.

Also applies to: 59-59

feature/home/src/main/java/com/yapp/feature/home/HomeViewModel.kt (1)

21-21: 예외 처리가 적절합니다.

UndefineNoticeWriterInfo를 no-op으로 처리하는 것은 다른 비중요 예외들(NoScheduledSessionException, NotFoundException)과 일관된 패턴을 따르고 있습니다.

Also applies to: 153-153, 177-177

feature/session/src/main/java/com/yapp/feature/session/SessionScreen.kt (1)

179-192: UI 개선이 적절합니다.

날짜/시간 표시 영역의 변경사항들이 올바릅니다:

  • Alignment.Top으로 변경하여 여러 줄 텍스트의 정렬 개선
  • 시계 아이콘에서 달력 아이콘으로 변경하여 날짜 중심의 정보 표시에 더 적합
app/src/main/java/com/yapp/app/official/navigation/YappNavHost.kt (1)

31-34: 네비게이션 애니메이션 추가가 적절합니다.

기존의 None 트랜지션을 커스텀 애니메이션으로 교체하여 일관된 화면 전환 효과를 제공합니다. Forward 및 Pop 네비게이션 모두에 대한 트랜지션이 정의되어 있어 완전한 구현입니다.

core/data/src/main/java/com/yapp/core/data/remote/api/ScheduleApi.kt (1)

31-34: API 버전 업그레이드가 올바릅니다.

세션 상세 엔드포인트를 v2로 업그레이드하여 새로운 날짜/시간 형식(startDateTime, endDateTime)을 지원합니다. 메서드 시그니처는 변경되지 않아 호출 코드에 영향이 없습니다.

core/model/src/main/java/com/yapp/model/SessionDetailInfo.kt (1)

5-16: 리뷰 댓글이 부정확합니다.

검색 결과에 따르면, SessionDetailInfo의 필드 변경은 국한된 모델 변경이며 광범위한 공개 API 변경이 아닙니다.

이전 필드명(startDate, startTime, endDate, endTime, startDayOfWeek, endDayOfWeek)의 사용은 ScheduleInfo, UpcomingSessionInfo, Sessions다른 모델에만 남아 있습니다. SessionDetailInfoSessionContract.kt, SessionDetailResponse.kt, ScheduleRepositoryImpl.kt, ScheduleRepository.kt 총 4개 파일에서만 참조되며, 모두 새로운 LocalDateTime 필드와 호환되게 처리되어 있습니다.

따라서 변경사항은 이미 적절히 격리되어 있으며, 추가적인 전체 업데이트 확인이 필요하지 않습니다.

Likely an incorrect or invalid review comment.

app/src/main/java/com/yapp/app/official/navigation/NavigationAnimations.kt (3)

14-22: 진입 트랜지션 정의 적절 — 기본 방향/페이드 조합 LGTM

표준화된 200ms tween과 페이드인이 명확합니다.


35-44: Pop 진입 initialOffset 타입도 동일 이슈 가능

위와 같은 이유로 Compose 버전에 따라 IntOffset이 필요할 수 있습니다.

대안 패치:

+import androidx.compose.ui.unit.IntOffset
@@
-        initialOffset = { (it * 0.3f).toInt() }
+        initialOffset = { fullSize -> IntOffset((fullSize.width * 0.3f).toInt(), 0) }

24-33: 리뷰 코멘트 무효화: slideOutOfContainer API 시그니처는 Int 파라미터 사용

현재 코드는 정확하며 문제가 없습니다. 리뷰의 우려사항이 부정확합니다.

Compose 2024.12.01에서 slideOutOfContainer()targetOffset 파라미터는 (offsetForFullSlide: Int) -> Int 시그니처를 사용합니다. 제안된 IntOffset 사용은 다른 함수(slideOut, slideIn)와 혼동한 것입니다:

  • 현재 코드: targetOffset = { (it * 0.3f).toInt() } — 정확함 ✓
  • 리뷰 제안: IntOffset(...)을 사용하는 수정안 — 잘못됨 (컴파일 실패)

it은 정수형 오프셋 값이며, 람다는 정수를 반환해야 합니다. 코드는 컴파일되고 정상 작동합니다.

Likely an incorrect or invalid review comment.

core/ui/src/main/java/com/yapp/core/ui/util/DateTime.kt (1)

124-126: API 브레이킹 변경 마이그레이션 완료 확인됨

호출처 검색 결과, formatSessionDateTime은 단 하나의 호출처(feature/session/.../SessionContract.kt:12)에서만 사용되고 있으며, 이미 새로운 서명(LocalDateTime 파라미터)으로 마이그레이션되어 있습니다. 미마이그레이션 호출처는 없습니다.

feature/session/src/main/java/com/yapp/feature/session/SessionContract.kt (2)

19-29: SessionIntent.Refresh 제거 확인 완료 - 추가 조치 불필요

코드베이스 전체를 검증한 결과, SessionIntent.Refresh 제거가 완벽하게 이루어졌습니다. SessionViewModel의 onIntent() 메서드에서 모든 현재 인텐트를 처리하고 있으며, SessionScreen에는 pull-to-refresh나 재시도 버튼이 없습니다. 잔존 참조가 없으므로 추가 조치가 필요하지 않습니다.


7-7: Based on my analysis of the script results and web search findings, I can now generate the rewritten review comment.

초기 로딩 상태 기본값 검증 완료 — 중복 호출 방지 로직 정상

초기 진입 시 isLoading = true로 설정된 상태에서, SessionIntent.EnterSessionScreen 핸들러의 가드 조건 if (state.isLoading.not()) return은 올바르게 작동합니다. 첫 호출 시 true.not()은 false이므로 조건이 통과되어 loadSessionDetail을 실행하고, 로딩 완료 후 isLoading이 false로 전환되면 재호출 시 조건이 true가 되어 조기 반환되므로 중복 호출이 자동으로 방지됩니다. 현재의 로직은 의도대로 작동하고 있습니다.

Copy link
Member

@DongChyeon DongChyeon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

애니메이션 확인했고 디자인 하나만 수정해주세요!
지금 봤는데 세션 화면 스켈레톤 UI 예쁘네요...

Comment on lines 73 to 74
// 애니메이션이 완료된 후 API 호출 시작 (300ms 애니메이션 + 약간의 여유)
kotlinx.coroutines.delay(350)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C: 요거는 SessionScreen 뿐만 아니라 나머지 화면에서도 처리해야되는 건가요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아뇽! SessionScreen 에서만 Navigation 이동 시에 프레임 드랍이 심하게 발생해서 넣었어요
나머지 화면에서는 그대로 둬도 괜찮을거같아용

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image image

R: 세션의 날짜와 시간이 분리되어야 할 것 같아요

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

이게 최종 디자인이라, 제 디자인이 맞는거같아용!

Copy link
Member

@DongChyeon DongChyeon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다! 수고하셨습니다

날짜와 시간을 별도 줄로 분리하여 가독성 향상
- formatSessionDateTime 함수를 Pair<String, String> 반환으로 수정
- SessionState에서 sessionDateTimePair 필드로 변경
- UI에서 날짜와 시간 사이 4.dp 간격 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
@jinukeu
Copy link
Member Author

jinukeu commented Oct 25, 2025

@DongChyeon 커밋 하나 더했는데 요것만 다시 한번 리뷰 부탁드립니닷 ... !!

@jinukeu jinukeu requested a review from DongChyeon October 25, 2025 01:19
@DongChyeon
Copy link
Member

@DongChyeon 커밋 하나 더했는데 요것만 다시 한번 리뷰 부탁드립니닷 ... !!

확인했습니다!
이미 Approve한 상태라서 코멘트로 남겨요

@jinukeu jinukeu merged commit ebdfff8 into develop Oct 25, 2025
4 checks passed
@jinukeu jinukeu deleted the feature/#227-session-detail branch October 25, 2025 03:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feature 기능 추가, 개발

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 세션 상세 기능 v2 api, 날짜 관련 ui 변경

3 participants