Skip to content

feat: 채팅방 - 채팅방 공용 컴포넌트 구현 및 매니저 채팅 기능 구현 완료 #29

Merged
JiwonLee42 merged 27 commits into
developfrom
feature/26-chatroom-ui
Jul 24, 2026
Merged

feat: 채팅방 - 채팅방 공용 컴포넌트 구현 및 매니저 채팅 기능 구현 완료 #29
JiwonLee42 merged 27 commits into
developfrom
feature/26-chatroom-ui

Conversation

@codebidoof

@codebidoof codebidoof commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

📄 작업 내용 요약

  • 말풍선 등의 채팅방 공용 컴포넌트 구현
  • 매니저 채팅 기능 구현 완료

📎 Issue 번호


✅ 작업 목록

  • 기능 구현
  • 코드 리뷰 반영
  • 테스트 코드 작성
  • 문서 업데이트

📝 기타 참고사항

좀 길 겁니다 ㅎㅎ

초기 화면 대화 진행

Summary by CodeRabbit

  • 새로운 기능

    • 채팅 목록과 매니저 채팅방에서 매니저 채팅방 진입을 추가했습니다.
    • 초기 안내, 통화 일정, 상대 정보 수정, 기록 수정, 상담원 문의 등 다양한 매니저 메시지를 지원합니다.
    • 메시지 말풍선, 날짜 구분선, 로딩 애니메이션, 프롬프트 슬라이드 UI를 추가했습니다.
    • 채팅방 자동 스크롤 및 메시지별 로딩 상태 표시를 제공합니다.
  • 개선 사항

    • 매니저 채팅방 이동 처리와 채팅방 내비게이션이 간소화되었습니다.
    • 매니저 채팅방 화면에서는 하단 바 노출을 조정했습니다.

- 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 함수 호출부 전후에 공백 라인을 추가하여 코드 가독성 향상
@codebidoof codebidoof linked an issue Jul 20, 2026 that may be closed by this pull request
@github-actions

Copy link
Copy Markdown

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"
  }
}

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Changes

매니저 채팅 메시지 모델과 프롬프트별 유스케이스, 상태 처리, Compose 기반 채팅방 UI 및 관리자 채팅방 내비게이션을 추가했습니다. 기존 채팅방 라우팅 콜백과 관련 패키지 구조도 변경하고 IntelliJ 설정 일부를 삭제했습니다.

매니저 채팅 도메인과 상태 처리

