Skip to content

Conversation

@jinukeu
Copy link
Member

@jinukeu jinukeu commented Sep 7, 2025

💡 Issue

🌱 Key changes

  • 우선 UI만 구현했습니다. 다음 PR에서는 지도 api 달아볼 생각이에용
  • codex 사용해서 AGENTS.md 파일이 추가되었어요 (codex 좋네요 ㅎ)

✅ To Reviewers

📸 스크린샷

스크린샷
image

Summary by CodeRabbit

  • 신기능

    • 세션 화면 추가: 헤더/뒤로가기, 상태 칩, 일정·위치 정보, 지도 플레이스홀더, 액션 아이콘, 공지 목록, 스크롤 대응 그라데이션 표시.
    • 세션 화면으로의 내비게이션 경로 및 진입 API 제공.
    • 상단 그라데이션 UI 컴포넌트 추가.
  • 문서

    • 저장소 가이드 문서 추가(프로젝트 구조, 빌드/테스트 명령, 코딩 컨벤션, 테스트/보안, PR 규칙).
  • 작업(Chores)

    • 세션 모듈 신규 등록 및 앱에 의존성 추가, 빌드/프로가드 설정 및 무시 규칙 구성.
  • 리팩터링

    • 미리보기 가시성 조정(사용자 영향 없음).

@jinukeu jinukeu self-assigned this Sep 7, 2025
@coderabbitai
Copy link

coderabbitai bot commented Sep 7, 2025

Walkthrough

새로운 세션(feature: session) 모듈을 추가하고 네비게이션 경로와 화면(UI)을 구현했다. 앱 모듈에 의존성을 연결하고 settings에 서브프로젝트를 등록했다. 디자인시스템에 GradientTop 컴포저블을 추가하고 기존 GradientBottom 프리뷰 가시성을 private로 변경했다. 문서 AGENTS.md를 신규 추가했다.

Changes

Cohort / File(s) Summary
Documentation
AGENTS.md
저장소 가이드 문서 신규 추가(프로젝트 구조, 빌드/테스트, 코딩 규칙 등).
App wiring
app/build.gradle.kts, settings.gradle.kts
세션 모듈 의존성 추가(implementation(projects.feature.session)), 서브프로젝트 :feature:session 등록.
Design System: Gradients
core/designsystem/.../gradient/GradientTop.kt, core/designsystem/.../gradient/GradientBottom.kt
GradientTop 컴포저블 신규 추가; GradientBottomPreviewprivate로 변경.
Feature: Session module setup
feature/session/build.gradle.kts, feature/session/.gitignore, feature/session/consumer-rules.pro, feature/session/proguard-rules.pro, feature/session/src/main/AndroidManifest.xml
모듈 스켈레톤 설정(플러그인, 네임스페이스, 의존성), 빌드/프로가드 설정 파일 및 매니페스트 추가.
Feature: Session contracts & VM
feature/session/src/main/java/.../SessionContract.kt, feature/session/src/main/java/.../SessionViewModel.kt
MVI 계약(상태/인텐트/사이드이펙트) 추가, @HiltViewModel 기반 SessionViewModel과 인텐트 처리 로직(진입/새로고침) 구현.
Feature: Session screen
feature/session/src/main/java/.../SessionScreen.kt
세션 상세 화면 UI 구현(헤더, 상태 칩, 일정/장소 블록, 지도 placeholder, 액션 아이콘, 공지 리스트, 스크롤 그라디언트 처리). 라우트 컴포저블 제공.
Feature: Navigation
feature/session/src/main/java/.../navigation/SessionNavigation.kt
SessionRoute(serializable)와 NavController.navigateToSession, NavGraphBuilder.sessionNavGraph 추가.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User as 사용자
  participant App as App(navHost)
  participant Nav as NavController
  participant Route as SessionRoute
  participant VM as SessionViewModel
  participant Store as MviIntentStore
  participant UI as SessionScreen

  User->>App: 세션 상세 진입 트리거
  App->>Nav: navigateToSession()
  Nav->>Route: composable(SessionRoute)
  Route->>VM: hiltViewModel()
  Note over VM,Store: 초기 상태 생성(initialState=SessionState())
  Route->>Store: dispatch(EnterSessionScreen)
  Store->>VM: onIntent(EnterSessionScreen)
  VM->>Store: reduce { isLoading=false }
  Store-->>UI: state 전달
  UI-->>User: 세션 상세 화면 렌더링

  User->>UI: 당겨서 새로고침(예시)
  UI->>Store: dispatch(Refresh)
  Store->>VM: onIntent(Refresh)
  VM->>Store: reduce { isLoading=true }
  VM->>Store: reduce { isLoading=false } 
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Assessment against linked issues

