feat: 채팅방 - 채팅방 공용 컴포넌트 구현 및 매니저 채팅 기능 구현 완료 #29
Conversation
- ChattingRoute.kt: 매니저 채팅방으로의 이동을 위한 `ManagerChatRoomNayKey` 네비게이션 키 추가 - ManagerChatTopBar.kt: 뒤로가기 버튼, 프로필 이미지, '전화왔어 매니저' 텍스트를 포함한 전용 상단 바 컴포넌트 구현 - ManagerChatRoomScreen.kt: 매니저 채팅방의 기본 레이아웃 구성 및 상단 바 컴포넌트 배치 구체화
- ChatGrayBubble, ChatLightPinkBubble, ChatPinkBubble 등 채팅방용 말풍선 컴포넌트 3종 신규 구현 - 디자인 시스템(Color.kt)에 `ChatGradientReverse` 그라데이션 브러시 속성 추가 - 채팅 관련 아이콘 리소스 `ic_chat_telephone.xml` 추가 - ManagerChatTopBar, ChatRoomTopBar의 패키지 위치를 `component.chatroom`으로 이동 및 관련 임포트 경로 수정 - ManagerChatRoomScreen 내 이동된 TopBar 컴포넌트 참조 경로 반영
- `ManagerChatField.kt`: 메시지 입력 불가 안내를 위한 전용 필드 컴포넌트 추가 - `ManagerPromptSlide.kt`: 드래그 및 애니메이션을 통해 확장 가능한 관리자 문의 프롬프트 슬라이드 컴포넌트 추가 - `ChatLightPinkBubble.kt`: `AnnotatedString`을 지원하는 텍스트 전용 말풍선 컴포넌트 신규 추가 - `ChatLightPinkBubbleWithIcon.kt`: 기존 `ChatLightPinkBubble`을 아이콘 포함 버전으로 명칭 변경 및 `AnnotatedString` 타입 적용 - `ManagerChatTopBar.kt`: 관리자 채팅 컴포넌트 관리를 위해 `chatroom.manager` 하위 패키지로 위치 이동 - `ManagerChatRoomScreen.kt`: 컴포넌트 이동에 따른 패키지 임포트 경로 수정
- ManagerFirstMessage: 초기 메시지 정보를 담는 데이터 클래스 및 유형(NORMAL, RELATIONSHIP) 정의 - FirstManagerChatUseCase: 채팅 시작 시 사용자에게 보여줄 초기 안내 메시지 리스트를 반환하는 유스케이스 구현 - 서비스 소개, 관계 형성 가이드 등 미리 정의된 초기 대화 시나리오 로직 추가
- `LoadingIndicator`: 세 개의 점이 순차적으로 튀어오르는 애니메이션 컴포넌트 신규 생성 - `ChatGrayBubble`: 로딩 상태(`isLoading`) 추가 및 로딩 중일 때 `LoadingIndicator`를 표시하도록 수정 - `ChatGrayBubble`, `ChatPinkBubble`, `ChatLightPinkBubble`: 모든 채팅 말풍선에 메시지 전송 시간(`time`) 표시 레이아웃 적용 - `FirstManagerChatUseCase`: 초기 메시지 반환 타입을 `List`에서 `Flow`로 변경하고, 메시지 간 1.5초의 지연 시간을 두어 순차적으로 방출하도록 수정
- `ChatListViewModel`, `Intent`, `SideEffect`에 매니저 채팅방 클릭 관련 로직 추가 - `ChattingEntryBuilder` 및 `AppScreen`에 `ManagerChatRoomNayKey` 목적지 등록 및 네비게이션 연동 - `ChatListScreen`에서 매니저 채팅 아이템 클릭 시 화면 전환 처리 추가 - `ManagerChatRoomScreen` 및 `ManagerChatTopBar`에 뒤로가기(`onBack`) 콜백 기능 반영 - `ChatGrayBubble` 말풍선의 최대 너비를 280.dp로 제한하도록 수정 - `ManagerChatTopBar` 프로필 이미지 크기 고정(40.dp) 및 하단 패딩 조정
- ManagerChatRoomScreen: 레이아웃 구조를 Box로 변경하고 하단에 ManagerPromptSlide와 ManagerChatField를 배치 - ManagerPromptSlide: Composable에 modifier 파라미터를 추가하고 그림자(shadow) 고도를 4.dp로 조정 - ManagerChatField: 컴포넌트 시각적 구분을 위해 4.dp 크기의 shadow 효과 적용 - ManagerChatLazyColumn: 일반 메시지 중 "전화왔어" 키워드에 대해 AnnotatedString을 사용하여 강조 색상(MainVariant1) 적용
- `GetCallScheduleUseCase`를 신규 생성하여 전화 예정 시간 안내 로직 구현 - `ManagerChatRoomViewModel`에 `GetCallScheduleUseCase` 의존성 주입 - `ManagerMessage.kt`에 전화 안내 메시지 표현을 위한 `WhenCallMessage` 데이터 클래스 추가 - `FirstManagerChatUseCase`의 기본 환영 인사말 문구를 매니저 정체성이 드러나도록 수정 - `ManagerMessage.kt` 내 가독성을 위한 주석 추가 및 코드 구조 정리
- 일관성을 위해 Intent 패키지를 `Intent`에서 `intent`(소문자)로 변경 - ChatListViewModel의 import를 `impl.Intent.ChatListIntent`에서 `impl.intent.ChatListIntent`로 업데이트 - ChatListIntent.kt와 ChatRoomIntent.kt를 올바른 패키지 경로로 이동 - AnnotatedString 스타일 변경 사항을 반영하도록 ManagerChatLazyColumn 업데이트
- ManagerChatRoomScreen: Intent 처리를 위한 `onIntent` 콜백 추가 및 ViewModel의 `handleIntent` 연결 - ManagerPromptSlide: 개별 클릭 콜백을 `ManagerChatRoomIntent`를 사용하는 단일 `onIntent`로 통합 - ManagerChatLazyColumn: `TODO()`로 남겨져 있던 다양한 메시지 타입(상담원 문의, 정보 변경, 기록 수정, 유저 메시지 등)에 대한 UI 렌더링 로직 구현 - ManagerChatRoomViewModel: `UserMessage` 생성 시 UI 구분을 위한 임시 ID 생성 로직에 주석 추가
- ManagerChatRoomScreen: onSizeChanged를 사용하여 하단 프롬프트 영역의 실제 높이를 측정하는 로직 추가 - ManagerChatRoomScreen: 측정된 높이를 ManagerChatLazyColumn의 bottomPadding으로 전달하여 UI 겹침 방지 - ManagerChatRoomScreen: 스크롤 및 레이아웃 테스트를 위한 대량의 더미 데이터를 포함한 Preview 추가 - ManagerChatLazyColumn: bottomPadding 매개변수를 추가하고 LazyColumn의 하단 contentPadding에 반영하도록 수정
- ManagerChatItemContent.kt: 기존 LazyColumn에 포함되어 있던 메시지 유형별 UI 렌더링 로직을 별도 컴포저블로 분리 - highlightText.kt: 텍스트 내 특정 키워드 강조를 위한 AnnotatedString 생성 로직을 유틸리티 함수로 추출 - ManagerChatLazyColumn.kt: 매니저 채팅 아이템 렌더링 로직을 ManagerChatItemContent로 위임하여 코드 간소화 - ManagerChatItem.kt: ManagerChatItem 인터페이스에 content 프로퍼티를 추가하여 하위 모델들의 구조 통일 - ManagerChatRoomViewModel.kt: handleIntent 및 메시지 전송 로직에 설명 주석 추가 및 가독성 개선
- ManagerChatItemContent.kt: SpanStyle, buildAnnotatedString, MainVariant1 등 미사용 텍스트 스타일 및 테마 관련 임포트 제거 - highlightText.kt: 미사용 Composable 어노테이션 임포트 제거 - ManagerChatLazyColumn.kt: Row, fillMaxWidth 등 레이아웃 관련 클래스 및 도메인 모델, 채팅 버블 컴포넌트 등 다수의 미사용 임포트 정리
- Channel을 도입하여 사용자 Intent 처리를 직렬화하고 중복 요청 방지(capacity 1, DROP_LATEST 적용) - handleIntent 호출 시 이벤트를 직접 처리하지 않고 intentChannel로 전달하도록 변경 - ViewModel 초기화 시 intentChannel을 구독하여 전달된 Intent를 순차적으로 처리하는 로직 추가 - sendUserMessageThen 함수를 suspend 함수로 전환하여 유저 메시지 추가와 매니저 응답 Flow 처리의 순차성 보장 - processIntent 분리를 통해 Intent 처리 로직과 UI 액션 간의 매핑 구조 정리
- ManagerChatItemContent.kt: 각 메시지 타입별 처리 로직을 상세히 설명하는 KDoc 작성 및 다양한 메시지 유형을 확인할 수 있는 Preview 추가 - LoadingIndicator.kt: 점진적 애니메이션 구현을 위한 시작 지연 시간(delayMillis) 및 Y축 이동 로직에 대한 설명 주석 추가 - ManagerPromptSlide.kt: 드래그 제스처를 통한 슬라이드 패널의 확장/축소 상태 관리 로직 및 내부 UI 구성 요소에 대한 주석 추가 - ManagerChatRoomViewModel.kt: Intent 채널을 활용한 메시지 직렬 처리 보장 방식에 대한 설명 주석 보완
- ManagerChatUiItem을 sealed class로 개편하여 Message와 DateSeparator 타입으로 분리 - ManagerChatRoomViewModel에 마지막 메시지와 날짜가 다를 경우 DateSeparator를 삽입하는 로직 추가 - ManagerChatLazyColumn에서 아이템 타입에 따라 날짜 구분선과 메시지 컨텐츠를 구분하여 렌더링 - LazyColumn의 items key 생성 로직에 DateSeparator 전용 식별자 추가 - UiModelMapper 및 ManagerChatItemContent가 변경된 Message 모델 구조를 사용하도록 수정 - Preview 및 테스트용 더미 데이터에 날짜 구분선 관련 코드 반영
- ManagerChatItemContent.kt: UserMessage 레이아웃의 Row에 상하 18.dp 패딩 적용 - ManagerChatItemContent.kt: 사용자 메시지 우측 정렬 방식에 대한 설명 주석 추가 및 Modifier 포맷팅 수정 - ManagerChatRoomViewModel.kt: delay 함수 호출부 전후에 공백 라인을 추가하여 코드 가독성 향상
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"
}
} |
📝 WalkthroughWalkthroughChanges매니저 채팅 메시지 모델과 프롬프트별 유스케이스, 상태 처리, Compose 기반 채팅방 UI 및 관리자 채팅방 내비게이션을 추가했습니다. 기존 채팅방 라우팅 콜백과 관련 패키지 구조도 변경하고 IntelliJ 설정 일부를 삭제했습니다. 매니저 채팅 도메인과 상태 처리
채팅방 내비게이션과 UI
IDE 설정 정리
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant ChatListScreen
participant ChatListViewModel
participant AppScreen
participant ManagerChatRoomViewModel
participant ManagerChatRoomScreen
ChatListScreen->>ChatListViewModel: ClickManagerChatRoom
ChatListViewModel-->>AppScreen: NavigateToManagerChatRoom
AppScreen->>ManagerChatRoomScreen: ManagerChatRoomNayKey 진입
ManagerChatRoomScreen->>ManagerChatRoomViewModel: ManagerChatRoomIntent
ManagerChatRoomViewModel-->>ManagerChatRoomScreen: ManagerChatRoomUiState
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 3❌ Failed checks (3 warnings)
✅ Passed checks (4 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 |
There was a problem hiding this comment.
Actionable comments posted: 8
🧹 Nitpick comments (1)
feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatLazyColumn.kt (1)
43-58: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winLazyColumn
items()에contentType지정을 권장합니다.
Message와DateSeparator는 레이아웃이 서로 다른데contentType이 지정되지 않아 Compose가 슬롯 재사용을 최적화하기 어렵습니다.⚡ 제안: contentType 추가
items( items = chatItems, key = { item -> when (item) { is ManagerChatUiItem.Message -> item.message.id is ManagerChatUiItem.DateSeparator -> "date-${item.date}" } - } + }, + contentType = { item -> item::class } ) { item ->🤖 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/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatLazyColumn.kt` around lines 43 - 58, Update the LazyColumn items call in ManagerChatLazyColumn to provide a contentType based on each ManagerChatUiItem subtype, using distinct stable types for Message and DateSeparator while preserving the existing key and rendering logic.
🤖 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/UseCaseModule.kt`:
- Around line 19-47: Remove the provider methods provideFirstManagerChatUseCase,
provideWantToContactManagerUseCase, provideWantToGetCallScheduleUseCase,
provideWantToUpdatePartnerInfoUseCase, and provideWantToUpdateRecordUseCase from
UseCaseModule, leaving these `@Inject` constructor types to be provided through
constructor injection only.
In
`@feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/ChatPinkBubble.kt`:
- Around line 32-49: Apply the same widthIn(max = 280.dp) constraint used by
ChatGrayBubble to the Text modifier in ChatPinkBubble, preserving the existing
background shape and padding while limiting long outgoing messages and
maintaining consistent wrapping.
In
`@feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatItemContent.kt`:
- Around line 51-163: ManagerChatItemContent의 선언된 modifier가 모든 메시지 분기에서 무시되고
있으므로, 전체 when 콘텐츠를 최상위 Box 또는 동등한 컨테이너로 감싸고 전달받은 modifier를 해당 컨테이너에 적용하세요. 기존
분기별 UI와 레이아웃 동작은 유지하고, 호출자가 지정한 modifier가 최상위 컴포넌트에 반영되도록 수정하세요.
In
`@feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerPromptSlide.kt`:
- Around line 66-75: Update the rememberDraggableState callback in the draggable
panel to accumulate per-event delta across the current drag gesture, then toggle
isExpanded only when the accumulated offset crosses the ±5f thresholds. Reset
the accumulated offset after each state transition and when a new drag begins,
preserving the existing vertical-direction behavior.
In
`@feature/chatting/impl/src/main/java/kr/co/call/impl/intent/ChatListIntent.kt`:
- Around line 3-6: Update the ClickManagerChatRoom branch in ChatListViewModel
intent handling to call emitNavigateToManagerChatRoom() instead of TODO(), so
selecting manager chat emits the navigation side effect without throwing.
In
`@feature/chatting/impl/src/main/java/kr/co/call/impl/screen/ManagerChatRoomScreen.kt`:
- Around line 43-127: PR 설명에 변경된 두 화면의 시각적 검증 자료를 추가하세요:
feature/chatting/impl/src/main/java/kr/co/call/impl/screen/ManagerChatRoomScreen.kt
43-127에는 메시지 목록, 프롬프트, 입력 오버레이가 보이는 자료를,
feature/chatting/impl/src/main/java/kr/co/call/impl/screen/ChatListScreen.kt
32-56에는 매니저 채팅방 진입 행이 보이는 스크린샷 또는 화면 녹화를 첨부하세요.
In
`@feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatListViewModel.kt`:
- Around line 51-64: Connect manager chat navigation through the
Intent/SideEffect flow: in
feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatListViewModel.kt
lines 51-64, replace the ClickManagerChatRoom TODO with
emitNavigateToManagerChatRoom(); in
feature/chatting/impl/src/main/java/kr/co/call/impl/screen/ChatListScreen.kt
lines 114-123, replace the direct onManagerChatRoomClick callback with
onIntent(ChatListIntent.ClickManagerChatRoom).
In
`@feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ManagerChatRoomViewModel.kt`:
- Around line 51-62: Update ManagerChatRoomViewModel.init,
appendManagerMessages, and the intentChannel consumption so exceptions from
firstManagerChatUseCase or flow collection are handled without cancelling the
intent-processing coroutine. Isolate each processIntent call so one failed
intent does not terminate subsequent processing, and preserve any existing
streaming reconnect/backoff and partial-message parsing safeguards while
handling collection errors.
---
Nitpick comments:
In
`@feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatLazyColumn.kt`:
- Around line 43-58: Update the LazyColumn items call in ManagerChatLazyColumn
to provide a contentType based on each ManagerChatUiItem subtype, using distinct
stable types for Message and DateSeparator while preserving the existing key and
rendering logic.
🪄 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: 40a6fa1d-8e74-4b9a-9224-118b406614e6
📒 Files selected for processing (67)
.idea/.gitignore.idea/AndroidProjectSystem.xml.idea/claudeCodeTabState.xml.idea/compiler.xml.idea/deploymentTargetSelector.xml.idea/deviceManager.xml.idea/discord.xml.idea/gradle.xml.idea/inspectionProfiles/Project_Default.xml.idea/kotlinc.xml.idea/markdown.xml.idea/misc.xml.idea/planningMode.xml.idea/runConfigurations.xml.idea/vcs.xmlapp/src/main/java/kr/co/call/callfromai/AppScreen.ktcore/data/src/main/java/kr/co/call/data/di/UseCaseModule.ktcore/designsystem/src/main/java/kr/co/call/designsystem/theme/Color.ktcore/designsystem/src/main/res/drawable/ic_chat_telephone.xmlcore/domain/src/main/java/kr/co/call/domain/model/chatting/ManagerChatItem.ktcore/domain/src/main/java/kr/co/call/domain/usecase/chatting/FirstManagerChatUseCase.ktcore/domain/src/main/java/kr/co/call/domain/usecase/chatting/WantToContactManagerUseCase.ktcore/domain/src/main/java/kr/co/call/domain/usecase/chatting/WantToGetCallScheduleUseCase.ktcore/domain/src/main/java/kr/co/call/domain/usecase/chatting/WantToUpdatePartnerInfoUseCase.ktcore/domain/src/main/java/kr/co/call/domain/usecase/chatting/WantToUpdateRecordUseCase.ktfeature/chatting/api/src/main/java/kr/co/call/api/ChattingRoute.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/BackgroundRow.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/ChatListItem.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/FrontRow.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/LoadingColumn.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/SwipeState.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/SwipeableBox.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/UnReadMessageCountBox.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/ChatGrayBubble.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/ChatPinkBubble.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/ChatRoomTopBar.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/DateSeparator.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/LoadingIndicator.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/ai/gitkeepfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ChatLightPinkBubble.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ChatLightPinkBubbleWithIcon.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatField.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatItemContent.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatLazyColumn.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatTopBar.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerPromptSlide.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/highlightText.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/entry/ChattingEntryBuilder.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/intent/ChatListIntent.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/intent/ChatRoomIntent.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/intent/ManagerChatRoomIntent.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/mapper/UiModelMapper.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/model/ManagerChatUiItem.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/screen/ChatListScreen.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/screen/ChatRoomScreen.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/screen/ManagerChatRoomScreen.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/sideeffect/ChatListSideEffect.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/sideeffect/ChatRoomSideEffect.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/state/ChatListState.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/state/ChatRoomUiState.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/state/ManagerChatRoomUiState.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatListIntent.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatListSideEffect.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatListViewModel.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatRoomIntent.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatRoomViewModel.ktfeature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ManagerChatRoomViewModel.kt
💤 Files with no reviewable changes (19)
- .idea/deploymentTargetSelector.xml
- .idea/misc.xml
- .idea/discord.xml
- .idea/markdown.xml
- .idea/planningMode.xml
- .idea/runConfigurations.xml
- .idea/vcs.xml
- .idea/deviceManager.xml
- .idea/inspectionProfiles/Project_Default.xml
- .idea/claudeCodeTabState.xml
- .idea/kotlinc.xml
- feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatListIntent.kt
- .idea/AndroidProjectSystem.xml
- .idea/gradle.xml
- feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatListSideEffect.kt
- .idea/.gitignore
- feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatRoomIntent.kt
- .idea/compiler.xml
- feature/chatting/impl/src/main/java/kr/co/call/impl/screen/ChatRoomScreen.kt
| @Provides | ||
| @Singleton | ||
| fun provideFirstManagerChatUseCase(): FirstManagerChatUseCase { | ||
| return FirstManagerChatUseCase() | ||
| } | ||
|
|
||
| @Provides | ||
| @Singleton | ||
| fun provideWantToContactManagerUseCase(): WantToContactManagerUseCase { | ||
| return WantToContactManagerUseCase() | ||
| } | ||
|
|
||
| @Provides | ||
| @Singleton | ||
| fun provideWantToGetCallScheduleUseCase(): WantToGetCallScheduleUseCase { | ||
| return WantToGetCallScheduleUseCase() | ||
| } | ||
|
|
||
| @Provides | ||
| @Singleton | ||
| fun provideWantToUpdatePartnerInfoUseCase(): WantToUpdatePartnerInfoUseCase { | ||
| return WantToUpdatePartnerInfoUseCase() | ||
| } | ||
|
|
||
| @Provides | ||
| @Singleton | ||
| fun provideWantToUpdateRecordUseCase(): WantToUpdateRecordUseCase { | ||
| return WantToUpdateRecordUseCase() | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
rg -nP 'class\s+(FirstManagerChatUseCase|WantToContactManagerUseCase|WantToGetCallScheduleUseCase|WantToUpdatePartnerInfoUseCase|WantToUpdateRecordUseCase)\s+@Inject\s+constructor' \
core/domain/src/main/java/kr/co/call/domain/usecase/chatting
rg -nP 'fun\s+provide(FirstManagerChatUseCase|WantToContactManagerUseCase|WantToGetCallScheduleUseCase|WantToUpdatePartnerInfoUseCase|WantToUpdateRecordUseCase)\s*\(' \
core/data/src/main/java/kr/co/call/data/di/UseCaseModule.ktRepository: call-from-ai/CallFromAi_Android
Length of output: 1321
core/data/src/main/java/kr/co/call/data/di/UseCaseModule.kt의 중복 바인딩을 제거하세요.
FirstManagerChatUseCase, WantToContactManagerUseCase, WantToGetCallScheduleUseCase, WantToUpdatePartnerInfoUseCase, WantToUpdateRecordUseCase 는 모두 @Inject constructor가 있으므로, 같은 타입을 @Provides로 다시 등록하면 Dagger/Hilt에서 컴파일이 실패합니다. 이 provider들은 삭제하고 생성자 주입만 사용하세요.
🤖 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/di/UseCaseModule.kt` around lines 19
- 47, Remove the provider methods provideFirstManagerChatUseCase,
provideWantToContactManagerUseCase, provideWantToGetCallScheduleUseCase,
provideWantToUpdatePartnerInfoUseCase, and provideWantToUpdateRecordUseCase from
UseCaseModule, leaving these `@Inject` constructor types to be provided through
constructor injection only.
- ChatListViewModel: ChatListIntent.ClickManagerChatRoom 발생 시 TODO를 제거하고 emitNavigateToManagerChatRoom() 호출하도록 수정 - ChatListScreen: Screen 및 ScreenContent 컴포넌트에서 불필요한 onChatRoomClick, onManagerChatRoomClick 콜백 파라미터 제거 - ChatListScreenContent: 매니저 채팅방 아이템 클릭 시 onIntent를 통해 ClickManagerChatRoom 인텐트를 전달하도록 변경 - ChatListScreen_Preview: 변경된 파라미터 구조에 맞춰 프리뷰 코드 수정
- ChatPinkBubble.kt: Text 컴포넌트에 `widthIn(max = 280.dp)` Modifier를 추가하여 말풍선의 최대 너비 제한
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"
}
} |
📄 작업 내용 요약
📎 Issue 번호
✅ 작업 목록
📝 기타 참고사항
좀 길 겁니다 ㅎㅎ
Summary by CodeRabbit
새로운 기능
개선 사항