-
Notifications
You must be signed in to change notification settings - Fork 0
[Refactor] Home / HomeDetail / Calendar Koin 전환 및 Hilt 의존 제거 #210 #211
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
-home, homedetail
-home, homedetail
|
Caution Review failedThe pull request is closed. WalkthroughHilt 의존성 및 주입 어노테이션을 제거하고 Koin으로 전면 마이그레이션했습니다. 빌드스크립트에서 Hilt 플러그인/의존성/KSP 훅을 제거하고 Koin 의존성을 추가했으며, App에서 Koin을 초기화하고 여러 ViewModel/Repository의 Hilt 어노테이션을 제거, Compose 화면의 기본 ViewModel 공급을 Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant App as App(Application)
participant Koin as Koin(Container)
participant Screen as Composable Screen
participant VM as ViewModel
participant Repo as Repository
rect rgba(200,230,255,0.35)
App->>Koin: startKoin(androidContext, modules...)
note right of Koin: modules 등록\n(calendarModule, homeModule, homeDetailModule)
end
rect rgba(220,255,220,0.28)
Screen->>Koin: koinViewModel<VM>() 요청
Koin-->>VM: ViewModel 인스턴스 생성/제공
VM->>Repo: Repository 의존성 주입(get()/module에서 제공)
Repo-->>VM: Repository 인스턴스 반환
VM-->>Screen: ViewModel 반환(화면 바인딩)
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
📜 Recent review detailsConfiguration used: Organization UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
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: 7
🧹 Nitpick comments (3)
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/viewmodel/GlucoseViewModel.kt (1)
18-21: 선택적 정리: @Inject 어노테이션 제거 고려
@HiltViewModel제거는 잘 처리되었습니다. 다만@Inject어노테이션은 Koin에서 필요하지 않습니다. Koin은HomeDetailModule.kt의viewModel { GlucoseViewModel(get()) }정의를 통해 의존성을 해결합니다.동작에는 문제가 없지만, Koin으로 완전히 전환하려면
@Inject어노테이션을 제거하는 것을 고려해보세요.🔎 제안하는 정리 방법
-import javax.inject.Inject - -class GlucoseViewModel @Inject constructor( +class GlucoseViewModel constructor( private val glucoseRepository: GlucoseRepository, ) : ViewModel() {app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/viewmodel/SleepViewModel.kt (1)
15-18: 선택적 정리: @Inject 어노테이션 제거 고려Hilt 어노테이션 제거는 잘되었습니다. 마찬가지로
@Inject어노테이션도 Koin에서는 필요하지 않으므로 제거를 고려해보세요.🔎 제안하는 정리 방법
-import javax.inject.Inject - -class SleepViewModel @Inject constructor( +class SleepViewModel constructor( private val sleepRepository: SleepRepository, ) : ViewModel() {app/src/main/java/com/konkuk/medicarecall/App.kt (1)
32-38: [선택사항] Koin 초기화에 로깅 추가를 고려해보세요.Koin 설정 시 디버그 로깅을 추가하면 DI 관련 이슈를 추적하기 쉬워요. 특히 마이그레이션 과정에서 유용할 수 있어요.
🔎 로깅 추가 예시
startKoin { androidContext(this@App) + if (BuildConfig.DEBUG) { + logger(org.koin.android.logger.AndroidLogger()) + } modules( homeModule, homeDetailModule ) }
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (20)
app/build.gradle.ktsapp/src/main/java/com/konkuk/medicarecall/App.ktapp/src/main/java/com/konkuk/medicarecall/data/di/HomeDetailModule.ktapp/src/main/java/com/konkuk/medicarecall/data/di/HomeModule.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/calendar/viewmodel/CalendarViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/screen/GlucoseDetailScreen.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/viewmodel/GlucoseViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/screen/MealDetailScreen.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/viewmodel/MealViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/screen/MedicineDetailScreen.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/viewmodel/MedicineViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/screen/SleepDetailScreen.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/viewmodel/SleepViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/screen/StateHealthDetailScreen.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/viewmodel/HealthViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/screen/StateMentalDetailScreen.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/viewmodel/MentalViewModel.ktbuild.gradle.kts
💤 Files with no reviewable changes (2)
- build.gradle.kts
- app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt
🔇 Additional comments (12)
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/screen/StateMentalDetailScreen.kt (1)
33-33: Koin import 전환이 올바르게 적용되었습니다.Hilt의
hiltViewModel에서 Koin의koinViewModel로 import가 정확하게 변경되었습니다.app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/viewmodel/MealViewModel.kt (1)
15-18: Hilt 어노테이션 제거 잘 되었습니다!
@HiltViewModel어노테이션 제거가 깔끔하게 처리되었고,@Inject생성자는 Koin의 생성자 주입과도 잘 작동합니다. AI 요약에 따르면 MealViewModel은 HomeDetailModule에 등록되어 있다고 하니 문제없을 것 같네요.app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/viewmodel/MedicineViewModel.kt (1)
16-19: Koin 마이그레이션 잘 적용되었습니다.
@HiltViewModel제거가 정확하고, 생성자 주입 패턴도 Koin과 잘 호환됩니다. HomeDetailModule에 포함되어 있을 것으로 보이니 괜찮습니다.app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/viewmodel/HealthViewModel.kt (1)
14-17: 마이그레이션이 일관되게 적용되었네요.다른 ViewModel들과 동일한 패턴으로
@HiltViewModel이 제거되었고, HomeDetailModule에 등록되어 있을 것으로 보입니다. 변경 사항 승인합니다!app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/screen/MealDetailScreen.kt (2)
33-33: import 변경 정확합니다.Hilt에서 Koin으로의 import 변경이 올바르게 적용되었습니다.
41-42: koinViewModel() 전환 확인이 필요합니다.
hiltViewModel()에서koinViewModel()로의 전환은 잘 되었는데, CalendarViewModel이 Koin 모듈에 제대로 등록되어 있는지 확인이 필요합니다.MealViewModel은 HomeDetailModule에 포함되어 있어서 문제없을 것 같지만, CalendarViewModel은 calendar 패키지의 공유 컴포넌트라서 어느 모듈에 속하는지 명확하지 않습니다. CalendarViewModel.kt 파일에 남긴 검증 스크립트를 실행해서 확인해보시면 좋을 것 같아요.
등록되지 않았다면 이 화면 진입 시 런타임에 크래시가 발생할 수 있습니다.
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/viewmodel/MentalViewModel.kt (1)
15-18: Hilt → Koin 마이그레이션 잘 적용되었습니다.
@HiltViewModel어노테이션을 제거하고@Inject생성자는 유지하는 것이 올바른 접근입니다.@Inject는 JSR-330 표준 어노테이션으로 Koin에서도 지원됩니다.app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/screen/MedicineDetailScreen.kt (1)
36-36: ViewModel 주입 방식이 Koin으로 깔끔하게 전환되었습니다.Import와 default parameter가 모두
koinViewModel()로 일관되게 변경되어 있습니다.Also applies to: 44-45
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/screen/StateHealthDetailScreen.kt (1)
34-34: Koin 전환이 올바르게 적용되었습니다.Import와 ViewModel 주입 방식이 모두 일관되게 변경되었습니다.
Also applies to: 41-42
app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt (1)
70-70: Home 화면의 Koin 전환이 완료되었습니다.Import와 ViewModel 주입이 깔끔하게
koinViewModel()로 변경되었습니다.Also applies to: 75-75
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/screen/SleepDetailScreen.kt (1)
32-32: LGTM! Koin 마이그레이션 잘 적용되었습니다
hiltViewModel()에서koinViewModel()로의 전환이 올바르게 처리되었습니다. import 구문도 적절히 추가되었고, 두 ViewModel 모두 Koin을 통해 주입되도록 설정되었습니다.Also applies to: 40-41
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/screen/GlucoseDetailScreen.kt (1)
50-50: LGTM! Koin 마이그레이션이 올바르게 적용되었습니다
hiltViewModel()에서koinViewModel()로의 전환이 정확하게 처리되었습니다. import 구문도 적절히 추가되었고, GlucoseViewModel이 Koin을 통해 주입되도록 설정되었습니다.Also applies to: 59-59
| // Koin | ||
| implementation("io.insert-koin:koin-core:3.5.3") | ||
| implementation("io.insert-koin:koin-android:3.5.3") | ||
| implementation("io.insert-koin:koin-androidx-compose:3.5.3") |
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.
🧩 Analysis chain
🌐 Web query:
latest Koin version 2025 Android Compose
💡 Result:
Latest stable Koin for Android Compose (artifact io.insert-koin:koin-androidx-compose) is 4.1.1. The next pre-release is 4.2.0-beta2 (pre-release). [1][2]
Sources:
- GitHub releases (4.2.0-beta2 pre-release). [1]
- Maven / Koin docs showing koin-androidx-compose / koin-bom 4.1.1 (stable). [2]
Koin 버전을 4.1.1로 업데이트하면 좋겠습니다
현재 사용 중인 Koin 3.5.3은 최신 안정 버전(4.1.1)에서 꽤 뒤떨어져 있습니다. 한번 업데이트해 보는 건 어떨까요?
🤖 Prompt for AI Agents
In app/build.gradle.kts around lines 109 to 112, the Koin dependencies are
pinned to 3.5.3; update all io.insert-koin artifacts (koin-core, koin-android,
koin-androidx-compose) to version 4.1.1 to align with the newer stable release,
then run Gradle sync/build and address any API changes or deprecation fixes
(adjust imports and module setup where necessary) so the project compiles and
tests pass.
|
|
||
| class App : Application(), KoinComponent { | ||
|
|
||
| private val fcmRepository: FcmRepository by inject() |
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.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Search for FcmRepository Koin module definition
echo "=== Searching for FcmRepository Koin module definition ==="
rg -n "FcmRepository" --type=kt -g '*/di/*.kt' -C 3
echo -e "\n=== Broader search for FcmRepository in Koin context ==="
rg -n "FcmRepository" --type=kt -C 2 | head -100Repository: Medicare-Call/Medicare-Call-Android
Length of output: 266
🏁 Script executed:
#!/bin/bash
# Find all kotlin files with FcmRepository
echo "=== Searching for FcmRepository in Kotlin files ==="
rg -n "FcmRepository" --include="*.kt" -C 2
echo -e "\n=== Searching for Koin module definitions ==="
rg -n "module\s*{|single.*|factory.*" --include="*.kt" | grep -i fcm
echo -e "\n=== Checking App.kt startKoin configuration ==="
find . -name "App.kt" -type f | xargs cat -n | grep -A 20 "startKoin"Repository: Medicare-Call/Medicare-Call-Android
Length of output: 2355
🏁 Script executed:
#!/bin/bash
# Search for FcmRepository in all files
echo "=== Searching for FcmRepository everywhere ==="
find . -type f -name "*.kt" | xargs grep -l "FcmRepository" 2>/dev/null
echo -e "\n=== Searching for Koin modules ==="
find . -type f -name "*.kt" | xargs grep -l "homeModule\|homeDetailModule" 2>/dev/null
echo -e "\n=== Looking for di/module directories ==="
find . -type d -name "di" -o -type d -name "module" 2>/dev/null | head -20
echo -e "\n=== Checking for any FcmRepository related code ==="
find . -type f -name "*.kt" | xargs grep "Fcm" 2>/dev/null | head -30Repository: Medicare-Call/Medicare-Call-Android
Length of output: 4830
🏁 Script executed:
#!/bin/bash
# Check RepositoryModule content
echo "=== RepositoryModule.kt content ==="
cat ./app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.kt
echo -e "\n=== HomeModule.kt content (for comparison) ==="
cat ./app/src/main/java/com/konkuk/medicarecall/data/di/HomeModule.kt | head -30
echo -e "\n=== HomeDetailModule.kt content (for comparison) ==="
cat ./app/src/main/java/com/konkuk/medicarecall/data/di/HomeDetailModule.kt | head -30Repository: Medicare-Call/Medicare-Call-Android
Length of output: 8149
RepositoryModule을 Koin으로 변환 후 startKoin에 등록해야 합니다.
FcmRepository가 정의된 RepositoryModule이 Hilt/Dagger 방식(@module, @Installin, @BINDS)으로 작성되어 있는데, App.kt가 Koin(by inject(), startKoin)으로 마이그레이션되면서 두 DI 프레임워크가 충돌하고 있어요. 런타임에 FcmRepository를 찾을 수 없어 앱이 크래시될 거예요.
RepositoryModule을 Koin 문법으로 변환하고 startKoin의 modules에 추가해야 합니다:
변환 예시
val repositoryModule = module {
single<FcmRepository> { FcmRepositoryImpl(...) }
// 다른 repository들도 동일하게...
}그 다음 App.kt의 startKoin 호출에 추가:
modules(
homeModule,
homeDetailModule,
repositoryModule // 추가
)🤖 Prompt for AI Agents
In app/src/main/java/com/konkuk/medicarecall/App.kt around line 25, App.kt still
expects FcmRepository via Koin injection (private val fcmRepository:
FcmRepository by inject()) but the RepositoryModule was left as Hilt/Dagger
bindings, so Koin cannot resolve FcmRepository at runtime; convert the existing
RepositoryModule to Koin syntax (create a Koin module that provides
single<FcmRepository> { FcmRepositoryImpl(...) } and any other repository
bindings), then add that new repositoryModule to the startKoin modules(...) list
in App.kt so Koin can supply FcmRepository via inject().
| startKoin { | ||
| androidContext(this@App) | ||
| modules( | ||
| homeModule, | ||
| homeDetailModule | ||
| ) | ||
| } |
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.
현재 homeModule과 homeDetailModule 두 개만 등록되어 있는데, AI 요약과 PR 설명을 보면 앱에는 다음과 같은 기능들이 더 있어요:
- Calendar, Glucose, Meal, Medicine, Sleep, Health, Mental 등
이 기능들의 ViewModel도 Koin으로 마이그레이션되었다면 (AI 요약에서 언급됨), 해당 모듈들도 여기에 등록해야 해요. 그렇지 않으면 해당 화면 진입 시 NoBeanDefFoundException이 발생할 거예요.
만약 이 PR이 Home/HomeDetail만 마이그레이션하는 단계적 전환이라면, 아직 마이그레이션되지 않은 화면들은 여전히 Hilt를 사용하도록 해야 하는데, 현재 설정으로는 Hilt와 Koin을 동시에 사용하기 어려울 수 있어요.
다음 스크립트로 마이그레이션 현황을 확인해볼게요:
#!/bin/bash
# 모든 Koin 모듈 파일 찾기
echo "=== All Koin modules in the project ==="
fd -e kt . app/src/main/java/com/konkuk/medicarecall/data/di/ --exec echo {}
echo -e "\n=== Koin module definitions (val xxxModule) ==="
rg -n "^val \w+Module.*=.*module" --type=kt app/src/main/java/com/konkuk/medicarecall/data/di/ -C 1
echo -e "\n=== ViewModels still using @HiltViewModel ==="
rg -n "@HiltViewModel" --type=kt app/src/main/java/com/konkuk/medicarecall/
echo -e "\n=== Screens using koinViewModel() ==="
rg -n "koinViewModel\(\)" --type=kt app/src/main/java/com/konkuk/medicarecall/ui/🤖 Prompt for AI Agents
In app/src/main/java/com/konkuk/medicarecall/App.kt around lines 32 to 38, only
homeModule and homeDetailModule are being registered with Koin which will cause
NoBeanDefFoundException at runtime for other migrated features (Calendar,
Glucose, Meal, Medicine, Sleep, Health, Mental) whose ViewModels/providers are
expected in Koin; update the startKoin modules(...) call to include all Koin
modules that define those feature ViewModels (or revert those screens to Hilt if
this PR is intentionally partial), by adding the missing module variables to the
modules list so every migrated ViewModel/service has a corresponding Koin module
registered at app startup.
| val homeDetailModule = module { | ||
|
|
||
| viewModel { | ||
| GlucoseViewModel( | ||
| get() | ||
| ) | ||
| } | ||
|
|
||
| viewModel { | ||
| MealViewModel( | ||
| get() | ||
| ) | ||
| } | ||
|
|
||
| viewModel { | ||
| MedicineViewModel( | ||
| get() | ||
| ) | ||
| } | ||
|
|
||
| viewModel { | ||
| SleepViewModel( | ||
| get() | ||
| ) | ||
| } | ||
|
|
||
| viewModel { | ||
| HealthViewModel( | ||
| get() | ||
| ) | ||
| } | ||
|
|
||
| viewModel { | ||
| MentalViewModel( | ||
| get() | ||
| ) | ||
| } | ||
| } |
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.
🧩 Analysis chain
🏁 Script executed:
# First, let's understand the structure and find relevant files
find app/src/main/java/com/konkuk/medicarecall/data/di -type f -name "*.kt" 2>/dev/null | head -20Repository: Medicare-Call/Medicare-Call-Android
Length of output: 412
🏁 Script executed:
# Search for repository registration patterns in Koin modules
rg -n "single|factory|bind" app/src/main/java/com/konkuk/medicarecall/data/di/ --type=kt -A 2Repository: Medicare-Call/Medicare-Call-Android
Length of output: 105
🏁 Script executed:
# Check the ViewModel implementations to see their actual dependencies
rg -n "class.*ViewModel" app/src/main/java/com/konkuk/medicarecall/ --type=kt -A 5 | grep -E "class.*ViewModel|Repository"Repository: Medicare-Call/Medicare-Call-Android
Length of output: 105
🏁 Script executed:
# Look for repository registrations specifically
rg -n "Repository" app/src/main/java/com/konkuk/medicarecall/data/di/ --type=ktRepository: Medicare-Call/Medicare-Call-Android
Length of output: 105
🏁 Script executed:
# Read the RepositoryModule.kt to see what repositories are registered
cat app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.ktRepository: Medicare-Call/Medicare-Call-Android
Length of output: 6443
🏁 Script executed:
# Read HomeDetailModule.kt to see the full context
cat app/src/main/java/com/konkuk/medicarecall/data/di/HomeDetailModule.ktRepository: Medicare-Call/Medicare-Call-Android
Length of output: 1217
🏁 Script executed:
# Search for repository registration patterns without type flag
rg -n "single.*Repository|factory.*Repository" app/src/main/java/com/konkuk/medicarecall/data/di/Repository: Medicare-Call/Medicare-Call-Android
Length of output: 61
🏁 Script executed:
# Find ViewModel class definitions and their constructors
rg -n "class.*ViewModel" app/src/main/java/com/konkuk/medicarecall --context=3 | head -100Repository: Medicare-Call/Medicare-Call-Android
Length of output: 11256
🏁 Script executed:
# Read one of the ViewModel files completely to check for @HiltViewModel
cat app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/viewmodel/SleepViewModel.ktRepository: Medicare-Call/Medicare-Call-Android
Length of output: 3132
🏁 Script executed:
# Check HealthViewModel
cat app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/viewmodel/HealthViewModel.ktRepository: Medicare-Call/Medicare-Call-Android
Length of output: 1739
🏁 Script executed:
# Check another one
cat app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/viewmodel/GlucoseViewModel.ktRepository: Medicare-Call/Medicare-Call-Android
Length of output: 4231
🏁 Script executed:
# Check if there are any Koin configurations elsewhere
rg -n "startKoin|KoinApplication" app/src/main/java --context=3Repository: Medicare-Call/Medicare-Call-Android
Length of output: 1186
Koin과 Hilt 의존성 주입 프레임워크 혼용 문제 수정 필요
리포지토리들(GlucoseRepository, MealRepository, MedicineRepository, SleepRepository, HealthRepository, MentalRepository)은 RepositoryModule.kt에서 Hilt(@module, @BINDS)로 올바르게 등록되었습니다.
하지만 homeDetailModule의 ViewModel들은 Koin DSL로 등록되어 있으면서 동시에 @Inject 생성자를 사용하고 있습니다. 이는 두 개의 DI 프레임워크(Hilt와 Koin)를 섞어서 사용하는 것으로, Koin의 get() 호출이 Hilt에서 관리하는 리포지토리를 찾을 수 없어 런타임 오류를 발생시킬 수 있습니다.
프로젝트에서 단일 DI 프레임워크(Hilt 또는 Koin)로 통일하거나, 혼용할 경우 명시적인 구성이 필요합니다.
🤖 Prompt for AI Agents
In app/src/main/java/com/konkuk/medicarecall/data/di/HomeDetailModule.kt around
lines 12 to 49, the ViewModels are registered with Koin while their repositories
are provided by Hilt, causing mixed-DI runtime failures; to fix, remove this
Koin module and migrate these ViewModels to Hilt by annotating each ViewModel
with @HiltViewModel and using @Inject constructors (or alternatively provide
them from a Hilt @Module), ensuring all DI for repositories and ViewModels is
handled solely by Hilt so no Koin get() calls try to resolve Hilt-managed
bindings.
| val homeModule = module { | ||
|
|
||
| viewModel { (savedStateHandle: SavedStateHandle) -> | ||
| HomeViewModel( | ||
| eldersInfoRepository = get(), | ||
| homeRepository = get(), | ||
| eldersHealthInfoRepository = get(), | ||
| savedStateHandle = savedStateHandle | ||
| // 화면 재생성 및 프로세스 복구를 위해 elderId를 SavedStateHandle로 관리 | ||
| // SavedStateHandle은 Android 전용으로 KMP 공용 대상이 아님 | ||
| ) | ||
| } | ||
| } |
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.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
echo "=== 1. Repository 모듈들이 Koin에 등록되어 있는지 확인 ==="
find . -type f -name "*.kt" | xargs grep -l "di\|Module" | head -10
echo ""
echo "=== 2. DI 폴더에서 모든 모듈 파일 찾기 ==="
fd -e kt "Module" --path "*/di/*"
echo ""
echo "=== 3. HomeModule.kt의 전체 내용 ==="
cat -n app/src/main/java/com/konkuk/medicarecall/data/di/HomeModule.kt 2>/dev/null || echo "파일을 찾을 수 없습니다"
echo ""
echo "=== 4. Repository 관련 DI 모듈 검색 ==="
find . -path "*/di/*" -name "*.kt" -exec grep -l "Repository" {} \;Repository: Medicare-Call/Medicare-Call-Android
Length of output: 2287
🏁 Script executed:
#!/bin/bash
echo "=== 1. RepositoryModule.kt 내용 확인 ==="
cat -n app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.kt
echo -e "\n=== 2. HomeScreen.kt 파일 찾기 ==="
find . -name "HomeScreen.kt" -type f
echo -e "\n=== 3. HomeViewModel.kt 파일 찾기 ==="
find . -name "HomeViewModel.kt" -type fRepository: Medicare-Call/Medicare-Call-Android
Length of output: 7723
🏁 Script executed:
#!/bin/bash
echo "=== 1. HomeScreen.kt에서 viewModel 사용 확인 ==="
cat app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt
echo -e "\n=== 2. HomeViewModel.kt 생성자 확인 ==="
head -50 app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt
echo -e "\n=== 3. 앱의 DI 초기화 확인 (MainActivity 또는 Application) ==="
rg -n "koin|hilt|Hilt|Koin" app/src/main/java/com/konkuk/medicarecall/MainActivity.kt -A 3Repository: Medicare-Call/Medicare-Call-Android
Length of output: 24803
DI 프레임워크 혼용으로 인한 의존성 주입 충돌 발생 위험
현재 코드에서 Hilt와 Koin이 혼용되어 있어 런타임 크래시가 발생할 수 있습니다:
- HomeModule은 Koin 컨테이너에서
get()으로 repository 찾으려 함 - 하지만 3개 repository(
EldersInfoRepository,HomeRepository,EldersHealthInfoRepository)는 모두 Hilt 컨테이너에만 등록됨 (RepositoryModule.kt @BINDS) - HomeViewModel은 @Inject 생성자로 Hilt 의존성 주입을 기대함
- HomeScreen에서는 **
koinViewModel()**로 Koin에서 주입받으려 함
이는 앱 실행 시 NoSuchElementException 또는 BeanDefinitionException을 발생시킵니다.
해결책: 다음 중 하나 선택
- Hilt로 통일 (권장): HomeModule 제거, RepositoryModule처럼 @Module/@BINDS로 HomeViewModel 등록, HomeScreen에서
hiltViewModel()사용 - Koin으로 통일: Hilt 제거, RepositoryModule을 Koin 모듈로 마이그레이션, 모든 DI를 Koin으로 관리
🤖 Prompt for AI Agents
In app/src/main/java/com/konkuk/medicarecall/data/di/HomeModule.kt around lines
9-21, the Koin-based HomeModule is creating HomeViewModel with get() calls while
the three repositories and the ViewModel are registered with Hilt, causing DI
container mismatch and runtime crashes; fix by unifying DI: recommended — remove
this Koin HomeModule, add a Hilt @Module that provides/binds HomeViewModel (use
@HiltViewModel and @Inject constructor or @Binds if appropriate) and update
HomeScreen to use hiltViewModel(), or alternatively migrate the repository
bindings from Hilt into a Koin module and keep this Koin HomeModule so all
dependencies are provided by Koin.
|
|
||
| class CalendarViewModel @Inject constructor() : ViewModel() { |
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.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
echo "=== 1. Searching for CalendarViewModel in Module files ==="
find . -name "*Module.kt" -type f | head -20
echo -e "\n=== 2. Searching for CalendarViewModel registration in all Kotlin files ==="
rg -n "CalendarViewModel" --type=kt -C 3 | head -100
echo -e "\n=== 3. Specifically searching for viewModel registration patterns ==="
rg -n "viewModel.*\{" --type=kt -A 2 | grep -A 2 "Calendar\|viewModel" | head -80
echo -e "\n=== 4. Checking for koinViewModel usage ==="
rg -n "koinViewModel" --type=kt -C 2 | head -100Repository: Medicare-Call/Medicare-Call-Android
Length of output: 772
🏁 Script executed:
#!/bin/bash
echo "=== 1. Search for CalendarViewModel in all files ==="
rg -n "CalendarViewModel" -C 3 | head -150
echo -e "\n=== 2. Search for koinViewModel usage ==="
rg -n "koinViewModel" -C 2 | head -100
echo -e "\n=== 3. Check HomeDetailModule.kt content ==="
cat -n app/src/main/java/com/konkuk/medicarecall/data/di/HomeDetailModule.kt 2>/dev/null || echo "File not found"
echo -e "\n=== 4. Check HomeModule.kt content ==="
cat -n app/src/main/java/com/konkuk/medicarecall/data/di/HomeModule.kt 2>/dev/null || echo "File not found"
echo -e "\n=== 5. Search for viewModel { pattern ==="
rg -n "viewModel\s*\{" -C 3 | head -100Repository: Medicare-Call/Medicare-Call-Android
Length of output: 29199
🏁 Script executed:
#!/bin/bash
echo "=== Searching for any other module files ==="
find . -name "*Module.kt" -type f | grep -v build
echo -e "\n=== Checking if CalendarViewModel is registered anywhere ==="
rg -n "CalendarViewModel" --type-list
echo -e "\n=== Looking for viewModel { " without specific type ==="
rg -n "viewModel\s*\{" -B 1 -A 3 | grep -C 3 "Calendar\|function\|=>"Repository: Medicare-Call/Medicare-Call-Android
Length of output: 1006
🏁 Script executed:
#!/bin/bash
echo "=== Checking ApiModule.kt ==="
cat app/src/main/java/com/konkuk/medicarecall/data/di/ApiModule.kt
echo -e "\n=== Checking NetworkModule.kt ==="
cat app/src/main/java/com/konkuk/medicarecall/data/di/NetworkModule.kt
echo -e "\n=== Checking RepositoryModule.kt ==="
head -50 app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.kt
echo -e "\n=== Final verification: grep for CalendarViewModel across all di files ==="
grep -r "CalendarViewModel" app/src/main/java/com/konkuk/medicarecall/data/di/ 2>/dev/null || echo "Not found in di folder"Repository: Medicare-Call/Medicare-Call-Android
Length of output: 11623
CalendarViewModel을 Koin 모듈에 등록해야 합니다.
CalendarViewModel이 HomeDetailModule이나 HomeModule에 등록되어 있지 않은데, MealDetailScreen, SleepDetailScreen, MedicineDetailScreen, StateHealthDetailScreen, StateMentalDetailScreen 등 여러 detail 화면에서 koinViewModel<CalendarViewModel>()로 주입받고 있습니다.
현재 상태로는 이 화면들이 열릴 때 런타임에 FactoryNotFoundException이 발생할 거예요. HomeDetailModule에 CalendarViewModel을 등록해 주면 됩니다.
🤖 Prompt for AI Agents
In
app/src/main/java/com/konkuk/medicarecall/ui/feature/calendar/viewmodel/CalendarViewModel.kt
around lines 12-13, CalendarViewModel is not registered with Koin but many
detail screens call koinViewModel<CalendarViewModel>(), which will cause
FactoryNotFoundException at runtime; fix by adding a view model registration for
CalendarViewModel in HomeDetailModule (or HomeModule) so Koin can provide it
(and ensure the module is loaded at app start).
.../com/konkuk/medicarecall/ui/feature/homedetail/statemental/screen/StateMentalDetailScreen.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: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt (1)
23-27: 파이프라인 린트 오류 수정이 필요해요.다른 ViewModel들과 마찬가지로 미사용
javax.inject.Injectimport와 클래스 선언부 괄호 앞 공백 이슈가 있어요.🔧 수정 제안
import retrofit2.HttpException -import javax.inject.Inject data class ElderInfo(val id: Int, val name: String, val phone: String?) -class HomeViewModel ( +class HomeViewModel( private val eldersInfoRepository: EldersInfoRepository,
♻️ Duplicate comments (1)
app/src/main/java/com/konkuk/medicarecall/App.kt (1)
25-25: FcmRepository Koin 등록이 필요해요.이전 리뷰에서 지적된 것처럼,
FcmRepository가by inject()로 주입되지만 RepositoryModule이 아직 Hilt 방식으로 되어 있어요. 런타임에NoBeanDefFoundException이 발생할 거예요.RepositoryModule을 Koin으로 전환하고
startKoin의 modules에 추가하거나, 이 PR 범위 외라면 FcmRepository 주입을 임시로 다른 방식으로 처리해야 해요.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
app/src/main/java/com/konkuk/medicarecall/App.ktapp/src/main/java/com/konkuk/medicarecall/data/di/CalendarModule.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/calendar/viewmodel/CalendarViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/viewmodel/GlucoseViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/viewmodel/MealViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/viewmodel/MedicineViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/viewmodel/SleepViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/viewmodel/HealthViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/viewmodel/MentalViewModel.kt
🚧 Files skipped from review as they are similar to previous changes (1)
- app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/viewmodel/MedicineViewModel.kt
🧰 Additional context used
🪛 GitHub Actions: Android CI
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/viewmodel/HealthViewModel.kt
[error] 14-14: SpacingAroundParens: Unexpected spacing before '('
[error] 12-12: NoUnusedImports: Unused import
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/viewmodel/MentalViewModel.kt
[error] 14-14: SpacingAroundParens: Unexpected spacing before '('
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/viewmodel/GlucoseViewModel.kt
[error] 16-16: NoUnusedImports: Unused import
[error] 18-18: SpacingAroundParens: Unexpected spacing before '('
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/viewmodel/SleepViewModel.kt
[error] 15-15: SpacingAroundParens: Unexpected spacing before '('
[error] 13-13: NoUnusedImports: Unused import
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/viewmodel/MealViewModel.kt
[error] 13-13: NoUnusedImports: Unused import
[error] 15-15: SpacingAroundParens: Unexpected spacing before '('
app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt
[error] 27-27: SpacingAroundParens: Unexpected spacing before '('
[error] 23-23: NoUnusedImports: Unused import
🔇 Additional comments (5)
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/viewmodel/MentalViewModel.kt (1)
14-16: Hilt → Koin 마이그레이션 깔끔하게 완료!Hilt 어노테이션 제거하고 일반 생성자로 전환한 것 잘 되었습니다. Koin 모듈에서 DI 처리가 이루어질 거예요.
app/src/main/java/com/konkuk/medicarecall/ui/feature/calendar/viewmodel/CalendarViewModel.kt (1)
11-11: LGTM!Hilt 어노테이션 제거가 깔끔하게 되었고, CalendarModule.kt에서 Koin 모듈로 잘 등록되어 있어요. 이전 리뷰에서 지적된 이슈가 해결되었네요. 👍
app/src/main/java/com/konkuk/medicarecall/data/di/CalendarModule.kt (1)
1-12: LGTM!CalendarViewModel을 위한 Koin 모듈이 잘 추가되었어요. 이전 리뷰에서 언급된
FactoryNotFoundException문제가 해결됩니다. 👍app/src/main/java/com/konkuk/medicarecall/App.kt (1)
32-39: calendarModule 추가 확인! 👍이전 리뷰에서 누락되었던
calendarModule이 잘 추가되었어요. CalendarViewModel 관련 런타임 크래시 이슈가 해결됩니다.app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt (1)
27-32: Hilt → Koin 전환 잘 되었어요!
eldersHealthInfoRepository의존성 추가 및 Hilt 어노테이션 제거가 깔끔하게 되었고, HomeModule.kt에서 올바르게 주입되고 있네요.
...ava/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/viewmodel/GlucoseViewModel.kt
Outdated
Show resolved
Hide resolved
...ava/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/viewmodel/GlucoseViewModel.kt
Outdated
Show resolved
Hide resolved
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/viewmodel/MealViewModel.kt
Outdated
Show resolved
Hide resolved
...rc/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/viewmodel/SleepViewModel.kt
Outdated
Show resolved
Hide resolved
.../java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/viewmodel/HealthViewModel.kt
Outdated
Show resolved
Hide resolved
.../java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/viewmodel/MentalViewModel.kt
Outdated
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)
app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt (1)
44-44: 중복된 로딩 상태를 정리하면 좋을 것 같아요.Line 44의
isLoading프로퍼티가_homeUiState의isLoading필드와 중복되는 것 같습니다. 코드 전반에서_homeUiState.copy(isLoading = ...)형태로 사용하고 있는데, Line 44의 별도 프로퍼티는 사용되지 않는 것으로 보입니다. 혹시 이전 리팩토링에서 남은 코드라면 제거하는 것이 코드 가독성에 도움이 될 것 같습니다.🔎 제안하는 수정
- var isLoading by mutableStateOf(true) - fun callImmediate(
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/viewmodel/GlucoseViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/viewmodel/MealViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/viewmodel/MedicineViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/viewmodel/SleepViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/viewmodel/HealthViewModel.ktapp/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/viewmodel/MentalViewModel.kt
🚧 Files skipped from review as they are similar to previous changes (4)
- app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/viewmodel/HealthViewModel.kt
- app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/viewmodel/MealViewModel.kt
- app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/viewmodel/MedicineViewModel.kt
- app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/viewmodel/MentalViewModel.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: ci-build
🔇 Additional comments (3)
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/viewmodel/SleepViewModel.kt (1)
14-16: 깔끔하게 마이그레이션 완료했네요! 👍Hilt 어노테이션이 완벽하게 제거되었고, 이전 리뷰에서 지적된 문제들도 모두 해결됐어요. Koin 모듈에 SleepViewModel이 제대로 등록되어 있고 (HomeDetailModule.kt), SleepDetailScreen에서도
koinViewModel()으로 잘 주입받고 있어요. 멋져요!app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt (1)
26-31: SavedStateHandle의 Koin 설정이 이미 올바르게 구현되어 있습니다. 마이그레이션이 깔끔하게 완료됐네요.HomeModule.kt에서
viewModel { (savedStateHandle: SavedStateHandle) ->패턴으로 올바르게 처리되고 있으며, 모든 의존성이 적절하게 주입되고 있습니다. 특별한 추가 설정은 필요 없습니다.app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/viewmodel/GlucoseViewModel.kt (1)
17-19: Hilt에서 Koin으로의 마이그레이션이 깔끔하게 완료되었습니다.클래스 선언이 올바르게 정리되었고, 이전에 지적된 이슈들(미사용 import, 공백 문제)도 모두 해결되었습니다. HomeDetailModule에서
viewModel { GlucoseViewModel(get(),) }로 등록되고, GlucoseDetailScreen에서koinViewModel()로 주입되는 부분까지 일관성 있게 연동되어 있습니다.
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: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HomeRepositoryImpl.kt (1)
20-23: 문자열 보간 오류 수정 필요Line 22에서
$Int로 작성되어 있는데, 이는$elderId의 오타로 보입니다. 현재는 "Int"라는 문자열이 로그에 출력됩니다.🔎 수정 제안
Log.d( "httplog", - "전화 걸림, 어르신: $Int, 시간: $careCallOption", + "전화 걸림, 어르신: $elderId, 시간: $careCallOption", )app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HealthRepositoryImpl.kt (1)
11-19: Null 안전성 개선 필요Line 17에서
symptomList!!로 강제 언래핑을 사용하고 있는데, Line 15에서는orEmpty()로 null 처리를 하고 있습니다.symptomList가 null일 경우 NPE가 발생할 수 있습니다.🔎 안전한 null 처리 제안
runCatching { val response = healthService.getDailyHealth(elderId, date.toString()) HealthUiState( symptoms = response.symptomList.orEmpty(), symptomAnalysis = response.analysisComment.orEmpty(), - isRecorded = response.symptomList!!.isNotEmpty() || !response.analysisComment.isNullOrBlank(), + isRecorded = !response.symptomList.isNullOrEmpty() || !response.analysisComment.isNullOrBlank(), ) }
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/GlucoseRepositoryImpl.ktapp/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HealthRepositoryImpl.ktapp/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HomeRepositoryImpl.ktapp/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/MealRepositoryImpl.ktapp/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/MedicineRepositoryImpl.ktapp/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/MentalRepositoryImpl.ktapp/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SleepRepositoryImpl.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: ci-build
🔇 Additional comments (6)
app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/MentalRepositoryImpl.kt (1)
11-13: Koin 마이그레이션 반영 완료생성자에서
@Inject어노테이션이 제거되었습니다. Koin 기반 DI로의 전환이 올바르게 적용되었습니다.app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/MedicineRepositoryImpl.kt (1)
11-14: Koin 마이그레이션 반영 완료생성자에서
@Inject어노테이션이 제거되었으며, 두 개의 의존성이 Koin을 통해 주입될 준비가 되었습니다.app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HomeRepositoryImpl.kt (1)
10-12: Koin 마이그레이션 반영 완료생성자에서
@Inject어노테이션이 제거되었습니다.app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SleepRepositoryImpl.kt (1)
15-17: Koin 마이그레이션 반영 완료생성자에서
@Inject어노테이션이 제거되었으며, Koin 기반 DI로 전환이 완료되었습니다.app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HealthRepositoryImpl.kt (1)
8-10: Koin 마이그레이션 반영 완료생성자에서
@Inject어노테이션이 제거되었습니다.app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/GlucoseRepositoryImpl.kt (1)
8-10: GlucoseRepositoryImpl 생성자는 Hilt 프로젝트에서 올바르게 작성됨
@Inject어노테이션 제거는 정상입니다. 이 프로젝트는 Hilt를 사용 중이며, RepositoryModule.kt에서@Binds로 GlucoseRepositoryImpl이 이미 바인딩되어 있으므로 생성자 인젝션이 제대로 작동합니다.
| class MealRepositoryImpl( | ||
| private val mealService: MealService, | ||
| ) : MealRepository { |
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.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Search for Koin module definitions and MealRepositoryImpl/MealRepository registration
echo "=== Searching for Koin modules with MealRepositoryImpl/MealRepository ==="
rg -n 'MealRepositoryImpl|MealRepository' --type=kt -g '*Module.kt' -A3 -B3
echo ""
echo "=== Searching for all Koin module files ==="
fd -e 'kt' -p '.*Module\.kt$'
echo ""
echo "=== Searching for Koin 'module' function or Di setup ==="
rg -n 'fun.*module|val.*module' --type=kt -l | head -20Repository: Medicare-Call/Medicare-Call-Android
Length of output: 728
🏁 Script executed:
#!/bin/bash
# Check RepositoryModule.kt for MealRepository registration
echo "=== Contents of RepositoryModule.kt ==="
cat -n app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.kt
echo ""
echo "=== Searching for MealRepository in all files (broader search) ==="
rg 'MealRepository' -i --type=kotlinRepository: Medicare-Call/Medicare-Call-Android
Length of output: 8933
🏁 Script executed:
#!/bin/bash
# Double-check what DI framework is being used - look for Koin vs Hilt in imports and dependencies
echo "=== Check RepositoryModule.kt imports ==="
head -n 51 app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.kt | grep -E '(import|dagger|koin)'
echo ""
echo "=== Check if any Koin modules exist ==="
rg 'org\.koin' --type kotlin -lRepository: Medicare-Call/Medicare-Call-Android
Length of output: 4359
RepositoryModule이 아직도 Hilt를 사용 중입니다. 마이그레이션이 미완료 상태입니다.
@Inject 제거는 Koin으로 전환하려는 의도로 보이지만, RepositoryModule.kt에서는 여전히 Hilt의 @Module, @InstallIn, @Binds 등의 어노테이션을 사용하고 있습니다(lines 47-51, 117-119). 이 경우:
- Option A:
RepositoryModule.kt를 Koin으로 마이그레이션하면서MealRepositoryImpl의 변경사항 유지 - Option B: Hilt를 계속 사용하려면
MealRepositoryImpl의@Inject어노테이션 복원 필요
현재 상태는 두 프레임워크가 섞여있어 일관성이 없습니다.
| // 화면 재생성 및 프로세스 복구를 위해 elderId를 SavedStateHandle로 관리 | ||
| // SavedStateHandle은 Android 전용으로 KMP 공용 대상이 아님 |
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.
이 부분 주석 제거하면 좋을 것 같습니다!
alswlekk
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.
LGTM
🔗 관련 이슈
📙 작업 설명
📸 스크린샷 또는 시연 영상 (선택)
💬 추가 설명 or 리뷰 포인트 (선택)
Summary by CodeRabbit
Refactor
Chores
✏️ Tip: You can customize this high-level summary in your review settings.