Objective Addressed Explanation
세션 상세 UI 화면 구성 및 라우팅 연결 [#215]
세션 상세 화면 상태관리 골격(MVI, ViewModel) [#215]
실제 데이터 연동/로딩 처리 구현 [#215] TODO 자리표시 및 더미 UI만 확인됨.

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
저장소 운영 가이드 문서 추가 (AGENTS.md) 이슈 #215의 세션 상세 UI 범위를 벗어난 일반 문서 변경입니다.

Possibly related PRs

  • Feature/#26 navigation #27 — 네비게이션 호스트/라우트 패턴 도입으로, 본 PR의 SessionRoute 및 그래프 등록과 코드 레벨 유사성이 큼.

Suggested labels

Feature, CodeRabbit

Suggested reviewers

  • TaeseongYun
  • ashwon12

Poem

토끼는 탭을 톡톡, 세션 길을 연다
그라디언트 구름 위, 칩이 반짝인다 ✨
지도로 가리키고, 공지로 속삭이고
네비의 길 따라 폴짝폴짝 뛰네
새 모듈 한 켠에, 꿈같은 화면 피었다 🥕

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/#215-session-detail-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 Sep 7, 2025

@coderabbitai review

@coderabbitai
Copy link

coderabbitai bot commented Sep 7, 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: 10

Caution

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

⚠️ Outside diff range comments (1)
feature/session/consumer-rules.pro (1)

1-2: consumer-rules.pro가 비어 있습니다 — 적용 여부 확인 필요
라이브러리 모듈의 consumer ProGuard 파일이 실제 패키징에 포함되는지 확인해 주세요(플러그인에서 자동 지정하지 않는다면 명시 필요).

적용이 필요하다면 build.gradle.kts에 다음을 추가하세요:

 android {
-    setNamespace("feature.session")
+    setNamespace("feature.session")
+    defaultConfig {
+        consumerProguardFiles("consumer-rules.pro")
+    }
 }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4e9c8e9 and b379102.

📒 Files selected for processing (14)
  • AGENTS.md (1 hunks)
  • app/build.gradle.kts (1 hunks)
  • core/designsystem/src/main/java/com/yapp/core/designsystem/component/gradient/GradientBottom.kt (1 hunks)
  • core/designsystem/src/main/java/com/yapp/core/designsystem/component/gradient/GradientTop.kt (1 hunks)
  • feature/session/.gitignore (1 hunks)
  • feature/session/build.gradle.kts (1 hunks)
  • feature/session/consumer-rules.pro (1 hunks)
  • feature/session/proguard-rules.pro (1 hunks)
  • feature/session/src/main/AndroidManifest.xml (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 (1 hunks)
  • feature/session/src/main/java/com/yapp/feature/session/SessionViewModel.kt (1 hunks)
  • feature/session/src/main/java/com/yapp/feature/session/navigation/SessionNavigation.kt (1 hunks)
  • settings.gradle.kts (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-01-08T06:56:07.931Z
Learnt from: jinukeu
PR: YAPP-admin/yappu-world-android#5
File: core/domain/build.gradle.kts:1-4
Timestamp: 2025-01-08T06:56:07.931Z
Learning: In this project's architecture, the domain module is designed as an Android library module, not a pure Kotlin library, following Google's recommended architecture guidelines.

Applied to files:

  • AGENTS.md
📚 Learning: 2025-01-09T07:44:48.036Z
Learnt from: ashwon12
PR: YAPP-admin/yappu-world-android#5
File: feature/signup/build.gradle.kts:1-47
Timestamp: 2025-01-09T07:44:48.036Z
Learning: The project follows a modular architecture with two types of modules: Core (model, data-api, designsystem, ui, data, domain) and Feature (home, notice, signup, login). Core modules provide shared functionality while Feature modules implement specific features.

Applied to files:

  • AGENTS.md
🪛 markdownlint-cli2 (0.17.2)
AGENTS.md

3-3: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


4-4: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


9-9: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


10-10: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


17-17: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


18-18: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


23-23: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


24-24: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


28-28: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


29-29: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


33-33: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


34-34: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

🔇 Additional comments (10)
app/build.gradle.kts (1)

76-76: 세션 모듈 의존성 추가 OK. 상위 NavGraph 연결 여부만 확인해 주세요.
앱 NavGraph에 sessionNavGraph/Route가 실제로 포함되어 화면 진입이 가능한지 점검 부탁드립니다.

feature/session/.gitignore (1)

1-1: 모듈 빌드 산출물 제외 설정 적절합니다.
별도 조치 없음.

settings.gradle.kts (1)

48-50: 서브프로젝트 등록 LGTM.
동일한 패턴으로 feature 모듈을 관리하고 있어 일관성 좋습니다.

feature/session/build.gradle.kts (1)

1-17: yapp.android.feature 플러그인이 core:ui·core:designsystem 의존성과 Compose BOM, material3, navigation-compose 등 Compose 관련 의존성을 자동으로 설정합니다. 별도 dependencies 선언을 제거하세요.

Likely an incorrect or invalid review comment.

core/designsystem/src/main/java/com/yapp/core/designsystem/component/gradient/GradientBottom.kt (1)

42-42: Preview를 private으로 내린 변경 좋습니다.
외부 API 표면을 오염시키지 않아 모듈 공개 범위가 명확해집니다.

feature/session/src/main/AndroidManifest.xml (1)

1-4: 라이브러리 모듈용 최소 매니페스트 적절
namespace는 Gradle에서 지정되므로 package 생략 OK. 추후 컴포넌트 추가 시 exported/permission 설정만 유의해 주세요.

core/designsystem/src/main/java/com/yapp/core/designsystem/component/gradient/GradientTop.kt (1)

40-53: 프리뷰 구성은 적절합니다

테마 적용과 사이즈 지정이 명확합니다.

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

7-12: 이름 충돌로 컴파일 오류 발생: data object SessionRoute가 Composable 함수를 가림
동일한 이름(SessionRoute)의 data object가 Composable SessionRoute()를 섀도잉하여 컴파일 오류가 발생합니다. data object명을 변경하세요.

-@Serializable
-data object SessionRoute
+@Serializable
+data object SessionDestination
@@
-fun NavController.navigateToSession(navOptions: NavOptions? = null) {
-    navigate(SessionRoute, navOptions)
+fun NavController.navigateToSession(navOptions: NavOptions? = null) {
+    navigate(SessionDestination, navOptions)
 }
@@
-fun NavGraphBuilder.sessionNavGraph() {
-    composable<SessionRoute> {
-        SessionRoute()
+fun NavGraphBuilder.sessionNavGraph() {
+    composable<SessionDestination> {
+        SessionRoute()
     }
 }

프로젝트에서 사용 중인 navigation-compose 버전이 typed destination API(composable<Dest>, navigate(Dest))를 지원하는지 확인해주세요.

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

66-69: state 파라미터 미사용

UI-only 1차 PR이라면 괜찮지만, 이후 로딩/데이터 바인딩에 사용할 계획을 확인해주세요.


71-73: 스크롤 판단 로직의 라이브러리 의존성 축소

ScrollState.canScrollBackward 가용성은 버전에 따라 다릅니다. 값 비교로 대체하면 안정적입니다.

-    val showGradientBottom by remember {
-        derivedStateOf { scrollState.canScrollBackward }
-    }
+    val showGradientBottom by remember {
+        derivedStateOf { scrollState.value > 0 }
+    }


## Project Structure & Module Organization
- Multi‑module Android project using Gradle (Kotlin DSL).
- Modules: `:app` (entry), `:core:{model,data-api,designsystem,ui,data,domain,common-android}`, `:feature:{home,notice,signup,login,schedule,profile,history,setting}`, `:detekt` (custom rules).
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

문서 최신화: 신규 모듈(feature:session) 누락

모듈 목록에 session이 없습니다. PR 내용과 불일치합니다.

-- Modules: `:app` (entry), `:core:{model,data-api,designsystem,ui,data,domain,common-android}`, `:feature:{home,notice,signup,login,schedule,profile,history,setting}`, `:detekt` (custom rules).
+- Modules: `:app` (entry), `:core:{model,data-api,designsystem,ui,data,domain,common-android}`, `:feature:{home,notice,signup,login,schedule,profile,history,setting,session}`, `:detekt` (custom rules).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Modules: `:app` (entry), `:core:{model,data-api,designsystem,ui,data,domain,common-android}`, `:feature:{home,notice,signup,login,schedule,profile,history,setting}`, `:detekt` (custom rules).
Modules: `:app` (entry), `:core:{model,data-api,designsystem,ui,data,domain,common-android}`, `:feature:{home,notice,signup,login,schedule,profile,history,setting,session}`, `:detekt` (custom rules).
🤖 Prompt for AI Agents
In AGENTS.md around line 5, the modules list is missing the newly added feature
module `session`; update the Modules line to include `:feature:session`
alongside the other feature modules so the document matches the PR changes
(e.g., add `session` into the `:feature:{...}` group).

Copy link
Contributor

@TaeseongYun TaeseongYun left a comment

Choose a reason for hiding this comment

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

codex 는 처음들어봤는데 gpt 도 많이 생겼군요
궁금한것만 코멘트 남겼고 나머지는 이상없어보입니다 !

Comment on lines +20 to +23
fun GradientTop(
modifier: Modifier,
color: Color,
) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Q) 위 리뷰처럼 modifier 에 기본값 세팅 뺀거는 의도하신건가요 ?

Copy link
Member Author

Choose a reason for hiding this comment

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

오 넵!
너비랑 높이 값을 Modifier를 통해서 필수로 지정하게끔 만드려고 했어용

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.

수고하셨습니다

@jinukeu jinukeu merged commit a8d1141 into develop Sep 8, 2025
4 checks passed
@jinukeu jinukeu deleted the feature/#215-session-detail-ui branch September 8, 2025 14:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 세션 상세 UI

4 participants