Skip to content

Comments

Feat: Android 프로젝트 초기세팅#6

Merged
parkji1on merged 130 commits intomainfrom
chore/#2-setting
Nov 5, 2025
Merged

Feat: Android 프로젝트 초기세팅#6
parkji1on merged 130 commits intomainfrom
chore/#2-setting

Conversation

@parkji1on
Copy link
Contributor

요약

  • UI - Domain - Data
  • Hilt
  • 의존성
  • Exception
  • Netowkr

주요 변경 사항

  • 변경 요약 1
  • 변경 요약 2

관련 이슈

테스트/검증

  • 어떻게 검증했는지, 영향 범위는 어디인지 간략히 적어주세요.

확인 사항

  • 자기 리뷰 완료
  • 빌드/테스트 통과 확인
  • 문서/주석 업데이트(필요 시)
  • 브레이킹 체인지 없음 또는 마이그레이션 안내 포함

스크린샷/로그(선택)

  • 필요 시 첨부

parkji1on and others added 30 commits September 29, 2025 20:24
Updated the Android CI workflow file name and structure.
- 공통 반환값 : ApiResponse
- Pageable 반환값 : PagenatedResponseDto
- QuotationListItem
- QuotationStatus : 상태 추가
- UserRole : 사용자 상태 정의
- AlarmLocalDataSource, AlarmRemoteDataSource
- AlarmRepository
- Notification 관련 model
- Kotlin Serialization에서는 기본값 or null인 경우 파싱값에서 자동으로 제외하므로 무조건 포함되어야 하는 값이라면 annotation을 추가해야 한다.
- ErrorActivity : 치명적인 오류 발생시 노출
vendor -> supplier
@parkji1on parkji1on requested review from Copilot and k-oyun November 5, 2025 07:09
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR establishes the foundational architecture for an Android ERP application, implementing a clean architecture pattern with UI-Domain-Data layers, Hilt dependency injection, comprehensive exception handling, and Firebase integration.

Key Changes:

  • Clean architecture setup (UI/Domain/Data layers)
  • Hilt dependency injection configuration
  • Custom exception handling system with categorized error types
  • Network layer with Retrofit and OkHttp
  • Firebase services integration (FCM, Analytics, Crashlytics)

Reviewed Changes

Copilot reviewed 173 out of 2032 changed files in this pull request and generated 10 comments.

