Skip to content

feat: 컬렉션 모듈 및 마이페이지 진입 구조 구현 - #941

Open
devfeijoa wants to merge 15 commits into
developfrom
feat/933
Open

feat: 컬렉션 모듈 및 마이페이지 진입 구조 구현#941
devfeijoa wants to merge 15 commits into
developfrom
feat/933

Conversation

@devfeijoa

@devfeijoa devfeijoa commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

📌𝘐𝘴𝘴𝘶𝘦𝘴

📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯

Overview

컬렉션 기능을 기존 앱과 분리해 확장할 수 있도록 feature:collection 모듈과 전용 진입 구조를 추가합니다.
마이페이지의 컬렉션 항목에서 별도 CollectionActivity로 이동하고, Activity 내부에서는 Navigation Compose 기반의 CollectionNavHost가 컬렉션 화면 흐름을 담당합니다.

작업 배경

기존 app 모듈의 마이페이지는 XML 기반 화면이므로, 컬렉션 진입 UI만 ComposeView로 삽입해 기존 화면 구조를 유지했습니다.
컬렉션 내부 화면은 이후 목록·생성·검색 화면이 추가될 것을 고려해 별도 feature 모듈과 Activity, NavHost를 진입 경계로 사용합니다.

이 PR은 컬렉션 전체 작업을 나눈 Stacked PR의 첫 번째 단계이며, 실제 컬렉션 목록과 생성·검색 기능은 후속 PR에서 다룹니다.

주요 변경 사항

1. 컬렉션 feature 모듈 구성

  • feature:collection 모듈 및 AndroidManifest 추가
  • 프로젝트 설정과 app 모듈에 컬렉션 모듈 연결
  • 컬렉션 내부 화면 이동을 위한 Navigation Compose 의존성 추가
  • Navigation Compose 버전 2.9.8 등록

2. 컬렉션 전용 Activity 및 내부 Navigation 구성

  • Compose 기반 CollectionActivity 추가
  • Hilt 사용을 위한 @AndroidEntryPoint 적용
  • 외부 노출이 필요하지 않아 Manifest에 exported=false로 등록
  • WebsosoTheme 안에서 CollectionNavHost 실행
  • 최초 진입 destination으로 기본 CollectionScreen 연결

3. 마이페이지 컬렉션 진입부 연결

  • 기존 XML 마이페이지에 ComposeView 추가
  • ViewTree 생명주기에 맞춰 Compose가 해제되도록 DisposeOnViewTreeLifecycleDestroyed 적용
  • 컬렉션 개수와 우측 이동 아이콘을 표시하는 CollectionEntry 구현
  • 연속 클릭을 방지하기 위해 기존 SingleEventHandler.throttleFirst 패턴 재사용
  • 컬렉션 항목 클릭 시 CollectionActivity 실행

이번 PR에서 제외한 범위

  • 컬렉션 목록 최종 UI
  • 컬렉션 생성 화면
  • 작품 검색 및 서재 선택
  • 컬렉션 API 연결
  • 실제 컬렉션 개수 조회
  • 딥링크

위 기능은 후속 Stacked PR에서 단계별로 추가합니다.

검증

  • ./gradlew testDebugUnitTest :app:assembleDebug ktlintCheck --console=plain
  • 전체 단위 테스트 성공
  • 앱 Debug 빌드 성공
  • ktlint 성공

📷𝘚𝘤𝘳𝘦𝘦𝘯𝘴𝘩𝘰𝘵

Screenshot_20260818_183543

💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴

리뷰 포인트

  • app → feature:collection 의존 방향이 기존 멀티 모듈 구조에 적합한지
  • XML 화면 내부의 ComposeView 생명주기 설정이 적절한지
  • 별도 Activity와 내부 NavHost로 컬렉션 흐름을 분리한 진입 구조가 적절한지
  • 현재 컬렉션 개수는 API 연결 전 단계이므로 기본값 0으로 표시되는 점

