Skip to content

Conversation

@BEEEAM-J
Copy link
Member

@BEEEAM-J BEEEAM-J commented May 14, 2025

📌 PR 요약

🌱 작업한 내용

  • hilt 의존성 제거
  • OpenMajor Koin 의존성 주입
  • common:security 모듈 제거
  • 전체적인 koin 모듈 코드 형태 일원화 및 네이밍 수정

🌱 PR 포인트

  • 각 모듈들에 정의되어 있는 koin 모듈들은 전부 SuwikiApplication에 등록하였습니다.

  • koin 모듈 코드 형태가 조금씩 달라서 최대한 일원화 하는 방향으로 작업했습니다.

  • 작업하면서 사용되지 않고 있는 코드들 또한 제거하였습니다.

  • 모든 기능들에 대해서 테스트를 해본 거 같은데, 의존성 주입이 잘못되면 런타임 에러가 발생하기 때문에 더 추가적인 테스트가 필요할 거 같습니다.

  • 예상보다 코드 변경량이 많네요...ㅎㅎ; 다음부터는 코드 변경량 조절 좀 할게여...!!

📸 스크린샷

스크린샷
파일첨부바람

📮 관련 이슈

Summary by CodeRabbit

  • 신규 기능

    • 주요 기능 및 화면에는 변화가 없습니다.
  • 버그 수정

    • 북마크 관련 기능 및 데이터가 제거되어, 오픈 전공 북마크 관리가 더 이상 제공되지 않습니다.
  • 리팩터

    • 전체적으로 의존성 주입 프레임워크가 Hilt에서 Koin으로 전환되었습니다.
    • 관련된 Hilt 기반 설정, 어노테이션, 모듈 및 플러그인, 데이터 모델, 인터페이스 등이 대폭 정리 및 삭제되었습니다.
  • 기타

    • 사용하지 않는 데이터 모델과 보안, 인증 관련 코드가 제거되었습니다.

- hilt 의존성 제거
- OpenMajor Koin 의존성 주입
- common:security 모듈 제거
- 전체적인 koin 모듈 코드 형태 일원화 및 네이밍 수정
@BEEEAM-J BEEEAM-J requested a review from jinukeu May 14, 2025 14:16
@BEEEAM-J BEEEAM-J self-assigned this May 14, 2025
@BEEEAM-J BEEEAM-J linked an issue May 14, 2025 that may be closed by this pull request
@coderabbitai
Copy link

coderabbitai bot commented May 14, 2025

Walkthrough

이 변경 사항은 프로젝트 전반에 걸쳐 Hilt 기반의 의존성 주입(Dependency Injection) 구현을 완전히 제거하고, Hilt 관련 코드, 어노테이션, DI 모듈, 플러그인, 빌드 스크립트, 모델 및 보조 클래스, 인터페이스 등을 삭제하거나 Koin 기반 DI로 대체합니다. DI 모듈 및 ViewModel 바인딩도 Koin DSL로 재작성되었습니다.

Changes

파일/경로 그룹 변경 요약
build.gradle.kts, gradle/libs.versions.toml, app-compose/build.gradle.kts, domain/openmajor/build.gradle.kts, domain/timetable/build.gradle.kts, local/common/build.gradle.kts, local/openmajor/build.gradle.kts, local/timetable/build.gradle.kts, presentation/navigator/build.gradle.kts, remote/common/build.gradle.kts Hilt 관련 플러그인, 라이브러리, 의존성, 플러그인 alias 제거 및 Koin 의존성 추가
build-logic/convention/... Hilt 플러그인 및 적용 코드, 관련 클래스 완전 삭제
app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt DI 모듈 재구성 및 Koin 기반 모듈로 전환
common/model/..., common/security/... Hilt/DI에 사용된 모델, 보조 클래스, 인터페이스, 보안 관련 파일 및 테스트 코드 삭제
data/openmajor/..., domain/openmajor/..., remote/openmajor/... Hilt 어노테이션 및 관련 DI 모듈, 북마크 관련 기능 및 메서드 삭제, 인터페이스/구현체 간 바인딩 Koin으로 대체
data/timetable/..., local/common/..., local/openmajor/..., local/timetable/..., remote/common/... Dagger/Hilt 기반 DI 모듈 삭제, Koin 기반 모듈/싱글톤/팩토리로 대체, DI 어노테이션 및 관련 import 제거
presentation/navigator/..., presentation/openmajor/..., presentation/timetable/... ViewModel의 Hilt 어노테이션 및 DI 제거, Koin 기반 ViewModel 모듈 및 바인딩 추가, Hilt 관련 import 및 코드 삭제, 북마크 관련 기능 완전 제거
remote/common/... Hilt 기반 DI 모듈, Auth 관련 인터페이스 및 구현체, 인터셉터, Authenticator 등 삭제 및 네트워크 모듈에서 Hilt 의존성 제거