Show a summary per file
File Description
gradle/libs.versions.toml Added dependencies for Room, DataStore, Firebase, security, and serialization
gradle.properties Enabled Gradle build cache and parallel execution
commitlint.config.js Configured commit message linting rules
app/src/main/res/xml/* Network security and backup configuration
domain/exception/* Comprehensive exception handling framework
domain/model/* Domain models for users, notifications, invoices, orders, suppliers
data/repository/* Repository implementations following clean architecture
di/* Hilt modules for dependency injection
ui/* Screen implementations with Jetpack Compose

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

kotlinxCoroutinesCore = "1.10.2"
timber = "5.0.1"
ktlint = "13.1.0"
secreteGradlePlugin = "2.0.1"
Copy link

Copilot AI Nov 5, 2025

Choose a reason for hiding this comment

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

Corrected spelling of 'secrete' to 'secret'

Suggested change
secreteGradlePlugin = "2.0.1"
secretGradlePlugin = "2.0.1"

Copilot uses AI. Check for mistakes.
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" }
secrets-gradle-plugin = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "secreteGradlePlugin" }
Copy link

Copilot AI Nov 5, 2025

Choose a reason for hiding this comment

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

The version reference 'secreteGradlePlugin' has a spelling error and should be 'secretGradlePlugin'

Copilot uses AI. Check for mistakes.
override val descriptor: SerialDescriptor = serialDescriptor<String>()

override fun serialize(encoder: Encoder, value: NotificationSourceEnum) {
// encoder.encodeString(value.toApiString() ?: )
Copy link

Copilot AI Nov 5, 2025

Choose a reason for hiding this comment

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

There is commented-out code on line 14 that references a toApiString() method. If this is the intended implementation, the commented code should be removed. If the toApiString() approach is preferred, it should be uncommented and the current line 15 removed for clarity.

Suggested change
// encoder.encodeString(value.toApiString() ?: )

Copilot uses AI. Check for mistakes.
Scaffold(
bottomBar = { CustomNavigationBar(navController, SupplierNavigationItem.allDestinations) },
) { innerPadding ->
// 2. 고객사용 NavHost
Copy link

Copilot AI Nov 5, 2025

Choose a reason for hiding this comment

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

Corrected comment - this is the Supplier app, not customer ('고객사' should be '공급업체')

Suggested change
// 2. 고객사용 NavHost
// 2. 공급업체용 NavHost

Copilot uses AI. Check for mistakes.
}
},
// (5) ⭐ 아이콘 동적 변경
// TODO 아이콘을 ImageVector로 변경
Copy link

Copilot AI Nov 5, 2025

Choose a reason for hiding this comment

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

The TODO comment on line 53 is outdated - the code already uses ImageVector for icons. This TODO should be removed.

Suggested change
// TODO 아이콘을 ImageVector로 변경

Copilot uses AI. Check for mistakes.
},
label = { Text(screen.label) },
// (6) ⭐ 색상 동적 변경
// TODO NavigationBarItemDefaults.colors()를 사용하여 선택/비선택 상태에 따른 아이콘 및 라벨 색상을 지정
Copy link

Copilot AI Nov 5, 2025

Choose a reason for hiding this comment

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

The TODO comment on line 69 is outdated - the code already implements NavigationBarItemDefaults.colors(). This TODO should be removed.

Suggested change
// TODO NavigationBarItemDefaults.colors()를 사용하여 선택/비선택 상태에 따른 아이콘 및 라벨 색상을 지정

Copilot uses AI. Check for mistakes.
when (status) {
PermissionStatus.GRANTED -> Timber.tag("TAG").i("Permission Granted")
PermissionStatus.DENIED -> Timber.tag("TAG").i("Permission Denied")
PermissionStatus.NEEDS_RATIONALE -> Timber.tag("TAG").i("Permission Needs_rationals")
Copy link

Copilot AI Nov 5, 2025

Choose a reason for hiding this comment

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

Corrected spelling in log message from 'Needs_rationals' to 'Needs_rationale'

Suggested change
PermissionStatus.NEEDS_RATIONALE -> Timber.tag("TAG").i("Permission Needs_rationals")
PermissionStatus.NEEDS_RATIONALE -> Timber.tag("TAG").i("Permission Needs_rationale")

Copilot uses AI. Check for mistakes.

import androidx.compose.ui.graphics.Color

enum class SupplierCatetoryEnum {
Copy link

Copilot AI Nov 5, 2025

Choose a reason for hiding this comment

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

Corrected spelling of enum class name from 'SupplierCatetoryEnum' to 'SupplierCategoryEnum' throughout the file

Suggested change
enum class SupplierCatetoryEnum {
enum class SupplierCategoryEnum {

Copilot uses AI. Check for mistakes.

// 알림 빌더 생성
val notification = NotificationCompat.Builder(this, DEFAULT_CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher) // TODO: 알림용 작은 아이콘으로 교체 권장
Copy link

Copilot AI Nov 5, 2025

Choose a reason for hiding this comment

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

Using the launcher icon as the notification small icon is not recommended. The launcher icon is typically too large and complex for a status bar notification icon. Create a dedicated small, monochrome, transparent notification icon following Android's notification icon guidelines.

Suggested change
.setSmallIcon(R.mipmap.ic_launcher) // TODO: 알림용 작은 아이콘으로 교체 권장
.setSmallIcon(R.drawable.ic_notification) // 알림용 작은 아이콘 사용 (권장)

Copilot uses AI. Check for mistakes.
Comment on lines +37 to +41
private fun getAccessToken(): String? {
// TODO: DataStore 또는 SharedPreferences에서 토큰 가져오기
// return tokenManager.getAccessToken()
return null
}
Copy link

Copilot AI Nov 5, 2025

Choose a reason for hiding this comment

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

The AuthInterceptor always returns null for the access token, which means authentication headers are never actually added to requests. This will cause all authenticated API calls to fail with 401 errors. This critical TODO must be implemented before the app can function properly.

Copilot uses AI. Check for mistakes.
@parkji1on parkji1on merged commit 94bbb6b into main Nov 5, 2025
1 check failed
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] 프로젝트 기초 세팅

3 participants