Stacked PR 안내

  • Base: develop
  • Head: feat/933
  • 다음 PR은 feat/933을 base로 하여 컬렉션 목록 UI 변경만 분리할 예정입니다.

Summary by CodeRabbit

새로운 기능

  • 마이페이지에 컬렉션 진입 영역을 추가했습니다.
  • 컬렉션 개수와 설정 아이콘을 확인할 수 있습니다.
  • 컬렉션 영역을 누르면 전용 컬렉션 화면으로 이동합니다.
  • 컬렉션 화면과 기본 탐색 구조를 새로 제공합니다.
  • 현재 컬렉션 화면에는 제목과 안내용 임시 콘텐츠가 표시됩니다.
  • 화면은 세로 방향으로 제공되며, 컬렉션 화면에서 향후 관련 기능을 이용할 수 있습니다.

devfeijoa added 11 commits July 28, 2026 11:58
- `feature/collection/build.gradle.kts`: collection 피처 모듈 빌드 스크립트 정의 및 네임스페이스 설정
- `feature/collection/src/main/AndroidManifest.xml`: 모듈용 매니페스트 파일 추가
- `settings.gradle.kts`: 프로젝트 모듈 목록에 `:feature:collection` 추가
- `libs.versions.toml`: Navigation Compose 라이브러리 버전(2.9.8) 및 카탈로그 정의 추가
- `feature/collection/build.gradle.kts`: `navigation-compose` 라이브러리 의존성 추가 적용
- `CollectionScreen.kt`: `CollectionScreen` 컴포저블 구현 및 프리뷰 추가
- `CollectionActivity.kt`: Hilt 의존성 주입을 위해 `CollectionActivity` 클래스에 `@AndroidEntryPoint` 어노테이션 추가
- `AndroidManifest.xml`: 컬렉션 화면 진입을 위한 `CollectionActivity` 추가 및 세로 방향(portrait) 고정 설정
- `fragment_my_page.xml`: 컬렉션 진입점을 위한 `ComposeView`(`cv_my_page_collection_entry`) 및 하단 구분선(`view_my_page_collection_divider`) 추가
- `fragment_my_page.xml`: 기존 장르 취향 섹션 및 취향 분석 섹션의 상단 제약 조건을 신규 구분선 기준으로 변경하여 레이아웃 구조 조정
- `MyPageFragment.kt`: `cvMyPageCollectionEntry`에 `CollectionEntry` 컴포저블을 적용하는 `setupCollectionEntry` 함수 추가
- `MyPageFragment.kt`: 컬렉션 화면으로 이동하는 `navigateToCollection` 함수 구현 및 연결
- `MyPageFragment.kt`: Compose View의 효율적인 생명주기 관리를 위한 `ViewCompositionStrategy` 설정 추가
@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@devfeijoa, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 28 minutes

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 04b06806-070c-4446-a2d9-3c9bff063c79

📥 Commits

Reviewing files that changed from the base of the PR and between 6d5c227 and db82975.

📒 Files selected for processing (1)
  • feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionEntry.kt

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 62c5ff22-d9e2-491d-aff1-dd18095535db

📥 Commits

Reviewing files that changed from the base of the PR and between fbb35f2 and 6d5c227.

📒 Files selected for processing (2)
  • app/src/main/java/com/into/websoso/ui/main/myPage/MyPageFragment.kt
  • feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionEntry.kt

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


Walkthrough

컬렉션 feature 모듈과 Compose 기반 화면을 추가했습니다. CollectionActivity를 등록하고 마이페이지에 컬렉션 진입 UI를 연결했습니다. 클릭하면 컬렉션 화면으로 이동합니다.

Changes

컬렉션 기능