Layer / File(s) Summary
메시지 계약과 응답 스트림
core/domain/..., core/data/...
매니저 메시지 타입, 프롬프트별 Flow<ManagerChatItem> 유스케이스 및 Hilt 제공 메서드를 추가했습니다.
상태 모델과 ViewModel 처리
feature/chatting/impl/.../state/*, .../model/*, .../viewmodel/*
Intent를 직렬 처리하고 사용자 메시지, 로딩 상태, 날짜 구분선을 UI 상태에 반영합니다.

채팅방 내비게이션과 UI

Layer / File(s) Summary
채팅 목록 내비게이션 계약
feature/chatting/api/..., feature/chatting/impl/.../intent/*, .../sideeffect/*, .../screen/ChatListScreen.kt, app/.../AppScreen.kt
기존 채팅방 이동에서 name을 제거하고 관리자 채팅방 라우트, 클릭 이벤트 및 BottomBar 표시 분기를 추가했습니다.
매니저 채팅 화면과 컴포넌트
feature/chatting/impl/.../component/chatroom/*, .../screen/ManagerChatRoomScreen.kt
상단 바, 메시지 버블, 로딩 인디케이터, 프롬프트 슬라이드, 입력 영역, 날짜 구분선 및 자동 스크롤 화면을 추가했습니다.
채팅 컴포넌트 패키지 정리
feature/chatting/impl/.../component/chatlist/*, .../state/*, .../sideeffect/*
채팅 목록 컴포넌트와 상태·사이드 이펙트 선언의 패키지를 재구성했습니다.

IDE 설정 정리

Layer / File(s) Summary
IDE 설정 삭제
.idea/.gitignore, .idea/compiler.xml
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
Loading

Possibly related PRs

Suggested reviewers: jiwonlee42

🚥 Pre-merge checks | ✅ 4 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning .idea 아래 IDE 설정 파일 다수가 삭제되어 채팅 기능 구현과 무관한 변경이 포함되었습니다. IDE 설정 정리는 별도 PR로 분리하고, 현재 PR에는 채팅방 UI와 매니저 채팅 기능 관련 코드만 남기세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 15.91% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Ui 변경 시 스크린샷 첨부 확인 ⚠️ Warning Compose UI 파일(ChatPinkBubble.kt)이 변경됐지만 PR 설명에 스크린샷/화면 녹화 첨부 언급이 없습니다. PR 설명에 변경된 화면의 스크린샷 또는 짧은 녹화(gif/mp4)와 함께 링크/첨부를 추가하세요.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed 직접 이슈 #26의 채팅방 UI 구현과 매니저 채팅 기능 구현 요구를 전반적으로 충족합니다.
모듈 의존성 방향 검증 ✅ Passed core/domain에 android/androidx import가 없고, feature/chatting/impl은 core/domain만 의존하며 feature->core/data 및 타 feature chat 패키지 import도 찾지 못했습니다.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Conventional Commits 형식을 따르며 채팅방 공용 컴포넌트와 매니저 채팅 기능 추가라는 변경 내용과 잘 맞습니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/26-chatroom-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.

@codebidoof codebidoof self-assigned this Jul 20, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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 win

LazyColumn items()contentType 지정을 권장합니다.

MessageDateSeparator는 레이아웃이 서로 다른데 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

📥 Commits

Reviewing files that changed from the base of the PR and between 8f30c10 and d1dcd35.

📒 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.xml
  • app/src/main/java/kr/co/call/callfromai/AppScreen.kt
  • core/data/src/main/java/kr/co/call/data/di/UseCaseModule.kt
  • core/designsystem/src/main/java/kr/co/call/designsystem/theme/Color.kt
  • core/designsystem/src/main/res/drawable/ic_chat_telephone.xml
  • core/domain/src/main/java/kr/co/call/domain/model/chatting/ManagerChatItem.kt
  • core/domain/src/main/java/kr/co/call/domain/usecase/chatting/FirstManagerChatUseCase.kt
  • core/domain/src/main/java/kr/co/call/domain/usecase/chatting/WantToContactManagerUseCase.kt
  • core/domain/src/main/java/kr/co/call/domain/usecase/chatting/WantToGetCallScheduleUseCase.kt
  • core/domain/src/main/java/kr/co/call/domain/usecase/chatting/WantToUpdatePartnerInfoUseCase.kt
  • core/domain/src/main/java/kr/co/call/domain/usecase/chatting/WantToUpdateRecordUseCase.kt
  • feature/chatting/api/src/main/java/kr/co/call/api/ChattingRoute.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/BackgroundRow.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/ChatListItem.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/FrontRow.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/LoadingColumn.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/SwipeState.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/SwipeableBox.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatlist/UnReadMessageCountBox.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/ChatGrayBubble.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/ChatPinkBubble.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/ChatRoomTopBar.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/DateSeparator.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/LoadingIndicator.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/ai/gitkeep
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ChatLightPinkBubble.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ChatLightPinkBubbleWithIcon.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatField.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatItemContent.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatLazyColumn.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerChatTopBar.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/ManagerPromptSlide.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/component/chatroom/manager/highlightText.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/entry/ChattingEntryBuilder.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/intent/ChatListIntent.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/intent/ChatRoomIntent.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/intent/ManagerChatRoomIntent.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/mapper/UiModelMapper.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/model/ManagerChatUiItem.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/screen/ChatListScreen.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/screen/ChatRoomScreen.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/screen/ManagerChatRoomScreen.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/sideeffect/ChatListSideEffect.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/sideeffect/ChatRoomSideEffect.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/state/ChatListState.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/state/ChatRoomUiState.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/state/ManagerChatRoomUiState.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatListIntent.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatListSideEffect.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatListViewModel.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatRoomIntent.kt
  • feature/chatting/impl/src/main/java/kr/co/call/impl/viewmodel/ChatRoomViewModel.kt
  • feature/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

Comment on lines +19 to +47
@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()
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 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.kt

Repository: 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를 추가하여 말풍선의 최대 너비 제한
@github-actions

Copy link
Copy Markdown

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"
  }
}

@JiwonLee42
JiwonLee42 merged commit 55e4472 into develop Jul 24, 2026
2 checks passed
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.

[Feat] 채팅방 UI구현 및 매니저 채팅기능 구현

2 participants