Changes Table

파일/경로 변경 요약
build.gradle.kts, gradle/libs.versions.toml, .../build.gradle.kts Hilt 관련 플러그인, 라이브러리, 의존성 제거, Koin 의존성 추가
build-logic/convention/... Hilt 플러그인 및 적용 코드, 관련 클래스 완전 삭제
app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt DI 모듈 재구성 및 Koin 기반 모듈로 전환
common/model/..., common/security/... Hilt/DI에 사용된 모델, 보조 클래스, 인터페이스, 보안 관련 파일 및 테스트 코드 삭제
data/openmajor/..., domain/openmajor/..., remote/openmajor/... Hilt 어노테이션 및 관련 DI 모듈, 북마크 관련 기능 및 메서드 삭제, 인터페이스/구현체 간 바인딩 Koin으로 대체
data/timetable/..., local/common/..., local/openmajor/..., local/timetable/..., remote/common/... Dagger/Hilt 기반 DI 모듈 삭제, Koin 기반 모듈/싱글톤/팩토리로 대체, DI 어노테이션 및 관련 import 제거
presentation/navigator/..., presentation/openmajor/..., presentation/timetable/... ViewModel의 Hilt 어노테이션 및 DI 제거, Koin 기반 ViewModel 모듈 및 바인딩 추가, Hilt 관련 import 및 코드 삭제, 북마크 관련 기능 완전 제거
remote/common/... Hilt 기반 DI 모듈, Auth 관련 인터페이스 및 구현체, 인터셉터, Authenticator 등 삭제 및 네트워크 모듈에서 Hilt 의존성 제거

Sequence Diagram(s)

sequenceDiagram
    participant App
    participant Koin
    participant ViewModel
    participant UseCase
    participant Repository

    App->>Koin: DI 모듈 초기화
    App->>ViewModel: ViewModel 요청
    Koin->>ViewModel: ViewModel 생성 및 의존성 주입
    ViewModel->>UseCase: UseCase 호출
    UseCase->>Repository: Repository 호출
    Repository-->>UseCase: 결과 반환
    UseCase-->>ViewModel: 결과 반환
    ViewModel-->>App: UI 상태 업데이트
Loading

Assessment against linked issues

