feat: 마이페이지 - 캐릭터 관리 UI 구현(#13) #31
Conversation
- 컴포넌트의 title 파라미터 nullable 타입으로 변경
- 컴포넌트의 버튼 아이콘(iconRes) 파라미터 추가
📝 WalkthroughWalkthrough마이페이지에 캐릭터 관리 화면을 추가하고, 캐릭터 조회·삭제·추가 제한을 위한 도메인, 저장소, ViewModel, Compose UI 및 내비게이션 연결을 구현했습니다. 공통 버튼과 팝업 컴포넌트도 확장했습니다. Changes캐릭터 관리
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related PRs
Suggested labels: Suggested reviewers: Sequence Diagram(s)sequenceDiagram
participant MyPageScreen
participant AppScreen
participant CharacterManagementScreen
participant CharacterManagementViewModel
participant AICharacterRepository
MyPageScreen->>AppScreen: 캐릭터 관리 이동 이벤트
AppScreen->>CharacterManagementScreen: CharacterManagementNavKey
CharacterManagementScreen->>CharacterManagementViewModel: 화면 상태 수집
CharacterManagementViewModel->>AICharacterRepository: getCharacters()
AICharacterRepository-->>CharacterManagementViewModel: 캐릭터 목록
CharacterManagementViewModel-->>CharacterManagementScreen: 목록 및 사이드이펙트
🚥 Pre-merge checks | ✅ 5 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 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 |
Gemini AI 코드리뷰안녕하세요, 시니어 Android 개발자입니다. PR 리뷰 요청해주신 내용 잘 확인했습니다. 새로운 AI 캐릭터 관리 기능을 추가하는 PR로 보이네요. 전반적으로 코드 구조가 깔끔하고 MVI 패턴(Orbit)과 Compose 원칙을 잘 따르고 있습니다. 몇 가지 개선 사항과 미래를 위한 제안을 드립니다. PR Diff 리뷰[1. Kotlin 코드 리뷰]
[2. Jetpack Compose 코드]
[3. Repository/DataSource 레이어]
[4. ViewModel]
[5. FCM/SSE/실시간 통신 관련 코드]
최종 결론 및 권장 사항이 PR은 전반적으로 높은 품질의 코드를 보여주고 있으며, 모범 사례를 잘 따르고 있습니다. 특히 MVI 패턴과 Compose 원칙을 잘 적용했습니다. 반드시 수정/개선 권장 사항:
향후 개선을 위한 제안 (TODO 주석 업데이트 또는 추가):
이러한 사항들을 반영하면 더욱 견고하고 유지보수가 용이한 코드가 될 것입니다. 수고 많으셨습니다! |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
core/data/src/main/java/kr/co/call/data/repositoryImpl/AICharacterRepositoryImpl.kt (1)
7-8: 🎯 Functional Correctness | 🔵 Trivial | 🏗️ Heavy lift캐릭터 추가 가능 여부를
false로 고정한 상태를 확인해 주세요.
CharacterManagementViewModel.checkAddCharacter()가 이 값을 그대로 사용하므로 현재NavigateToAddCharacter는 절대 발생하지 않습니다. UI 차단 팝업만 이번 PR 범위라면 명시해 주고, 24시간 조건부 추가가 요구사항이라면 실제 판정 로직을 구현해야 합니다. 필요하면 조건 판정과 테스트 추가안을 함께 작성할 수 있습니다.Also applies to: 34-36
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@core/data/src/main/java/kr/co/call/data/repositoryImpl/AICharacterRepositoryImpl.kt` around lines 7 - 8, AICharacterRepositoryImpl의 캐릭터 추가 가능 여부가 항상 false가 되지 않도록 요구사항을 확인해 수정하세요. 24시간 조건부 추가가 요구사항이면 해당 판정 로직을 구현하고, CharacterManagementViewModel.checkAddCharacter()가 이를 사용해 조건 충족 시 NavigateToAddCharacter를 발생시키도록 하세요. 이번 PR 범위가 UI 차단뿐이라면 false 고정을 유지하되 해당 의도를 명시하고 관련 동작을 검증하세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@core/data/src/main/java/kr/co/call/data/di/RepositoryModule.kt`:
- Around line 36-39: Update the bindCharacterRepository binding in
RepositoryModule to apply `@Singleton` so the AICharacterRepositoryImpl instance
and its in-memory mutableList state are shared across injection points.
In
`@feature/mypage/impl/src/main/java/kr/co/call/impl/component/CharacterCard.kt`:
- Around line 68-80: CharacterCard의 편집 아이콘 영역에서 동작하지 않는 편집 버튼 표시를 제거하거나 숨기고, 편집
기능을 지원하는 경우에만 onEditClick 콜백과 클릭 처리를 연결하세요. 현재 PR 범위에서 수정 기능이 미완료라면 Icon 및 관련
Box를 노출하지 않도록 변경하세요.
In
`@feature/mypage/impl/src/main/java/kr/co/call/impl/viewmodel/CharacterManagementViewModel.kt`:
- Around line 24-29: Update the ConfirmDeleteCharacter branch in handleIntent
and the deleteCharacter flow to re-fetch the character by ID from the current
State immediately before deletion; if it isMain, block the operation, emit the
existing protection side effect, and return, while preserving normal deletion
for non-main characters.
---
Nitpick comments:
In
`@core/data/src/main/java/kr/co/call/data/repositoryImpl/AICharacterRepositoryImpl.kt`:
- Around line 7-8: AICharacterRepositoryImpl의 캐릭터 추가 가능 여부가 항상 false가 되지 않도록
요구사항을 확인해 수정하세요. 24시간 조건부 추가가 요구사항이면 해당 판정 로직을 구현하고,
CharacterManagementViewModel.checkAddCharacter()가 이를 사용해 조건 충족 시
NavigateToAddCharacter를 발생시키도록 하세요. 이번 PR 범위가 UI 차단뿐이라면 false 고정을 유지하되 해당 의도를
명시하고 관련 동작을 검증하세요.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 45824013-d9a0-4305-9491-f6e23df0ad1a
📒 Files selected for processing (19)
app/src/main/java/kr/co/call/callfromai/AppScreen.ktcore/data/src/main/java/kr/co/call/data/di/RepositoryModule.ktcore/data/src/main/java/kr/co/call/data/repositoryImpl/AICharacterRepositoryImpl.ktcore/designsystem/src/main/java/kr/co/call/designsystem/component/button/SecondaryButton.ktcore/designsystem/src/main/java/kr/co/call/designsystem/component/popup/OneButtonPopup.ktcore/designsystem/src/main/java/kr/co/call/designsystem/component/popup/PopupCard.ktcore/designsystem/src/main/res/drawable/ic_mypage_edit.xmlcore/designsystem/src/main/res/drawable/ic_mypage_trash.xmlcore/domain/src/main/java/kr/co/call/domain/model/mypage/AiCharacter.ktcore/domain/src/main/java/kr/co/call/domain/repository/AICharacterRepository.ktfeature/mypage/api/src/main/java/kr/co/call/api/MyPageRoute.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/component/CharacterCard.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/entry/MyPageEntryBuilder.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/screen/CharacterManagementScreen.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/screen/MyPageScreen.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/viewmodel/CharacterManagementIntent.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/viewmodel/CharacterManagementSideEffect.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/viewmodel/CharacterManagementState.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/viewmodel/CharacterManagementViewModel.kt
| Box( | ||
| modifier = Modifier | ||
| .align(Alignment.BottomEnd) | ||
| .size(23.dp) | ||
| .clip(CircleShape) | ||
| .background(CallTheme.colors.white), | ||
| contentAlignment = Alignment.Center, | ||
| ) { | ||
| Icon( | ||
| painter = painterResource(id = R.drawable.ic_mypage_edit), | ||
| contentDescription = "편집하기 버튼", | ||
| tint = Color.Unspecified | ||
| ) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
동작하지 않는 편집 버튼 표시는 제거하거나 연결하세요.
이 요소는 “편집하기 버튼”으로 안내되지만 클릭 처리와 콜백이 없어 사용자 입력에 반응하지 않습니다. 수정 기능이 준비될 때까지 숨기거나 onEditClick을 연결하세요. PR 목표에도 이상형 정보 수정은 미완료로 명시되어 있습니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@feature/mypage/impl/src/main/java/kr/co/call/impl/component/CharacterCard.kt`
around lines 68 - 80, CharacterCard의 편집 아이콘 영역에서 동작하지 않는 편집 버튼 표시를 제거하거나 숨기고, 편집
기능을 지원하는 경우에만 onEditClick 콜백과 클릭 처리를 연결하세요. 현재 PR 범위에서 수정 기능이 미완료라면 Icon 및 관련
Box를 노출하지 않도록 변경하세요.
Gemini AI 코드리뷰Gemini API 응답을 읽지 못했습니다. {
"error": {
"code": 503,
"message": "This model is currently experiencing high demand. Spikes in demand are usually temporary. Please try again later.",
"status": "UNAVAILABLE"
}
} |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@core/data/src/main/java/kr/co/call/data/repositoryImpl/AICharacterRepositoryImpl.kt`:
- Around line 40-42: Update AICharacterRepositoryImpl.canAddCharacter() to
determine eligibility using the actual character-creation timestamp data or
backend API and return that result instead of always returning false; if
integration is unavailable, remove this placeholder implementation from the
production Hilt binding until a real eligibility check is provided.
- Around line 34-38: Update deleteCharacter in AICharacterRepositoryImpl so the
runCatching block returns Unit rather than removeAll’s Boolean result. Preserve
the removal predicate by character ID, then explicitly complete with Unit to
satisfy the declared Result<Unit> contract.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 28299545-bbc6-4fb3-ae3d-0ed5d81aa2e4
📒 Files selected for processing (6)
core/data/src/main/java/kr/co/call/data/di/RepositoryModule.ktcore/data/src/main/java/kr/co/call/data/repositoryImpl/AICharacterRepositoryImpl.ktcore/domain/src/main/java/kr/co/call/domain/model/mypage/AiCharacter.ktcore/domain/src/main/java/kr/co/call/domain/repository/AICharacterRepository.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/component/CharacterCard.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/viewmodel/CharacterManagementViewModel.kt
🚧 Files skipped from review as they are similar to previous changes (4)
- core/data/src/main/java/kr/co/call/data/di/RepositoryModule.kt
- core/domain/src/main/java/kr/co/call/domain/model/mypage/AiCharacter.kt
- feature/mypage/impl/src/main/java/kr/co/call/impl/component/CharacterCard.kt
- feature/mypage/impl/src/main/java/kr/co/call/impl/viewmodel/CharacterManagementViewModel.kt
| override suspend fun canAddCharacter(): Result<Boolean> { | ||
| // TODO: 마지막 캐릭터 생성 시각 기준 24시간 경과 여부를 판단(백엔드) | ||
| return runCatching { false } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
rg -n -C 5 \
'canAddCharacter|NavigateToAddCharacter|ShowAddCharacterBlocked' \
core/data featureRepository: call-from-ai/CallFromAi_Android
Length of output: 6747
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== repository interface/call sites =="
rg -n -C 3 'fun canAddCharacter\(|suspend fun canAddCharacter|canAddCharacter' --glob '*.kt' .
echo "== repository provider/binding snippets =="
rg -n -C 4 'AICharacterRepository|AIC|RepositoryImpl|Hilt|Provides|Inject' --glob '*.kt' . | sed -n '1,220p'
echo "== module/build dependency hints =="
fd 'build.gradle|build.gradle.kts|settings.gradle|settings.gradle.kts' . -t f -x sh -c 'echo "--- $1"; cat "$1"' sh {}Repository: call-from-ai/CallFromAi_Android
Length of output: 44761
캐릭터 추가 eligibility 판정한 뒤 반환하도록 수정하세요.
AICharacterRepositoryImpl.canAddCharacter()가 항상 false를 반환하고, 이 구현체가 Hilt Binding을 통해 주입되어 CharacterManagementViewModel.checkAddCharacter()에서 실제 판단 로직 없이 항상 ShowAddCharacterBlocked만 발생시킵니다. 24시간 제한을 실제 데이터/API로 판정하거나, API 연동 전 임시 구현체를 프로덕션 바인딩에서 제외해야 합니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@core/data/src/main/java/kr/co/call/data/repositoryImpl/AICharacterRepositoryImpl.kt`
around lines 40 - 42, Update AICharacterRepositoryImpl.canAddCharacter() to
determine eligibility using the actual character-creation timestamp data or
backend API and return that result instead of always returning false; if
integration is unavailable, remove this placeholder implementation from the
production Hilt binding until a real eligibility check is provided.
- AICharacterRepositoryImpl의 deleteCharacter Unit 반환
Gemini AI 코드리뷰안녕하세요, 시니어 Android 개발자입니다. PR 리뷰 요청해주셔서 감사합니다. 전반적으로 깔끔하고 신중하게 작성된 코드입니다. 특히 MVI 패턴(Orbit)과 Compose를 효과적으로 활용하여 UI 상태 관리와 비즈니스 로직 분리를 잘 해내셨고, Navigation 및 DI 구조도 모범적으로 구현되었습니다. 신규 기능 추가 시 필요한 모든 레이어(Domain, Data, Feature)를 잘 분배하여 작업하신 점이 인상 깊습니다. 몇 가지 개선할 점과 질문이 있어 코멘트 남깁니다. General (전반적인 코멘트)
Specific Comments & Suggestions1.
|
codebidoof
left a comment
There was a problem hiding this comment.
롤백만 시켜주세영 나머지는 너무 잘했서여~~~!!!!!!!
| }, | ||
| onBack = { | ||
| appNavigator.popBackStack() | ||
| }) |
| modifier: Modifier = Modifier, | ||
| label: String, | ||
| title: String, | ||
| title: String? = null, |
| modifier: Modifier = Modifier, | ||
| label: String, | ||
| title: String, | ||
| title: String?=null, |
- 들여쓰기 적용 - PopupCard/OneButtonPopup 롤백
Gemini AI 코드리뷰안녕하세요! PR 잘 보았습니다. AI 캐릭터 관리 기능 추가를 위한 전반적인 작업이 잘 진행된 것 같습니다. 신규 기능 추가와 기존 컴포넌트 확장, 그리고 MVI 패턴 적용까지 깔끔하게 작업해 주셨네요. 몇 가지 개선 사항과 궁금한 점들을 정리해서 리뷰 드립니다. 1. Kotlin 코드 (General)
2. Jetpack Compose 코드
3. Repository/DataSource 레이어
4. ViewModel (Orbit)
5. FCM/SSE/실시간 통신 관련 코드
Design System 관련 (추가)
종합 의견전반적으로 Clean Architecture와 MVI 패턴을 잘 적용하여 체계적으로 코드를 작성해 주셨습니다. 특히 ViewModel에서 Orbit을 활용한 상태 관리와 Side Effect 처리가 인상 깊습니다. 몇 가지 리뷰 내용을 참고하셔서 PR을 마무리해 주시면 좋겠습니다. 수고하셨습니다! |
codebidoof
left a comment
There was a problem hiding this comment.
고생했어!! 공용 컴포넌트 쪽 변경사항은 롤백하는 게 좋아보여!
| @Composable | ||
| fun SecondaryButton( | ||
| modifier: Modifier = Modifier, | ||
| text: String, | ||
| onClick: () -> Unit, | ||
| enabled: Boolean = true, | ||
| iconRes: Int? = null, | ||
| containerColor: Color = CallTheme.colors.mainVariant4, | ||
| contentColor: Color = CallTheme.colors.white, | ||
| pressedContainerColor: Color = CallTheme.colors.subPressed3, | ||
| ) { | ||
| val interactionSource = remember { MutableInteractionSource() } | ||
| val isPressed by interactionSource.collectIsPressedAsState() | ||
|
|
||
| Box( | ||
| modifier = modifier | ||
| .fillMaxWidth() | ||
| .height(51.dp) | ||
| .background( | ||
| color = when { | ||
| !enabled -> containerColor.copy(alpha = 0.38f) | ||
| isPressed -> pressedContainerColor | ||
| else -> containerColor | ||
| }, | ||
| shape = RoundedCornerShape(10.dp), | ||
| ) | ||
| .clickable( | ||
| enabled = enabled, | ||
| interactionSource = interactionSource, | ||
| indication = ripple(), | ||
| onClick = onClick, | ||
| ), | ||
| contentAlignment = Alignment.Center, | ||
| ) { | ||
| Text( | ||
| text = text, | ||
| style = CallTheme.typography.bodyMediumMedium, | ||
| color = if (enabled) contentColor else contentColor.copy(alpha = 0.38f), | ||
| ) | ||
| val contentTint = if (enabled) contentColor else contentColor.copy(alpha = 0.38f) | ||
|
|
||
| if (iconRes != null) { | ||
| Row(verticalAlignment = Alignment.CenterVertically) { | ||
| Icon( | ||
| painter = painterResource(id = iconRes), | ||
| contentDescription = null, | ||
| tint = contentTint, | ||
| modifier = Modifier.size(16.dp), | ||
| ) | ||
| Spacer(modifier = Modifier.width(6.dp)) | ||
| Text(text = text, style = CallTheme.typography.bodyMediumMedium, color = contentTint) | ||
| } | ||
| } else { | ||
| Text(text = text, style = CallTheme.typography.bodyMediumMedium, color = contentTint) | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
아! 그런 이유라면 괜찮아 보입니다! 대신에 공용 컴포넌트 수정 시에는 단톡에 말해주는 게 좋을 것 같아요!
| modifier: Modifier = Modifier, | ||
| label: String, | ||
| title: String, | ||
| title: String? = "", |
There was a problem hiding this comment.
요건 아래에 PopupCard 컴포넌트 변경한 comment와 동일한 이유입니다! 아래 comment 참고해주세용
| @@ -50,13 +50,16 @@ internal fun PopupCard( | |||
| textAlign = TextAlign.Center, | |||
| ) | |||
| Spacer(modifier = Modifier.height(8.dp)) | |||
| Text( | |||
| text = title, | |||
| style = CallTheme.typography.bodyLargeBold, | |||
| color = CallTheme.colors.black, | |||
| textAlign = TextAlign.Center, | |||
| modifier = Modifier.fillMaxWidth(), | |||
| ) | |||
| if (title != null) { | |||
| Spacer(modifier = Modifier.height(8.dp)) | |||
| Text( | |||
| text = title, | |||
| style = CallTheme.typography.bodyLargeBold, | |||
| color = CallTheme.colors.black, | |||
| textAlign = TextAlign.Center, | |||
| modifier = Modifier.fillMaxWidth(), | |||
| ) | |||
| } | |||
| var chatHistoryTarget by remember { mutableStateOf<AiCharacter?>(null) } | ||
| var deleteTarget by remember { mutableStateOf<AiCharacter?>(null) } |
There was a problem hiding this comment.
이거 널인지 아닌지 여부로 세팅하지 말고 mutableStateOf의 원소 타입을 boolean으로 줘서 true false 기준으로 팝업 띄울지 여부를 분기처리하는 게 더 나아보여!!
There was a problem hiding this comment.
굳굳 바로 적용시켜서 다시 커밋 올려둘게용! 피드백 감사합니당👍
- popup 컴포넌트에 mutableStateOf 원소 타입을 boolean으로 변경 - 필요한 import문 추가 - 캐릭터 추가하기팝업 "24시간" 강조
Gemini AI 코드리뷰안녕하세요, 시니어 안드로이드 개발자입니다. AI 캐릭터 관리 기능 추가를 위한 PR에 대해 상세한 코드 리뷰를 진행하겠습니다. 전반적으로 Orbit MVI 패턴과 Jetpack Compose의 모범 사례를 잘 적용하고 있어 인상 깊습니다. 몇 가지 개선 사항과 잠재적 문제점을 짚어드리겠습니다. 전반적인 피드백 (General Feedback)👍 좋은 점 (Good Points)
🤔 개선이 필요한 점 (Areas for Improvement)
파일별 상세 리뷰 (Detailed File-by-File Review)
|
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
feature/mypage/impl/src/main/java/kr/co/call/impl/entry/MyPageEntryBuilder.kt (1)
28-33: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift캐릭터 추가 네비게이션을 실제 목적지에 연결하세요.
feature/mypage/impl/src/main/java/kr/co/call/impl/screen/CharacterManagementScreen.kt은NavigateToAddCharacter발생 시navigateToAddCharacter()를 호출하지만, 현재 entry에서는 TODO 빈 람다를 전달합니다. 추가가 허용된 사용자도 버튼을 눌러도 아무 화면으로 이동하지 않습니다. 추가 화면이 아직 준비되지 않았다면 해당 액션을 노출하지 않거나 비활성화해야 합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/mypage/impl/src/main/java/kr/co/call/impl/entry/MyPageEntryBuilder.kt` around lines 28 - 33, CharacterManagementNavKey의 CharacterManagementScreen 호출에서 TODO 빈 람다를 제거하고, navigateToAddCharacter를 실제 캐릭터 추가 목적지로 연결하세요. 추가 화면이 아직 구현되지 않았다면 해당 액션을 노출하지 않거나 비활성화하여 버튼 클릭이 무동작으로 끝나지 않게 하세요.
🧹 Nitpick comments (1)
feature/mypage/impl/src/main/java/kr/co/call/impl/entry/MyPageEntryBuilder.kt (1)
18-18: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win
onBack의 빈 기본값을 제거하세요.호출부가
onBack을 생략하면CharacterManagementScreen,FaqScreen,TermScreen의 뒤로가기 동작이 아무 작업도 하지 않게 됩니다. 실제 호출부가 항상 콜백을 전달하는지 확인하고, 가능하면 필수 파라미터로 변경하세요.권장 수정
- onBack: () -> Unit = {}, + onBack: () -> Unit,🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/mypage/impl/src/main/java/kr/co/call/impl/entry/MyPageEntryBuilder.kt` at line 18, MyPageEntryBuilder의 onBack 파라미터에서 빈 기본값을 제거하고 필수 콜백으로 변경하세요. CharacterManagementScreen, FaqScreen, TermScreen을 포함한 모든 호출부가 실제 뒤로가기 동작을 수행하는 콜백을 전달하도록 확인하고 누락된 호출부를 수정하세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In
`@feature/mypage/impl/src/main/java/kr/co/call/impl/entry/MyPageEntryBuilder.kt`:
- Around line 28-33: CharacterManagementNavKey의 CharacterManagementScreen 호출에서
TODO 빈 람다를 제거하고, navigateToAddCharacter를 실제 캐릭터 추가 목적지로 연결하세요. 추가 화면이 아직 구현되지
않았다면 해당 액션을 노출하지 않거나 비활성화하여 버튼 클릭이 무동작으로 끝나지 않게 하세요.
---
Nitpick comments:
In
`@feature/mypage/impl/src/main/java/kr/co/call/impl/entry/MyPageEntryBuilder.kt`:
- Line 18: MyPageEntryBuilder의 onBack 파라미터에서 빈 기본값을 제거하고 필수 콜백으로 변경하세요.
CharacterManagementScreen, FaqScreen, TermScreen을 포함한 모든 호출부가 실제 뒤로가기 동작을 수행하는
콜백을 전달하도록 확인하고 누락된 호출부를 수정하세요.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 3190f8d4-b0e4-407f-abe9-2ece062f3639
📒 Files selected for processing (8)
app/src/main/java/kr/co/call/callfromai/AppScreen.ktcore/data/src/main/java/kr/co/call/data/di/RepositoryModule.ktcore/designsystem/src/main/java/kr/co/call/designsystem/component/popup/OneButtonPopup.ktcore/designsystem/src/main/java/kr/co/call/designsystem/component/popup/PopupCard.ktfeature/mypage/api/src/main/java/kr/co/call/api/MyPageRoute.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/entry/MyPageEntryBuilder.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/screen/CharacterManagementScreen.ktfeature/mypage/impl/src/main/java/kr/co/call/impl/screen/MyPageScreen.kt
🚧 Files skipped from review as they are similar to previous changes (6)
- core/designsystem/src/main/java/kr/co/call/designsystem/component/popup/PopupCard.kt
- feature/mypage/api/src/main/java/kr/co/call/api/MyPageRoute.kt
- app/src/main/java/kr/co/call/callfromai/AppScreen.kt
- core/data/src/main/java/kr/co/call/data/di/RepositoryModule.kt
- feature/mypage/impl/src/main/java/kr/co/call/impl/screen/MyPageScreen.kt
- feature/mypage/impl/src/main/java/kr/co/call/impl/screen/CharacterManagementScreen.kt



📄 작업 내용 요약
📎 Issue 번호
✅ 작업 목록
📝 기타 참고사항
Summary by CodeRabbit
새로운 기능
UI 개선