Conversation
- exchangeAuthCodeForToken - logout - Authorization URL 생성
- 아직 미완성 Auth를 위한 정확한 스펙이 필요하다
- TokenLocalDataSource -> TokenStoreLocalDataSourceImp - TokenPrefLocalDataSourceimpl은 확장성을 위해 추가함 - DataSourceModule에서 연결
Log -> Timber
- AuthLocalDataSource : DataStore에 AccessToken값 저장 - AuthRemoteDataSource : HTTP로 연결
SharedPreference -> DataStore
AccessToken이 있는 경우 HTTP Header에 자동으로 추가
- 동일한 탭을 클릭한 경우 기존 모든 스택을 날림
HomeTab에서 빠른 동작으로 다른 탭으로 이동시 다시 Home으로 이동하기 위해서 탭을 눌렀을 때 이동되지 않는 오류 수정
MainThread -> IOThread 로 변경
MainThread -> IOThread
MainThread -> DefaultThread
MainThread -> DefaultThread
- Profile, MM, IM, Dashboard
- 검색, 필터링 등 Toggle을 통해 선택이 필요한 경우 반환값
- Profile 화면에서 로그아웃 버튼 추가 - 로그아웃 시 DataStore의 데이터 삭제 - 로그아웃 시 Login 화면으로 이동
- ProfileRemoteDataSource - ProfileRepository
- FcmRemoteDataSource - FcmRepository
[Feat] 고객사, 공급사별 화면
There was a problem hiding this comment.
Pull Request Overview
This PR implements comprehensive UI screens and navigation for both Customer and Supplier user types in a vehicle exterior management ERP application.
Purpose: Adds complete user interface implementation for customer and supplier workflows including home screens, order/quotation management, invoice handling, profile management, and notification systems.
Key Changes:
- Implemented dual navigation systems for Customer and Supplier user types with separate screen hierarchies
- Added profile management, notification handling, and dashboard workflow tracking
- Integrated FCM push notifications with server-side token registration
Reviewed Changes
Copilot reviewed 147 out of 149 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| secrets.defaults.properties | Added AUTH_BASE_URL configuration for authentication services |
| SupplierVoucherViewModel.kt | New ViewModel for supplier invoice (AR) management with pagination |
| SupplierVoucherScreen.kt | UI screen for displaying supplier invoice list with search functionality |
| SupplierProfileViewModel.kt | Profile management ViewModel with user info and logout functionality |
| SupplierProfileScreen.kt | Profile display screen with company and personal information sections |
| SupplierProfileEditViewModel.kt | Edit profile ViewModel (placeholder implementation for future updates) |
| SupplierProfileEditScreen.kt | Profile editing UI with form fields for company and personal data |
| SupplierOrderViewModel.kt | Purchase order list management with pagination and search |
| SupplierOrderScreen.kt | UI for displaying purchase orders with status badges |
| SupplierNavigationItem.kt | Navigation structure defining supplier app routes and sub-routes |
| SupplierHomeViewModel.kt | Dashboard ViewModel with recent activities and notification count |
| SupplierHomeScreen.kt | Supplier home screen with quick actions and recent workflow activities |
| SupplierApp.kt | Main supplier app scaffold with bottom navigation and nested routing |
| PurchaseOrderDetailViewModel.kt | Purchase order detail fetching with loading states |
| PurchaseOrderDetailScreen.kt | Detailed purchase order view with items table and status |
| NotificationViewModel.kt (Supplier) | Notification list management with read/unread status handling |
| NotificationScreen.kt (Supplier) | Notification list UI with relative time formatting and navigation |
| InvoiceDetailViewModel.kt (Supplier) | Invoice detail management supporting both AP and AR invoices |
| InvoiceDetailScreen.kt (Supplier) | Invoice detail screen with payment confirmation for receivables |
| CustomerVoucherViewModel.kt | Customer invoice (AP) list management |
| CustomerVoucherScreen.kt | Customer invoice list display screen |
| CustomerQuotationViewModel.kt | Quotation list with pagination and filtering |
| CustomerQuotationScreen.kt | Quotation list UI with create button and infinite scroll |
| CustomerProfileViewModel.kt | Customer profile management identical to supplier implementation |
| CustomerProfileScreen.kt | Customer profile display screen |
| CustomerProfileEditViewModel.kt | Customer profile edit ViewModel (placeholder) |
| CustomerProfileEditScreen.kt | Customer profile editing UI |
| CustomerOrderViewModel.kt | Sales order list management with search and pagination |
| CustomerOrderScreen.kt | Sales order list display with status badges |
| CustomerNavigationItem.kt | Customer app navigation routes and sub-routes definition |
| CustomerHomeViewModel.kt | Customer dashboard with recent activities and notifications |
| CustomerHomeScreen.kt | Customer home screen with quick action cards |
| CustomerApp.kt | Main customer app scaffold with navigation |
| SalesOrderDetailViewModel.kt | Sales order detail fetching logic |
| SalesOrderDetailScreen.kt | Sales order detail UI with order progress tracking |
| QuotationDetailViewModel.kt | Quotation detail fetching |
| QuotationDetailScreen.kt | Quotation detail display with customer and item information |
| QuotationCreateViewModel.kt | Quotation creation logic with item selection |
| QuotationCreateScreen.kt | Quotation creation form with date picker and item selection |
| NotificationViewModel.kt (Customer) | Customer notification management |
| NotificationScreen.kt (Customer) | Customer notification list with navigation to related screens |
| InvoiceDetailViewModel.kt (Customer) | Customer invoice detail with payment request functionality |
| InvoiceDetailScreen.kt (Customer) | Customer invoice detail UI |
| StatusBadge.kt | Reusable status badge component |
| SearchBar.kt | Reusable search input component |
| QuickActionCard.kt | Home screen quick action button component |
| ListCard.kt | Reusable list item card component |
| RecentActivityCard.kt | Dashboard activity card with navigation logic |
| CustomBottomBar.kt | Enhanced bottom navigation with back stack management |
| AppNavGraph.kt | Updated main navigation graph |
| MainScreen.kt | User type-based routing to Customer or Supplier apps |
| HomeViewModel.kt | Added FCM token registration on user info load |
| ProfileViewModel.kt | Migrated from Log to Timber |
| RedirectReceiverActivity.kt | OAuth redirect handling migrated to Timber |
| AuthViewModel.kt | Auth flow logging migrated to Timber |
| MyFirebaseMessagingService.kt | Added FCM token server registration with dependency injection |
| Various Repository interfaces | Added new repository interfaces for Profile, Dashboard, Im, Auth, Alarm |
| SalesOrderStatusEnum.kt | Added PENDING, CONFIRMED, CANCELLED states |
| QuotationStatusEnum.kt | Renamed APPROVED to APPROVAL for consistency |
| Domain Models | Added Profile, Dashboard, InventoryItemToggle, AccessToken models |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| Button( | ||
| onClick = { | ||
| viewModel.logout { | ||
| loginNavController.navigate("login") { | ||
| popUpTo(0) | ||
| } | ||
| } | ||
| }, | ||
| modifier = Modifier | ||
| .fillMaxWidth() | ||
| .padding(vertical = 24.dp), | ||
| ) { } |
There was a problem hiding this comment.
The logout button is missing text content. The Button composable has an empty trailing lambda { } which means no text or icon is displayed. This will create a button with no visible label, making it unclear to users what this button does.
Add text like: Text("로그아웃")
| Button( | ||
| onClick = { | ||
| viewModel.logout { | ||
| loginNavController.navigate("login") { | ||
| popUpTo(0) | ||
| } | ||
| } | ||
| }, | ||
| modifier = Modifier | ||
| .fillMaxWidth() | ||
| .padding(vertical = 24.dp), | ||
| ) { } |
There was a problem hiding this comment.
The logout button is missing text content. The Button composable has an empty trailing lambda { } which means no text or icon is displayed. This will create a button with no visible label.
Add text like: Text("로그아웃")
| import android.R.attr.defaultValue | ||
| import android.R.attr.type |
There was a problem hiding this comment.
Unused imports android.R.attr.defaultValue and android.R.attr.type should be removed. These imports are not used in the code.
| fun formatCurrency(amount: Long): String { | ||
| return NumberFormat.getNumberInstance(Locale.KOREA).format(amount) | ||
| } |
There was a problem hiding this comment.
The formatCurrency function is duplicated across multiple screen files (CustomerOrderScreen, SupplierOrderScreen, SupplierVoucherScreen, etc.). Consider extracting this utility function to a common location to avoid code duplication and improve maintainability.
요약
주요 변경 사항
관련 이슈
테스트/검증
확인 사항
스크린샷/로그(선택)