Layer / File(s) Summary
컬렉션 모듈 및 의존성 구성
settings.gradle.kts, feature/collection/..., gradle/libs.versions.toml, app/build.gradle.kts
:feature:collection 모듈과 Navigation Compose 의존성을 추가했습니다.
컬렉션 진입 UI 및 화면 구현
feature/collection/src/main/java/.../CollectionEntry.kt, CollectionNavHost.kt, CollectionScreen.kt
컬렉션 개수와 설정 아이콘을 표시하는 CollectionEntry를 추가했습니다. CollectionNavHost와 임시 컬렉션 화면을 구현했습니다.
컬렉션 액티비티 진입점
app/src/main/java/.../CollectionActivity.kt, app/src/main/AndroidManifest.xml
Hilt 기반 CollectionActivity를 추가했습니다. 액티비티를 비공개 및 세로 화면으로 등록했습니다.
마이페이지 진입 연결
app/src/main/java/.../MyPageFragment.kt, app/src/main/res/layout/fragment_my_page.xml
마이페이지에 Compose 기반 컬렉션 진입 영역을 추가했습니다. 클릭 시 CollectionActivity를 시작하도록 연결했습니다.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 6d5c2

The PR adds the collection entry flow and navigation structure without any supplied actionable merge-blocking risk; it is merge-ready after normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant MyPageFragment
  participant CollectionActivity
  participant CollectionNavHost
  participant CollectionScreen
  MyPageFragment->>CollectionActivity: 컬렉션 클릭 후 Intent로 시작
  CollectionActivity->>CollectionNavHost: CollectionNavHost 표시
  CollectionNavHost->>CollectionScreen: collection 경로로 이동
  CollectionScreen-->>CollectionActivity: 컬렉션 화면 표시
Loading

Poem

토끼가 컬렉션 문을 열고
Compose 길을 깡충 건너네.
마이페이지에서 액티비티로,
네비게이션은 곧게 이어지고
하얀 임시 화면이 피어나네.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목은 컬렉션 모듈 추가와 마이페이지 진입 구조 구현이라는 주요 변경 사항을 정확하고 간결하게 설명합니다.
Description check ✅ Passed PR 설명은 이슈, 작업 내용, 제외 범위, 검증 결과, 스크린샷, 리뷰 포인트를 포함해 템플릿 요구 사항을 충족합니다.
Linked Issues check ✅ Passed 변경 사항은 직접 연결된 이슈 [#933]의 컬렉션 모듈 및 마이페이지 진입 구조 구현 목표를 충족합니다.
Out of Scope Changes check ✅ Passed 모든 변경 사항은 [#933]의 모듈 구성, 전용 Activity·NavHost, 마이페이지 진입부 구현 범위에 포함됩니다.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/933

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.

@devfeijoa
devfeijoa requested a review from Sadturtleman August 18, 2026 09:12
@devfeijoa devfeijoa added 🍯 [FEAT] 새로운 기능을 개발합니다. [👸 공주 은영] labels Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

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.

@devfeijoa
devfeijoa marked this pull request as ready for review August 18, 2026 09:44
@github-actions
github-actions Bot requested review from m6z1 and s9hn August 18, 2026 09:44
Comment thread app/src/main/java/com/into/websoso/ui/main/myPage/MyPageFragment.kt
Comment thread app/build.gradle.kts
- `CollectionEntry.kt`: 클릭 시 중복 호출을 방지하기 위해 `clickable`을 `debouncedClickable`로 변경
- `MyPageFragment.kt`: UI 컴포넌트 수준에서 중복 클릭이 제어됨에 따라 `navigateToCollection` 내의 `singleEventHandler.throttleFirst` 로직 제거
- `CollectionEntry.kt`: `buildAnnotatedString`을 사용하여 여러 개의 `Text` 컴포저블로 나뉘어 있던 컬렉션 개수 표시 로직을 단일 컴포저블로 통합 및 스타일링 코드 최적화
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[👸 공주 은영] 🍯 [FEAT] 새로운 기능을 개발합니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 컬렉션 모듈 및 마이페이지 진입 구조 구현

2 participants