-
Notifications
You must be signed in to change notification settings - Fork 0
[Feature/#146] 내 제보 기록 화면 구현 #151
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Walkthrough내 제보 기록 화면과 관련해 네비게이션, 데이터/DTO, 리포지토리, 도메인 모델, 유스케이스, 뷰모델, UI 구성요소(컴포저블) 및 디자인 시스템 색상·칩 컴포넌트가 추가되어 전체 조회·필터 흐름이 구현되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant User
participant Screen as ReportHistoryScreen
participant VM as ReportHistoryViewModel
participant UseCase as GetReportHistoriesUseCase
participant Repo as ReportRepository
participant DS as ReportDataSource
participant Svc as ReportService
User->>Screen: 화면 진입
Screen->>VM: 초기화 / load
VM->>UseCase: invoke()
UseCase->>Repo: getReportHistories()
Repo->>DS: getReports()
DS->>Svc: GET /api/v2/reports
Svc-->>DS: BaseResponse<ReportHistoriesPerDateDto>
DS-->>Repo: Result<ReportHistoriesPerDateDto>
Repo->>Repo: toDomainMap() -> Map<LocalDate,List<ReportItem>>
Repo-->>UseCase: Result<Map<LocalDate,List<ReportItem>>>
UseCase-->>VM: Result 전달
VM->>VM: UI 모델 변환 및 상태 업데이트
VM-->>Screen: 상태 방출
Screen->>User: 필터/그룹화된 목록 렌더링
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing touches
🧪 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
🧹 Nitpick comments (7)
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/util/LocalDateUtils.kt (1)
7-10: 포매터를 top-level 상수로 추출하면 성능 개선 가능
toPresentationFormat()함수가 호출될 때마다DateTimeFormatter를 새로 생성하고 있습니다. 리스트 화면에서 여러 날짜를 포맷팅할 때 반복 생성으로 인한 오버헤드가 발생할 수 있습니다.다음과 같이 포매터를 top-level 상수로 추출하는 것을 권장합니다:
+private val PRESENTATION_DATE_FORMATTER = DateTimeFormatter.ofPattern("yy.MM.dd E", Locale.KOREAN) + fun LocalDate.toPresentationFormat(): String { - val formatter = DateTimeFormatter.ofPattern("yy.MM.dd E", Locale.KOREAN) - return this.format(formatter) + return this.format(PRESENTATION_DATE_FORMATTER) }core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilChip.kt (1)
19-49: 칩 컴포넌트 구현이 잘 되었습니다선택 상태에 따른 스타일 변경과 카운트 표시 기능이 제대로 구현되었습니다.
다만 Line 27의
"$title $count"문자열 결합 방식은 향후 다국어 지원 시 개선이 필요할 수 있습니다. 현재는 한국어 화면이므로 문제없지만, 추후 string resource를 활용한 포맷팅을 고려해보세요.domain/src/main/java/com/threegap/bitnagil/domain/report/model/ReportStatus.kt (1)
19-25: 메서드 이름 변경을 고려하세요.
toString메서드명이 Kotlin Enum의 기본toString()메서드와 혼동될 수 있습니다. API 직렬화를 위한 용도라면toApiString()또는toSerializedString()같은 명확한 이름으로 변경하는 것을 권장합니다.- fun toString(value: ReportStatus): String { + fun toApiString(value: ReportStatus): String { return when (value) { Pending -> "PENDING" InProgress -> "IN_PROGRESS" Completed -> "COMPLETED" } }presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/block/ReportHistoryItem.kt (1)
78-87: 이미지 로딩/에러 상태 처리를 추가하는 것을 고려하세요.
AsyncImage에 로딩 중이나 에러 상태를 나타내는 placeholder가 없습니다. 이미지 로딩 중이거나 실패했을 때 빈 공간이 보일 수 있습니다.AsyncImage( model = ImageRequest.Builder(LocalContext.current) .data(report.imageUrl) .build(), modifier = Modifier .size(74.dp) .clip(shape = RoundedCornerShape(9.dp)) .background(color = BitnagilTheme.colors.black), contentDescription = null, + placeholder = painterResource(R.drawable.ic_placeholder), + error = painterResource(R.drawable.ic_error), )presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryScreen.kt (1)
165-189: 선택 사항: 카테고리 버튼의 UX 개선을 고려해보세요.현재 카테고리 선택 버튼이 컨텐츠 영역 위에 오버레이되어 있어, 스크롤 시 상단 항목을 가릴 수 있습니다. 다음 옵션들을 고려해볼 수 있습니다:
- 버튼에 배경색과 그림자를 추가하여 시각적으로 구분
- 칩 영역 옆에 배치하여 고정 위치로 변경
- 현재 구현이 의도된 디자인이라면 그대로 유지
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryViewModel.kt (1)
27-52: 운영 관련 조언: 향후 페이지네이션 도입을 고려하세요.현재는 모든 제보 데이터를 한 번에 불러와 클라이언트에서 필터링하고 있습니다. 사용자의 제보 기록이 많아질 경우 다음 문제가 발생할 수 있습니다:
- 초기 로딩 시간 증가
- 메모리 사용량 증가
- 불필요한 네트워크 트래픽
향후 다음 개선사항을 고려해보세요:
- 서버 사이드 페이지네이션 구현
- 무한 스크롤 또는 페이지 단위 로딩
- 필터링을 서버에서 처리하여 필요한 데이터만 전송
초기 구현으로는 적절하지만, 사용자 증가에 따라 개선이 필요할 것입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportHistoryState.kt (1)
13-28: 선택 사항: 필터링 로직을 간소화할 수 있습니다.현재
when표현식이 다소 장황합니다. 다음과 같이 단순화할 수 있습니다:val processMatched = selectedReportProcess == ReportProcess.Total || it.process == selectedReportProcess val categoryMatched = selectedReportCategory == null || it.category == selectedReportCategory이렇게 하면 코드가 더 간결해지고 유지보수가 쉬워집니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (30)
app/src/main/java/com/threegap/bitnagil/MainNavHost.kt(3 hunks)app/src/main/java/com/threegap/bitnagil/Route.kt(1 hunks)app/src/main/java/com/threegap/bitnagil/navigation/home/HomeNavHost.kt(2 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/BitnagilColors.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/Color.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilChip.kt(1 hunks)data/src/main/java/com/threegap/bitnagil/data/report/datasource/ReportDataSource.kt(1 hunks)data/src/main/java/com/threegap/bitnagil/data/report/datasourceImpl/ReportDataSourceImpl.kt(2 hunks)data/src/main/java/com/threegap/bitnagil/data/report/model/response/ReportHistoriesPerDateDto.kt(1 hunks)data/src/main/java/com/threegap/bitnagil/data/report/model/response/ReportItemDto.kt(1 hunks)data/src/main/java/com/threegap/bitnagil/data/report/repositoryImpl/ReportRepositoryImpl.kt(2 hunks)data/src/main/java/com/threegap/bitnagil/data/report/service/ReportService.kt(1 hunks)domain/src/main/java/com/threegap/bitnagil/domain/report/model/ReportItem.kt(1 hunks)domain/src/main/java/com/threegap/bitnagil/domain/report/model/ReportStatus.kt(1 hunks)domain/src/main/java/com/threegap/bitnagil/domain/report/repository/ReportRepository.kt(1 hunks)domain/src/main/java/com/threegap/bitnagil/domain/report/usecase/GetReportHistoriesUseCase.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/MyPageScreen.kt(5 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryScreen.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryViewModel.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/atom/ReportProcessBadge.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/block/ReportHistoryItem.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/template/ReportCategoryBottomSheet.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportCategory.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportHistoriesPerDayUiModel.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportHistorySideEffect.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportHistoryState.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportHistoryUiModel.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportProcess.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportProcessWithCount.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/util/LocalDateUtils.kt(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-08-13T09:06:19.028Z
Learnt from: wjdrjs00
Repo: YAPP-Github/Bitnagil-Android PR: 101
File: presentation/src/main/java/com/threegap/bitnagil/presentation/setting/SettingViewModel.kt:61-67
Timestamp: 2025-08-13T09:06:19.028Z
Learning: In Android ViewModels, when logout success triggers navigation to a different screen (like NavigateToLogin), the current ViewModel's lifecycle ends, so loading states don't need to be explicitly reset in the success case since the ViewModel will be destroyed.
Applied to files:
presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/MyPageScreen.kt
📚 Learning: 2025-07-21T10:38:49.104Z
Learnt from: l5x5l
Repo: YAPP-Github/Bitnagil-Android PR: 38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
Applied to files:
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilChip.kt
🧬 Code graph analysis (7)
app/src/main/java/com/threegap/bitnagil/MainNavHost.kt (1)
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryScreen.kt (1)
ReportHistoryScreenContainer(45-68)
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/atom/ReportProcessBadge.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Theme.kt (1)
BitnagilTheme(26-41)
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryScreen.kt (5)
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/template/ReportCategoryBottomSheet.kt (1)
ReportCategoryBottomSheet(30-75)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilTopBar.kt (1)
BitnagilTopBar(22-63)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilChip.kt (1)
BitnagilChip(19-49)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/block/ReportHistoryItem.kt (1)
ReportHistoryItem(32-89)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(21-33)
presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/MyPageScreen.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilOptionButton.kt (1)
BitnagilOptionButton(18-45)
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/template/ReportCategoryBottomSheet.kt (2)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(21-33)presentation/src/main/java/com/threegap/bitnagil/presentation/report/component/ReportCategoryBottomSheet.kt (2)
ReportCategoryBottomSheet(128-134)ReportCategoryBottomSheet(32-78)
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/block/ReportHistoryItem.kt (2)
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/atom/ReportProcessBadge.kt (1)
ReportProcessBadge(17-30)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Theme.kt (1)
BitnagilTheme(26-41)
data/src/main/java/com/threegap/bitnagil/data/report/datasourceImpl/ReportDataSourceImpl.kt (1)
data/src/main/java/com/threegap/bitnagil/data/common/SafeApiCall.kt (1)
safeApiCall(10-25)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (27)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/Color.kt (1)
11-14: LGTM!새로운 색상 상수 추가가 기존 네이밍 컨벤션과 일관되게 잘 구현되었습니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/atom/ReportProcessBadge.kt (1)
17-60: LGTM!뱃지 컴포넌트가 상태별로 적절한 색상을 적용하도록 잘 구현되었습니다. when 표현식에 else 분기를 포함하여 안전성도 확보되어 있고, Preview를 통해 모든 상태를 확인할 수 있어 좋습니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/BitnagilColors.kt (1)
15-18: LGTM!Color.kt에서 정의한 새로운 색상을 BitnagilColors 데이터 클래스에 일관되게 추가했습니다. 기본값이 제공되어 기존 코드에 영향이 없습니다.
app/src/main/java/com/threegap/bitnagil/Route.kt (1)
55-56: LGTM!새로운 ReportHistory 라우트가 기존 패턴과 일관되게 추가되었습니다.
data/src/main/java/com/threegap/bitnagil/data/report/repositoryImpl/ReportRepositoryImpl.kt (1)
19-21: LGTM!제보 이력 조회 기능이 Result 타입을 사용하여 에러 처리를 적절히 하고 있으며, DTO에서 도메인 모델로의 변환도 올바르게 구현되었습니다.
app/src/main/java/com/threegap/bitnagil/navigation/home/HomeNavHost.kt (2)
47-47: LGTM!ReportHistory 화면으로의 네비게이션 파라미터가 기존 패턴과 일관되게 추가되었습니다.
93-93: LGTM!MyPageScreenContainer에 네비게이션 콜백이 적절히 전달되었습니다.
data/src/main/java/com/threegap/bitnagil/data/report/datasourceImpl/ReportDataSourceImpl.kt (1)
17-19: LGTM!기존 패턴과 일관성 있게 구현되었으며,
safeApiCall을 통한 에러 처리가 적절합니다.app/src/main/java/com/threegap/bitnagil/MainNavHost.kt (1)
144-148: LGTM!
launchSingleTop = true플래그를 사용하여 중복 화면 생성을 방지하는 것이 적절합니다.presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportHistorySideEffect.kt (1)
1-3: LGTM!현재는 비어있지만, 향후 사이드 이펙트 추가를 위한 확장 가능한 구조입니다.
data/src/main/java/com/threegap/bitnagil/data/report/service/ReportService.kt (1)
16-17: LGTM!동일한 경로에 대해 HTTP 메서드(GET)로 구분되어 있어 기존 POST 엔드포인트와 충돌이 없습니다.
domain/src/main/java/com/threegap/bitnagil/domain/report/repository/ReportRepository.kt (1)
9-9: LGTM!날짜별로 그룹화된 제보 이력을 반환하는 명확한 메서드 시그니처입니다.
domain/src/main/java/com/threegap/bitnagil/domain/report/model/ReportItem.kt (1)
3-10: 선택적 필드에 대한 nullable 타입 고려가 필요합니다.
imageUrl과address필드가 non-nullable String으로 정의되어 있습니다. API 응답에서 이 값들이 항상 존재한다면 문제없지만, 선택적 필드라면String?으로 정의하는 것이 더 명시적입니다. 현재는 빈 문자열("")로 처리하는 것으로 보이는데, null과 빈 문자열의 의미를 구분할 필요가 있는지 확인해주세요.data/src/main/java/com/threegap/bitnagil/data/report/datasource/ReportDataSource.kt (1)
8-8: LGTM!인터페이스 정의가 명확하며 기존 패턴과 일관성이 있습니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportProcessWithCount.kt (1)
3-12: LGTM!초기 상태를 위한
Init상수를 제공하는 것이 좋은 패턴입니다.presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/MyPageScreen.kt (1)
41-41: LGTM!내 제보 기록 화면으로의 네비게이션 콜백이 올바르게 추가되었습니다. 기존 패턴과 일관성 있게 구현되어 있습니다.
Also applies to: 51-51, 62-62, 106-109, 138-138
domain/src/main/java/com/threegap/bitnagil/domain/report/usecase/GetReportHistoriesUseCase.kt (1)
8-14: LGTM!Use case가 깔끔하게 구현되었습니다. Repository로의 단순 위임이 적절합니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportHistoriesPerDayUiModel.kt (1)
5-8: LGTM!날짜별로 제보 기록을 그룹화하는 UI 모델이 간결하게 구현되었습니다.
domain/src/main/java/com/threegap/bitnagil/domain/report/model/ReportStatus.kt (1)
10-17: LGTM!문자열에서 enum으로의 변환 로직이 적절하게 구현되었습니다. 잘못된 값에 대한 예외 처리도 포함되어 있습니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/block/ReportHistoryItem.kt (1)
91-135: LGTM!다양한 상태의 프리뷰가 잘 구성되어 있어 UI 검증에 도움이 됩니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/component/template/ReportCategoryBottomSheet.kt (1)
77-121: LGTM!카테고리 아이템 컴포넌트가 잘 구현되었습니다. 아이콘, 텍스트, 선택 표시가 적절하게 배치되어 있습니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportHistoryUiModel.kt (1)
14-23: 검증 완료: 코드가 정확합니다.
reportItem.id는 도메인 모델에서Int타입이며,ReportHistoryUiModel의id필드는String타입이므로 문자열 템플릿을 통한 변환은 필요하고 적절합니다. 불필요한 변환이 아닙니다.data/src/main/java/com/threegap/bitnagil/data/report/model/response/ReportItemDto.kt (1)
9-33: LGTM! DTO 구조가 깔끔합니다.데이터 클래스와 도메인 매핑이 적절하게 구현되어 있습니다. kotlinx.serialization을 올바르게 사용하고 있으며, 도메인 모델로의 변환 로직도 명확합니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryScreen.kt (1)
45-68: LGTM! 컨테이너 구조가 적절합니다.Orbit MVI 패턴을 올바르게 사용하고 있으며, 상태 관리와 네비게이션 콜백이 깔끔하게 구성되어 있습니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryViewModel.kt (1)
54-86: LGTM! 사용자 액션 핸들러가 잘 구현되어 있습니다.카테고리 토글 로직과 프로세스 선택 로직이 명확하고 직관적입니다. 바텀시트 상태 관리도 적절합니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportProcess.kt (1)
5-22: LGTM! Enum 정의와 도메인 매핑이 깔끔합니다.모든 도메인 상태가 프레젠테이션 레이어의 상태로 적절히 매핑되어 있습니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportCategory.kt (1)
6-42: LGTM! 카테고리 정의와 매핑이 잘 구현되어 있습니다.도메인 레이어와의 분리가 명확하고, 타입 별칭(type alias)을 사용하여 가독성을 높였습니다. 모든 카테고리가 UI 리소스와 함께 적절히 정의되어 있습니다.
.../src/main/java/com/threegap/bitnagil/data/report/model/response/ReportHistoriesPerDateDto.kt
Show resolved
Hide resolved
...threegap/bitnagil/presentation/reporthistory/component/template/ReportCategoryBottomSheet.kt
Outdated
Show resolved
Hide resolved
...n/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportHistoryState.kt
Show resolved
Hide resolved
...tation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryScreen.kt
Show resolved
Hide resolved
...ion/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryViewModel.kt
Show resolved
Hide resolved
wjdrjs00
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍🏻 고생하셨슴다.. 리뷰 확인해주세요~!
...designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilChip.kt
Outdated
Show resolved
Hide resolved
...ion/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryViewModel.kt
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportProcessWithCount.kt (1)
3-14: 데이터 모델·파생 프로퍼티는 적절하며, 네이밍만 소소한 스타일 제안 드립니다.
titleWithCount에서count == 0일 때 카운트를 숨기고, 그 외엔"${process.title} $count"로 출력하는 로직은 요구사항에 잘 맞아 보입니다.- 다만 도메인 상 음수 카운트가 절대 나오지 않는다면 지금도 충분하지만, 혹시 모를 방어 코드를 선호하신다면
count <= 0으로 조건을 완화하는 것도 고려해볼 수 있습니다. (선택 사항)companion object의val Init은 값 프로퍼티인데 PascalCase를 쓰고 있어서, 코틀린 코딩 스타일 관점에서는DEFAULT,INITIAL같은 상수 네이밍 혹은default/initial같은 lowerCamelCase 네이밍으로 정리하면 가독성이 조금 더 좋아질 수 있습니다. (init은 키워드라 피하신 것 같아서 이해됩니다.)전체적으로 기능·구조에는 문제 없는 상태이고, 위 내용은 전부 선택적인 스타일/가독성 개선 제안입니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilChip.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryScreen.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryViewModel.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/model/ReportProcessWithCount.kt(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryScreen.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/reporthistory/ReportHistoryViewModel.kt
- core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilChip.kt
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
wjdrjs00
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚀🚀
[ PR Content ]
내 제보 기록 화면을 구현합니다.
Related issue
Screenshot 📸
report_history_real_data.mp4
report_history_dummy_data.mp4
Work Description
To Reviewers 📢
Summary by CodeRabbit
새로운 기능
UI 개선
디자인 시스템
✏️ Tip: You can customize this high-level summary in your review settings.