Objective (Issue) Addressed Explanation
Hilt 코드 완전 제거 (build-logic, DI 모듈, 어노테이션, 플러그인 등) [#181]
Hilt 관련 DI 모듈, 어노테이션, import, ViewModel 바인딩 등 제거 [#181]
Hilt 기반 DI에서 Koin 기반 DI로 전환 및 모듈 재구성 [#181]
Hilt 관련 모델, 보조 클래스, 인터페이스 등 삭제 [#181]

Possibly related PRs

  • feat/#180: hilt -> koin #182: Hilt에서 Koin으로 DI 프레임워크를 전환하는 유사한 대규모 변경을 포함하고 있어 직접적인 코드 레벨 연관성이 있습니다.

Suggested reviewers

  • jinukeu

Poem

🐰
Hilt는 떠나고, Koin이 왔어요!
DI 모듈은 새롭게, 코드도 깔끔해졌죠.
ViewModel도 가뿐하게
토끼가 춤을 추며
"의존성 주입, 이제 걱정 없어요!"
( ˘▽˘)っ♬

Tip

⚡️ Faster reviews with caching
  • CodeRabbit now supports caching for code and dependencies, helping speed up reviews. This means quicker feedback, reduced wait times, and a smoother review experience overall. Cached data is encrypted and stored securely. This feature will be automatically enabled for all accounts on May 16th. To opt out, configure Review - Disable Cache at either the organization or repository level. If you prefer to disable all data retention across your organization, simply turn off the Data Retention setting under your Organization Settings.

Enjoy the performance boost—your workflow just got faster.

✨ Finishing Touches
  • 📝 Generate Docstrings

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🔭 Outside diff range comments (2)
gradle/libs.versions.toml (1)

70-71: 🛠️ Refactor suggestion

Koin 버전을 정식(stable) 릴리스로 교체하는 것을 권장합니다
현재 koin = "4.1.0-Beta10" 베타 버전을 사용하고 있습니다. 베타 버전은 API 변경·회귀 가능성이 높아 운영 환경에서 예기치 않은 장애가 발생할 수 있습니다. 안드로이드-Compose 환경에서는 Koin 3.5.x(안정화) 라인이 널리 사용되고 있으며, 2025-05 기준 최신 LTS 는 3.5.6 입니다.

-koin = "4.1.0-Beta10"
+koin = "3.5.6"

베타 기능이 필요하지 않다면 안정화 버전으로 교체해 의존성 리스크를 낮춰 주세요.

presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorViewModel.kt (1)

64-72: 🛠️ Refactor suggestion

catch {} 블록은 예외를 삼켜 버립니다
예외가 발생해도 로그·사이드이펙트가 없으므로 문제를 파악하기 어렵습니다. 최소 로그 출력 또는 사용자 피드백이 필요합니다.

-}.catch {
-}.launchIn(viewModelScope)
+}.catch { throwable ->
+    Timber.e(throwable, "오픈 전공 목록 로드 실패")
+    postSideEffect(OpenMajorSideEffect.ShowErrorToast)
+}.launchIn(viewModelScope)

Timber 사용 시 RemoteConfig 나 Crashlytics 연동을 통해 장애를 조기에 탐지할 수 있습니다.

🧹 Nitpick comments (9)
local/common/src/main/java/com/suwiki/local/common/datastore/proto/UserPreferenceSerializer.kt (1)

10-10: Hilt @Inject 제거 확인 및 클래스 선언 스타일 개선

@Inject 어노테이션이 제거되어 Hilt 의존성이 깔끔하게 제거되었습니다. 이 변경에 따라 UserPreferenceSerializer가 Koin 모듈에 올바르게 등록되어 DI 컨테이너에서 제공되는지 반드시 확인해주세요. 누락되면 DataStore 초기화 시 런타임 오류가 발생할 수 있습니다.

또한 Kotlin 스타일 가이드에 맞춰 클래스 선언과 콜론(:) 사이에 공백을 추가하는 것을 권장합니다:

-class UserPreferenceSerializer: Serializer<UserPreference> {
+class UserPreferenceSerializer : Serializer<UserPreference> {
local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalOpenMajorDataSourceModule.kt (1)

14-14: 불필요한 빈 줄 제거 권장

파일 끝에 불필요한 빈 줄이 있습니다. 코드 일관성을 위해 제거하는 것이 좋습니다.

}
-14
domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetOpenMajorListUseCase.kt (1)

7-7: 불필요한 후행 쉼표 제거 필요

생성자에서 @Inject 주석이 성공적으로 제거되었지만, 파라미터 목록 끝에 불필요한 쉼표가 있습니다. 코드 가독성과 일관성을 위해 제거해주세요.

-class GetOpenMajorListUseCase (private val openMajorRepository: OpenMajorRepository, ) {
+class GetOpenMajorListUseCase (private val openMajorRepository: OpenMajorRepository) {
presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorViewModelModule.kt (1)

10-10: 의존성 명시를 통한 코드 가독성 향상 제안

현재 get() 함수를 사용하여 익명으로 의존성을 주입하고 있습니다. 코드의 가독성과 유지보수성을 높이기 위해 어떤 타입이 주입되는지 명시적으로 표시하는 것이 좋습니다.

-    OpenMajorViewModel(get(), get(), savedStateHandle)
+    OpenMajorViewModel(
+      getOpenMajorListUseCase = get(),
+      lessonSearchUseCase = get(),
+      savedStateHandle = savedStateHandle
+    )
local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalTimetableDataSourceModule.kt (1)

8-9: 사용하지 않는 import 제거 필요

org.koin.dsl.bind import가 더 이상 사용되지 않는 것으로 보입니다. 코드 정리를 위해 제거하는 것이 좋겠습니다.

-import org.koin.dsl.bind
data/timetable/src/main/java/com/suwiki/data/timetable/di/TitmetableRepositoryModule.kt (1)

7-8: 사용하지 않는 import 제거 필요

org.koin.core.module.dsl.bindorg.koin.core.module.dsl.singleOf import가 코드에서 더 이상 사용되지 않습니다. 미사용 import를 제거하는 것이 좋겠습니다.

-import org.koin.core.module.dsl.bind
-import org.koin.core.module.dsl.singleOf
gradle/libs.versions.toml (1)

208-208: Compose 번들에 ui-toolingui-test-manifest 가 누락되었습니다
compose-debug 번들로 별도 관리하고 있지만, 디버그/프리뷰 편의성을 위해 compose 기본 번들에 포함시키는 프로젝트도 많습니다. 개발 워크플로에 따라 번들 구성을 재검토해 보세요.

remote/openmajor/src/main/java/com/suwiki/remote/openmajor/datasource/RemoteOpenMajorDataSourceImpl.kt (1)

6-14: 네트워크 예외가 그대로 전파됩니다 – Result 랩핑 또는 에러 매핑이 필요합니다
majorApi.*().getOrThrow() 는 HTTP/L7 오류를 throw 하여 상위 계층(ViewModel 등)으로 바로 전파됩니다. 오류 유형에 따라 사용자 메시지 매핑·재시도 전략 등을 다르게 적용하려면, DataSource 레이어에서 적절한 Result 변환 혹은 custom 예외 매핑을 수행하는 편이 유지보수에 유리합니다.

return runCatching { majorApi.getOpenMajorVersion() }
    .mapCatching { it.getOrThrow().version }

이와 같은 패턴을 사용하면 도메인/프레젠테이션 계층에서 functor(성공/실패) 기반으로 공통 처리할 수 있습니다.

presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorViewModel.kt (1)

75-83: 리스트 필터링 로직이 메인 스레드에서 동기 실행됩니다
allOpenMajorList.toOpenMajorList() 가 큰 리스트를 다룰 경우 UI 프레임 드랍이 발생할 수 있습니다. withContext(Dispatchers.Default) 로 오프로드하거나, Flow 로 변환해 백그라운드에서 처리하도록 개선을 고려해 주세요.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 61df506 and 07a4fd4.

📒 Files selected for processing (107)
  • app-compose/build.gradle.kts (1 hunks)
  • app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt (2 hunks)
  • build-logic/convention/build.gradle.kts (0 hunks)
  • build-logic/convention/src/main/java/AndroidHiltConventionPlugin.kt (0 hunks)
  • build-logic/convention/src/main/java/DataConventionPlugin.kt (0 hunks)
  • build-logic/convention/src/main/java/PresentationComposeConventionPlugin.kt (0 hunks)
  • build-logic/convention/src/main/java/RemoteConventionPlugin.kt (0 hunks)
  • build.gradle.kts (0 hunks)
  • common/android/build.gradle.kts (0 hunks)
  • common/android/src/main/java/com/suwiki/common/android/Dispatcher.kt (0 hunks)
  • common/android/src/main/java/com/suwiki/common/android/DispatchersModule.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/PurchaseHistory.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/exam/ExamEvaluationList.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/exam/MyExamEvaluation.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationAverage.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationExtraAverage.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationList.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureInfo.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/MyLectureEvaluation.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/notice/Notice.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/notice/NoticeDetail.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/user/Suspension.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/user/Token.kt (0 hunks)
  • common/model/src/main/java/com/suwiki/common/model/user/User.kt (0 hunks)
  • common/security/.gitignore (0 hunks)
  • common/security/build.gradle.kts (0 hunks)
  • common/security/proguard-rules.pro (0 hunks)
  • common/security/src/main/AndroidManifest.xml (0 hunks)
  • common/security/src/main/java/com/suwiki/common/security/SecurityPreferences.kt (0 hunks)
  • common/security/src/main/java/com/suwiki/common/security/di/DataStoreModule.kt (0 hunks)
  • common/security/src/main/java/com/suwiki/common/security/di/SecureDataStore.kt (0 hunks)
  • common/security/src/test/java/com/suwiki/security/ExampleUnitTest.kt (0 hunks)
  • data/openmajor/src/main/java/com/suwiki/data/openmajor/datasource/RemoteOpenMajorDataSource.kt (0 hunks)
  • data/openmajor/src/main/java/com/suwiki/data/openmajor/repository/OpenMajorRepositoryImpl.kt (0 hunks)
  • data/timetable/src/main/java/com/suwiki/data/timetable/di/TitmetableRepositoryModule.kt (1 hunks)
  • data/timetable/src/main/java/com/suwiki/data/timetable/repository/OpenLectureRepositoryImpl.kt (0 hunks)
  • data/timetable/src/main/java/com/suwiki/data/timetable/repository/TimetableRepositoryImpl.kt (0 hunks)
  • domain/openmajor/build.gradle.kts (1 hunks)
  • domain/openmajor/src/main/java/com/suwiki/domain/openmajor/di/OpenMajorUseCaseModule.kt (1 hunks)
  • domain/openmajor/src/main/java/com/suwiki/domain/openmajor/repository/OpenMajorRepository.kt (0 hunks)
  • domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetBookmarkedOpenMajorListUseCase.kt (0 hunks)
  • domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetOpenMajorListUseCase.kt (1 hunks)
  • domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/RegisterBookmarkUseCase.kt (0 hunks)
  • domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/UnRegisterBookmarkUseCase.kt (0 hunks)
  • domain/timetable/build.gradle.kts (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/TimetableUseCaseModule.kt (1 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/timetableDomainModule.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableCellUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetAllTimetableUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetMainTimetableUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetOpenLectureListUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetTimetableCellTypeUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableCellUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetMainTimetableCreateTime.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetTimetableCellTypeUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateOpenLectureIfNeedUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableCellUseCase.kt (0 hunks)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableUseCase.kt (0 hunks)
  • gradle/libs.versions.toml (1 hunks)
  • local/common/build.gradle.kts (0 hunks)
  • local/common/src/main/java/com/suwiki/local/common/database/di/DaoModule.kt (0 hunks)
  • local/common/src/main/java/com/suwiki/local/common/datastore/di/DataStoreModule.kt (0 hunks)
  • local/common/src/main/java/com/suwiki/local/common/datastore/di/NormalDataStore.kt (0 hunks)
  • local/common/src/main/java/com/suwiki/local/common/datastore/proto/UserPreferenceSerializer.kt (1 hunks)
  • local/openmajor/build.gradle.kts (1 hunks)
  • local/openmajor/src/main/java/com/suwiki/local/openmajor/datasource/LocalOpenMajorDataSourceImpl.kt (0 hunks)
  • local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalDataSourceModule.kt (0 hunks)
  • local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalOpenMajorDataSourceModule.kt (1 hunks)
  • local/timetable/build.gradle.kts (0 hunks)
  • local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalOpenLectureDatasourceImpl.kt (0 hunks)
  • local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalTimetableDatasourceImpl.kt (0 hunks)
  • local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalTimetableDataSourceModule.kt (1 hunks)
  • presentation/navigator/build.gradle.kts (1 hunks)
  • presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainActivity.kt (0 hunks)
  • presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainScreen.kt (1 hunks)
  • presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainViewModel.kt (1 hunks)
  • presentation/navigator/src/main/java/com/suwiki/presentation/navigator/di/MainViewModelModule.kt (1 hunks)
  • presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorScreen.kt (0 hunks)
  • presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorViewModel.kt (1 hunks)
  • presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorModule.kt (0 hunks)
  • presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorViewModelModule.kt (1 hunks)
  • presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/model/OpenMajor.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorScreen.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorViewModel.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableModule.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableViewModelModule.kt (1 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureScreen.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureViewModel.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableScreen.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableViewModel.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorScreen.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListScreen.kt (0 hunks)
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListViewModel.kt (0 hunks)
  • remote/common/build.gradle.kts (0 hunks)
  • remote/common/src/main/java/com/suwiki/remote/common/authenticator/TokenAuthenticator.kt (0 hunks)
  • remote/common/src/main/java/com/suwiki/remote/common/di/ApiModule.kt (1 hunks)
  • remote/common/src/main/java/com/suwiki/remote/common/di/NetworkModule.kt (0 hunks)
  • remote/common/src/main/java/com/suwiki/remote/common/di/Qualifier.kt (0 hunks)
  • remote/common/src/main/java/com/suwiki/remote/common/di/RepositoryModule.kt (0 hunks)
  • remote/common/src/main/java/com/suwiki/remote/common/interceptor/AuthenticationInterceptor.kt (0 hunks)
  • remote/common/src/main/java/com/suwiki/remote/common/repository/AuthRepository.kt (0 hunks)
  • remote/common/src/main/java/com/suwiki/remote/common/repository/AuthRepositoryImpl.kt (0 hunks)
  • remote/openmajor/src/main/java/com/suwiki/remote/openmajor/datasource/RemoteOpenMajorDataSourceImpl.kt (1 hunks)
  • remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteDataSourceModule.kt (0 hunks)
⛔ Files not processed due to max files limit (5)
  • remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteOpenMajorApiModule.kt
  • remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteOpenMajorDataSourceModule.kt
  • remote/timetable/src/main/java/com.suwiki.remote.timetable/datasource/RemoteOpenLectureDataSourceImpl.kt
  • remote/timetable/src/main/java/com.suwiki.remote.timetable/di/RemoteTimetableDataSourceModule.kt
  • settings.gradle.kts
💤 Files with no reviewable changes (86)
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableUseCase.kt
  • build-logic/convention/src/main/java/PresentationComposeConventionPlugin.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableUseCase.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableUseCase.kt
  • local/common/build.gradle.kts
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetMainTimetableCreateTime.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableCellUseCase.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableCellUseCase.kt
  • data/timetable/src/main/java/com/suwiki/data/timetable/repository/OpenLectureRepositoryImpl.kt
  • local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalTimetableDatasourceImpl.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetTimetableCellTypeUseCase.kt
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableScreen.kt
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorScreen.kt
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetMainTimetableUseCase.kt
  • domain/timetable/build.gradle.kts
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
  • presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainActivity.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetTimetableCellTypeUseCase.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetAllTimetableUseCase.kt
  • build-logic/convention/src/main/java/RemoteConventionPlugin.kt
  • local/common/src/main/java/com/suwiki/local/common/database/di/DaoModule.kt
  • build-logic/convention/src/main/java/DataConventionPlugin.kt
  • data/timetable/src/main/java/com/suwiki/data/timetable/repository/TimetableRepositoryImpl.kt
  • common/android/build.gradle.kts
  • common/model/src/main/java/com/suwiki/common/model/user/Suspension.kt
  • common/security/src/main/AndroidManifest.xml
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureViewModel.kt
  • remote/common/src/main/java/com/suwiki/remote/common/di/NetworkModule.kt
  • local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalOpenLectureDatasourceImpl.kt
  • common/security/.gitignore
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableCellUseCase.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateOpenLectureIfNeedUseCase.kt
  • presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorScreen.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetOpenLectureListUseCase.kt
  • local/timetable/build.gradle.kts
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListScreen.kt
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorScreen.kt
  • remote/common/src/main/java/com/suwiki/remote/common/repository/AuthRepositoryImpl.kt
  • domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/RegisterBookmarkUseCase.kt
  • presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorModule.kt
  • build.gradle.kts
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorViewModel.kt
  • local/common/src/main/java/com/suwiki/local/common/datastore/di/DataStoreModule.kt
  • data/openmajor/src/main/java/com/suwiki/data/openmajor/datasource/RemoteOpenMajorDataSource.kt
  • remote/common/build.gradle.kts
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationExtraAverage.kt
  • common/android/src/main/java/com/suwiki/common/android/Dispatcher.kt
  • common/security/build.gradle.kts
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationAverage.kt
  • domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/UnRegisterBookmarkUseCase.kt
  • common/security/src/main/java/com/suwiki/common/security/SecurityPreferences.kt
  • domain/timetable/src/main/java/com/suwiki/domain/timetable/timetableDomainModule.kt
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/MyLectureEvaluation.kt
  • build-logic/convention/build.gradle.kts
  • remote/common/src/main/java/com/suwiki/remote/common/interceptor/AuthenticationInterceptor.kt
  • common/model/src/main/java/com/suwiki/common/model/notice/Notice.kt
  • local/openmajor/src/main/java/com/suwiki/local/openmajor/datasource/LocalOpenMajorDataSourceImpl.kt
  • domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetBookmarkedOpenMajorListUseCase.kt
  • common/model/src/main/java/com/suwiki/common/model/user/Token.kt
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationList.kt
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureScreen.kt
  • remote/common/src/main/java/com/suwiki/remote/common/di/RepositoryModule.kt
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureInfo.kt
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableModule.kt
  • common/security/src/test/java/com/suwiki/security/ExampleUnitTest.kt
  • remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteDataSourceModule.kt
  • common/security/src/main/java/com/suwiki/common/security/di/SecureDataStore.kt
  • common/model/src/main/java/com/suwiki/common/model/user/User.kt
  • presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableViewModel.kt
  • domain/openmajor/src/main/java/com/suwiki/domain/openmajor/repository/OpenMajorRepository.kt
  • local/common/src/main/java/com/suwiki/local/common/datastore/di/NormalDataStore.kt
  • common/model/src/main/java/com/suwiki/common/model/notice/NoticeDetail.kt
  • remote/common/src/main/java/com/suwiki/remote/common/repository/AuthRepository.kt
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/PurchaseHistory.kt
  • build-logic/convention/src/main/java/AndroidHiltConventionPlugin.kt
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/exam/ExamEvaluationList.kt
  • common/model/src/main/java/com/suwiki/common/model/lectureevaluation/exam/MyExamEvaluation.kt
  • common/security/proguard-rules.pro
  • common/android/src/main/java/com/suwiki/common/android/DispatchersModule.kt
  • remote/common/src/main/java/com/suwiki/remote/common/di/Qualifier.kt
  • remote/common/src/main/java/com/suwiki/remote/common/authenticator/TokenAuthenticator.kt
  • local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalDataSourceModule.kt
  • presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/model/OpenMajor.kt
  • data/openmajor/src/main/java/com/suwiki/data/openmajor/repository/OpenMajorRepositoryImpl.kt
  • common/security/src/main/java/com/suwiki/common/security/di/DataStoreModule.kt
🧰 Additional context used
🧬 Code Graph Analysis (1)
presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorViewModel.kt (2)
data/timetable/src/main/java/com/suwiki/data/timetable/repository/OpenLectureRepositoryImpl.kt (1)
  • getOpenMajor (79-81)
domain/timetable/src/main/java/com/suwiki/domain/timetable/repository/OpenLectureRepository.kt (1)
  • getOpenMajor (19-19)
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: build
🔇 Additional comments (20)
remote/common/src/main/java/com/suwiki/remote/common/di/ApiModule.kt (1)

3-13: Hilt에서 Koin으로의 마이그레이션이 정확하게 수행되었습니다.

의존성 주입 프레임워크를 Hilt에서 Koin으로 변경하는 구현이 올바르게 이루어졌습니다. AuthApi를 제공하는 방식이 Koin DSL을 사용하여 적절하게 변환되었으며, 이전의 @NoAuthRetrofit 한정자가 Koin의 named("NoAuthRetrofit")로 올바르게 대체되었습니다.

domain/openmajor/build.gradle.kts (1)

11-12: Hilt 의존성이 Koin으로 적절하게 대체되었습니다.

도메인 레이어에서 Hilt 의존성이 제거되고 Koin 의존성으로 교체된 것이 확인됩니다. 이는 PR 목표에 부합하는 변경입니다.

app-compose/build.gradle.kts (2)

27-27: remote.common 모듈 의존성 추가가 적절합니다.

Hilt 제거 및 Koin 도입에 따라 remote.common 모듈 의존성이 추가되었습니다. 이 모듈에서 정의된 Koin 모듈을 애플리케이션에서 로드하기 위해 필요한 변경으로 보입니다.


31-31: local.common 모듈 의존성 추가가 적절합니다.

Hilt 제거 및 Koin 도입에 따라 local.common 모듈 의존성이 추가되었습니다. 이 모듈에서 정의된 Koin 모듈을 애플리케이션에서 로드하기 위해 필요한 변경입니다.

local/openmajor/build.gradle.kts (1)

26-28: Koin 의존성이 적절하게 추가되었습니다.

Hilt 의존성을 제거하고 Koin 의존성(core 및 android)을 추가한 것이 확인됩니다. Android 라이브러리 모듈에서 필요한 모든 Koin 관련 의존성이 올바르게 추가되었습니다.

presentation/navigator/build.gradle.kts (1)

14-16: Koin Compose 의존성이 올바르게 추가되었습니다.

Hilt에서 Koin으로 의존성 주입 프레임워크를 전환하는 과정에서 필요한 Koin Compose 관련 의존성들이 적절히 추가되었습니다. 특히 Compose에서 ViewModel 관련 기능과 Navigation 통합을 위한 라이브러리들이 포함되어 있어 변경 사항이 잘 구현되었습니다.

presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainScreen.kt (2)

18-18: Hilt에서 Koin으로 import 변경이 잘 이루어졌습니다.

기존 Hilt 관련 import 문을 제거하고 Koin의 ViewModel 관련 import로 적절히 대체되었습니다.


25-25: ViewModel 주입 방식이 Koin으로 성공적으로 변경되었습니다.

기존 hiltViewModel()에서 koinViewModel()로 ViewModel 주입 방식이 성공적으로 변경되었습니다. 이는 PR 목표에 맞게 Hilt 의존성을 Koin으로 대체하는 작업의 중요한 부분입니다.

domain/openmajor/src/main/java/com/suwiki/domain/openmajor/di/OpenMajorUseCaseModule.kt (1)

1-9: OpenMajor 모듈의 Koin 의존성 주입이 잘 구현되었습니다.

이 새로운 파일은 Koin을 사용하여 OpenMajor 모듈의 UseCase를 제공하는 모듈을 정의합니다. factory 함수를 사용하여 GetOpenMajorListUseCase의 새 인스턴스를 매번 주입하도록 설정된 것이 적절합니다.

PR 목표에 언급된 "OpenMajor 모듈에 Koin 의존성 주입 도입"에 부합하는 구현입니다.

presentation/navigator/src/main/java/com/suwiki/presentation/navigator/di/MainViewModelModule.kt (1)

1-9: MainViewModel을 위한 Koin 모듈이 적절히 구현되었습니다.

이 새로운 파일은 Koin의 viewModelOf DSL을 사용하여 MainViewModel을 등록하는 모듈을 정의합니다. 이 접근 방식은 ViewModel의 생명주기를 적절히 관리하면서 Koin을 통한, Jetpack Compose와 함께 사용되는 ViewModel 주입에 가장 적합한 방식입니다.

PR 목표에 명시된 대로 Hilt를 Koin으로 대체하는 작업의 일환으로, 프로젝트 전반에 걸친 Koin 모듈 표준화에도 잘 부합합니다.

presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainViewModel.kt (1)

18-18: Hilt 주석이 성공적으로 제거되었습니다.

ViewModel에서 Hilt 관련 주석(@HiltViewModel, @Inject)을 제거한 것이 확인됩니다. 이제 이 ViewModel은 Koin을 통해 제공되어야 합니다. MainViewModel 관련 Koin 모듈이 어딘가에 정의되어 있는지 확인하세요.

local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalOpenMajorDataSourceModule.kt (1)

8-12: Koin 모듈이 잘 구현되었습니다.

LocalOpenMajorDataSource 인터페이스를 위한 Koin 모듈이 정확하게 구현되었습니다. 이전의 Hilt 모듈을 대체하는 구현으로 적절합니다.

presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorViewModelModule.kt (1)

8-12: ViewModel 제공을 위한 Koin 모듈이 잘 구현되었습니다.

OpenMajorViewModel을 위한 Koin 모듈이 정확하게 구현되었습니다. SavedStateHandle을 올바르게 처리하고 있어 좋습니다.

local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalTimetableDataSourceModule.kt (2)

12-14: Koin 타입 명시 스타일로 리팩토링되었습니다.

single<LocalTimetableDataSource> 구문을 사용하여 인터페이스 타입을 명시적으로 지정하도록 변경되었습니다. 이는 기존 bind 메서드를 사용하는 방식에서 더 명확한 스타일로 변경된 것입니다.


16-18: Koin 타입 명시 스타일로 리팩토링되었습니다.

single<LocalOpenLectureDataSource> 구문을 사용하여 인터페이스 타입을 명시적으로 지정하도록 변경되었습니다. 이는 이전 스타일에서 더 명확한 스타일로 일관성 있게 변경되었습니다.

data/timetable/src/main/java/com/suwiki/data/timetable/di/TitmetableRepositoryModule.kt (1)

12-13: Koin DI 스타일 통일

single<Interface> { Implementation(...) } 형식으로 레포지토리 바인딩 스타일이 변경되었습니다. 이전 singleOfbind 방식에서 더 직관적인 형태로 변경되었으며, PR 목표에 맞게 Koin 모듈 스타일이 통일되었습니다.

presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableViewModelModule.kt (2)

12-22: Koin을 사용한 ViewModel 주입 모듈이 잘 구현되었습니다.

Hilt에서 Koin으로 마이그레이션하는 PR 목표에 맞게 ViewModel 주입을 위한 Koin 모듈이 잘 구현되었습니다. SavedStateHandle이 필요한 ViewModel(CellEditorViewModel, TimetableEditorViewModel)과 일반 ViewModel에 대한 주입 방식이 적절히 구분되어 있습니다.


3-10: 필요한 import들이 잘 정리되어 있습니다.

ViewModel과 SavedStateHandle, Koin 관련 import들이 필요에 맞게 잘 정의되어 있습니다.

app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt (2)

6-21: 모듈 import가 명확히 구조화되었습니다.

Hilt에서 Koin으로의 마이그레이션 과정에서 필요한 모든 모듈이 체계적으로 import 되었습니다. 도메인, 데이터, 프레젠테이션, 로컬, 리모트 레이어별로 필요한 모듈들이 명확하게 구분되어 있습니다.


33-63: 모듈 등록이 체계적으로 카테고리화되었습니다.

Koin 모듈 등록이 다음과 같이 명확한 카테고리로 구분되어 있어 가독성과 유지보수성이 향상되었습니다:

  • data module
  • domain module
  • presentation module
  • local module (common 포함)
  • remote module (common 포함)

이러한 구조화는 의존성 그래프를 이해하기 쉽게 만들고 앱의 아키텍처를 명확히 보여줍니다.

Comment on lines +1 to +6
package com.suwiki.domain.timetable

import com.suwiki.domain.timetable.usecase.*
import org.koin.dsl.module

val timetableUseCaseModule = module {
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Domain 레이어에 DI 프레임워크 의존이 생겼습니다
domain 모듈은 비프레임워크·순수 Kotlin 계층으로 유지하는 것이 Clean Architecture 원칙이며, 테스트 용이성과 모듈 독립성이 높아집니다. Koin 모듈 정의는 :di, :app 또는 :presentation 과 같은 상위 레이어에 두고, 도메인 모듈에는 순수한 UseCase·Interface 만 남기는 방향을 권장합니다.

- val timetableUseCaseModule = module { ... }
+ // domain 모듈 밖(예: :app-di)으로 이동

추후 DI 프레임워크 교체 시 영향 범위를 줄일 수 있습니다.

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines 58 to 62
fun initData() = intent {
reduce { state.copy(isLoading = true) }
joinAll(getOpenMajor(), getBookmarkedOpenMajor())
joinAll(getOpenMajor())
reduce { state.copy(isLoading = false) }
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

joinAll(getOpenMajor()) 는 컴파일 오류를 유발합니다
joinAll 의 매개변수는 Job 객체인데, 현재 getOpenMajor()Unit 을 반환합니다. 빌드 단계에서 None of the following functions can be called with the arguments supplied 오류가 발생합니다.

-joinAll(getOpenMajor())
+getOpenMajor() // 또는 launch { getOpenMajor() }

대기(Join)가 필요하다면 val job = getOpenMajor() 처럼 Job 을 반환하도록 함수를 변경하고 job.join() 을 호출해 주세요.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
fun initData() = intent {
reduce { state.copy(isLoading = true) }
joinAll(getOpenMajor(), getBookmarkedOpenMajor())
joinAll(getOpenMajor())
reduce { state.copy(isLoading = false) }
}
fun initData() = intent {
reduce { state.copy(isLoading = true) }
- joinAll(getOpenMajor())
+ getOpenMajor() // 또는 launch { getOpenMajor() }
reduce { state.copy(isLoading = false) }
}

Copy link
Member

@jinukeu jinukeu left a comment

Choose a reason for hiding this comment

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

고생하셨습니다
koin은 나중에 한번 싹- 정리하시죠

@jinukeu jinukeu merged commit ab1be0e into develop May 17, 2025
1 check failed
@jinukeu jinukeu deleted the refactor/#181-remove-hilt branch May 17, 2025 09:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Hilt implementation 제거

3 participants