-
Notifications
You must be signed in to change notification settings - Fork 0
feat/#180: hilt -> koin #182
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Walkthrough์ด ๋ณ๊ฒฝ ์ฌํญ์ ํ๋ก์ ํธ์ ์ ์ฒด ์์กด์ฑ ์ฃผ์ ํ๋ ์์ํฌ๋ฅผ Dagger Hilt์์ Koin์ผ๋ก ์ ํํฉ๋๋ค. ๊ฐ ๋ชจ๋์ DI ์ค์ , ViewModel, ๋ฐ์ดํฐ ์์ค, ๋ ํฌ์งํ ๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, DataStore, ๋คํธ์ํฌ ๋ชจ๋ ๋ฑ์ด Koin ์คํ์ผ๋ก ์ฌ์์ฑ๋์์ผ๋ฉฐ, ๊ด๋ จ Hilt/Dagger ์ด๋ ธํ ์ด์ ๊ณผ ๋ชจ๋์ ๋ชจ๋ ์ ๊ฑฐ๋์์ต๋๋ค. ์ผ๋ถ ์์ ฏ ๊ด๋ จ ํ์ผ์ ์ญ์ ๋์์ต๋๋ค. Changes
Sequence Diagram(s)sequenceDiagram
participant App as SuwikiApplication
participant Koin as Koin
participant View as Composable/ViewModel
participant Repo as Repository/DataSource
App->>Koin: startKoin { modules(...) }
View->>Koin: koinViewModel()/get()
Koin->>Repo: ์์ฑ์ ์ฃผ์
๋ฐ ์ฑ๊ธํค/ํฉํ ๋ฆฌ ์ ๊ณต
Repo-->>View: ์์กด์ฑ ์ฃผ์
๋ ์ธ์คํด์ค ๋ฐํ
Assessment against linked issues
Suggested labels
Poem
Tip โก๏ธ Faster reviews with caching
Enjoy the performance boostโyour workflow just got faster. โจ Finishing Touches
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. ๐ชง TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
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: 10
๐ญ Outside diff range comments (5)
remote/common/build.gradle.kts (1)
4-4:โ ๏ธ Potential issueHilt ํ๋ฌ๊ทธ์ธ ์ ๊ฑฐ ํ์
alias(libs.plugins.suwiki.android.hilt)๋ Dagger Hilt ์ฌ์ฉ ์ค๋จ ํ ๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค. Koin ์ ํ ๊ณผ์ ์์ ๋ถํ์ํ ํ๋ฌ๊ทธ์ธ์ด๋ฏ๋ก ์ญ์ ํด์ฃผ์ธ์.local/timetable/build.gradle.kts (1)
4-4:โ ๏ธ Potential issueHilt ํ๋ฌ๊ทธ์ธ ์ ๊ฑฐ ํ์
alias(libs.plugins.suwiki.android.hilt)๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก ์ ๊ฑฐํด์ฃผ์ธ์.presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorScreen.kt (1)
32-33: ๐ก Verification agent๐งฉ Analysis chain
๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ๋ฐ Koin ViewModel ํตํฉ ํ์ธ
Hilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ import ๋ฌธ์ด ๋จ์์์ต๋๋ค:
- line 33:
androidx.hilt.navigation.compose.hiltViewModel๋ํ, ViewModel ์ฃผ์ ๋ฐฉ์์ด
hiltViewModel()์์koinViewModel()๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.๋ค์๊ณผ ๊ฐ์ด ๋ฏธ์ฌ์ฉ import๋ฅผ ์ ๊ฑฐํด์ฃผ์ธ์:
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel import com.suwiki.presentation.common.designsystem.component.appbar.SuwikiAppBarWithTitleAlso applies to: 49-57
๐ Script executed:
#!/bin/bash # Verify if OpenMajorViewModel is properly registered in a Koin module rg "openMajor.*Module" -A 20 | grep -i "OpenMajorViewModel"Length of output: 188
๋ฏธ์ฌ์ฉ Hilt import ์ ๊ฑฐ ๋ฐ Koin ViewModel ํตํฉ ํ์ธ
OpenMajorScreen.kt์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ Hilt ๊ด๋ จ import๋ฅผ ์ ๊ฑฐํด์ฃผ์ธ์:
-import androidx.hilt.navigation.compose.hiltViewModelKoin ๋ชจ๋(OpenMajorModule.kt)์
viewModelOf(::OpenMajorViewModel)๋ก ViewModel์ด ๋ฑ๋ก๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.koinViewModel()์ฃผ์ ๋ฐฉ์์ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด ์ถ๊ฐ ์์ ์์ด ์๋ฃ๋ฉ๋๋ค.
- ํ์ผ: presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorScreen.kt
- ๋ผ์ธ: 32โ33
data/timetable/src/main/java/com/suwiki/data/timetable/di/RepositoryModule.kt (1)
7-11: ๐ ๏ธ Refactor suggestion์ฌ์ฉํ์ง ์๋ Dagger ์ํฌํธ๋ฅผ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
Hilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ด ์๋ฃ๋์์ผ๋, ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ Dagger/Hilt ๊ด๋ จ ์ํฌํธ๊ฐ ๋จ์์์ต๋๋ค.
๋ค์ ์ํฌํธ๋ฅผ ์ ๊ฑฐํ์ธ์:
-import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singletonremote/common/src/main/java/com/suwiki/remote/common/di/NetworkModule.kt (1)
8-12:โ ๏ธ Potential issue๋ถํ์ํ Daggerยทjavax import ์ ๊ฑฐ๊ฐ ํ์ํฉ๋๋ค
Hilt โ Koin ๋ง์ด๊ทธ๋ ์ด์ ํ์๋dagger.*,javax.inject.*๊ด๋ จ import๊ฐ ๊ทธ๋๋ก ๋จ์ ์์ด ์ ๋ถ ์ฌ์ฉ๋์ง ์์ต๋๋ค.ktlint/detekt๊ท์น์ ๋ฐ๋ผ ์ปดํ์ผ์ด ์คํจํ๊ฑฐ๋ CI ํ์ดํ๋ผ์ธ์ด ๊นจ์ง ์ ์์ผ๋ฏ๋ก ๋ฐ๋์ ์ญ์ ํด ์ฃผ์ธ์.-import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent ... -import javax.inject.Qualifier -import javax.inject.SingletonAlso applies to: 20-21
๐งน Nitpick comments (33)
presentation/navigator/build.gradle.kts (1)
12-13: api ํ์ฉ ์ ํ ๋ฒ์ ๋ฐ ์ํ ์์กด์ฑ ๊ฒํ ํ์openmajor ๋ฐ timetable ๋ชจ๋์ api๋ก ๋ณ๊ฒฝํด ํด๋น ๋ชจ๋์ ์๋น์๊น์ง ์์กด์ฑ์ด ์ ํ๋ฉ๋๋ค. Koin DI ์ค์ ์ ๊ณต์ ํ๊ธฐ ์ํ ์กฐ์น๋ผ๋ฉด ์ ์ ํ์ง๋ง, ๋ด๋ถ API๊ฐ ๋ถํ์ํ๊ฒ ๋ ธ์ถ๋๊ฑฐ๋ ์ํ ์์กด์ฑ์ด ๋ฐ์ํ์ง ์๋์ง ๊ฒํ ํด ์ฃผ์ธ์.
domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetMainTimetableUseCase.kt (1)
6-8:javax.inject.Inject์ํฌํธ ๋ฐ Hilt ์์กด์ฑ ์ ๊ฑฐ ํ์
ํ์ฌ@Inject์ด๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋์์ผ๋javax.inject.Inject์ํฌํธ๊ฐ ์ฌ์ ํ ๋จ์ ์์ต๋๋ค. ์ฌ์ฉ๋์ง ์๋ ์ํฌํธ๋ฅผ ์ ๊ฑฐํ๊ณ ,timetableDomainModule์GetMainTimetableUseCase๊ฐ factory๋ก ์ ์ ๋ฑ๋ก๋์๋์ง ํ์ธํ์ธ์.domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateOpenLectureIfNeedUseCase.kt (1)
5-5: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ ํ์
javax.inject.Inject๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก import ๋ฌธ์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-import javax.inject.Injectdata/timetable/src/main/java/com/suwiki/data/timetable/repository/TimetableRepositoryImpl.kt (1)
11-11: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ ํ์
javax.inject.Inject๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก import ๋ฌธ์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-import javax.inject.Injectdomain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableUseCase.kt (1)
5-5: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ ํ์
javax.inject.Inject๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก import ๋ฌธ์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-import javax.inject.Injectdomain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetOpenLectureListUseCase.kt (1)
6-6: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ ํ์
javax.inject.Inject๋ฅผ importํ๊ณ ์์ง๋ง ์ฝ๋์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ฌ์ฉํ์ง ์๋ import๋ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-import javax.inject.Injectdomain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableCellUseCase.kt (1)
6-6: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ ํ์
javax.inject.Inject๋ฅผ importํ๊ณ ์์ง๋ง ์ฝ๋์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ฌ์ฉํ์ง ์๋ import๋ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-import javax.inject.Injectremote/timetable/src/main/java/com.suwiki.remote.timetable/datasource/RemoteOpenLectureDataSourceImpl.kt (1)
8-8: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ ํ์
javax.inject.Inject๋ฅผ importํ๊ณ ์์ง๋ง ์ฝ๋์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ฌ์ฉํ์ง ์๋ import๋ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-import javax.inject.Injectdata/timetable/src/main/java/com/suwiki/data/timetable/repository/OpenLectureRepositoryImpl.kt (1)
16-16: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ ํ์
javax.inject.Inject๋ฅผ importํ๊ณ ์์ง๋ง ์ฝ๋์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ฌ์ฉํ์ง ์๋ import๋ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-import javax.inject.Injectdomain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetTimetableCellTypeUseCase.kt (1)
5-5: ์ฌ์ฉํ์ง ์๋ Import ์ ๊ฑฐ ํ์
javax.inject.Inject๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก import ๋ฌธ์ ์ ๊ฑฐํด์ฃผ์ธ์. Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์์ ๋จ๊ฒจ์ง ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.-import javax.inject.Injectdomain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetAllTimetableUseCase.kt (1)
6-6: ์ฌ์ฉํ์ง ์๋ Import ์ ๊ฑฐ ํ์
javax.inject.Inject๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก import ๋ฌธ์ ์ ๊ฑฐํด์ฃผ์ธ์. Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์์ ๋จ๊ฒจ์ง ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.-import javax.inject.Injectpresentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorViewModel.kt (1)
16-16: ์ฌ์ฉํ์ง ์๋ Import ์ ๊ฑฐ ํ์Hilt ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ Import ๋ฌธ์ด ๋จ์์์ต๋๋ค:
dagger.hilt.android.lifecycle.HiltViewModeljavax.inject.Inject์ฝ๋ ์ ๋ฆฌ๋ฅผ ์ํด ์ ๊ฑฐํด์ฃผ์ธ์.
-import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.InjectAlso applies to: 29-29
domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetTimetableCellTypeUseCase.kt (1)
5-5: ์ฌ์ฉํ์ง ์๋ Import ์ ๊ฑฐ ํ์
javax.inject.Inject๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก import ๋ฌธ์ ์ ๊ฑฐํด์ฃผ์ธ์. Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์์ ๋จ๊ฒจ์ง ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.-import javax.inject.Injectdomain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableCellUseCase.kt (1)
1-16: ๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ํ์Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์์
@Inject์ด๋ ธํ ์ด์ ์ ์ ๊ฑฐ๋์์ง๋ง, 6๋ฒ ๋ผ์ธ์javax.inject.Injectimport๋ ์ฌ์ ํ ๋จ์์์ต๋๋ค. ์ด import๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก ์ ๊ฑฐํด์ฃผ์ธ์.package com.suwiki.domain.timetable.usecase import com.suwiki.common.model.timetable.TimetableCell import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.TimetableRepository -import javax.inject.Inject class InsertTimetableCellUseCase( private val timetableRepository: TimetableRepository, ) { suspend operator fun invoke(cellList: List<TimetableCell>): Result<Unit> = runCatchingIgnoreCancelled { timetableRepository.insertTimetableCell( cellList = cellList, ) } }presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableViewModel.kt (1)
1-25: ๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ํ์Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์์
@HiltViewModel๊ณผ@Inject์ด๋ ธํ ์ด์ ์ ์ ๊ฑฐ๋์์ง๋ง, ๊ด๋ จ import๋ค์ด ์ฌ์ ํ ๋จ์์์ต๋๋ค. 11๋ฒ ๋ผ์ธ์dagger.hilt.android.lifecycle.HiltViewModel๊ณผ 18๋ฒ ๋ผ์ธ์javax.inject.Injectimport๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก ์ ๊ฑฐํด์ฃผ์ธ์.package com.suwiki.presentation.timetable.timetable import androidx.lifecycle.ViewModel import com.suwiki.common.model.timetable.TimetableCell import com.suwiki.domain.timetable.usecase.DeleteTimetableCellUseCase import com.suwiki.domain.timetable.usecase.GetMainTimetableUseCase import com.suwiki.domain.timetable.usecase.GetTimetableCellTypeUseCase import com.suwiki.domain.timetable.usecase.SetTimetableCellTypeUseCase import com.suwiki.presentation.timetable.navigation.argument.toCellEditorArgument import com.suwiki.presentation.timetable.timetable.component.timetable.cell.TimetableCellType -import dagger.hilt.android.lifecycle.HiltViewModel import org.orbitmvi.orbit.Container import org.orbitmvi.orbit.ContainerHost import org.orbitmvi.orbit.syntax.simple.intent import org.orbitmvi.orbit.syntax.simple.postSideEffect import org.orbitmvi.orbit.syntax.simple.reduce import org.orbitmvi.orbit.viewmodel.container -import javax.inject.Injectpresentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListViewModel.kt (1)
1-24: ๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ํ์Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์์
@HiltViewModel๊ณผ@Inject์ด๋ ธํ ์ด์ ์ ์ ๊ฑฐ๋์์ง๋ง, ๊ด๋ จ import๋ค์ด ์ฌ์ ํ ๋จ์์์ต๋๋ค. 9๋ฒ ๋ผ์ธ์dagger.hilt.android.lifecycle.HiltViewModel๊ณผ 18๋ฒ ๋ผ์ธ์javax.inject.Injectimport๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก ์ ๊ฑฐํด์ฃผ์ธ์.package com.suwiki.presentation.timetable.timetablelist import androidx.lifecycle.ViewModel import com.suwiki.common.model.timetable.Timetable import com.suwiki.domain.timetable.usecase.DeleteTimetableUseCase import com.suwiki.domain.timetable.usecase.GetAllTimetableUseCase import com.suwiki.domain.timetable.usecase.SetMainTimetableCreateTime import com.suwiki.presentation.timetable.navigation.argument.toTimetableEditorArgument -import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.collections.immutable.minus import kotlinx.collections.immutable.toPersistentList import org.orbitmvi.orbit.Container import org.orbitmvi.orbit.ContainerHost import org.orbitmvi.orbit.syntax.simple.intent import org.orbitmvi.orbit.syntax.simple.postSideEffect import org.orbitmvi.orbit.syntax.simple.reduce import org.orbitmvi.orbit.viewmodel.container -import javax.inject.Injectpresentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt (1)
10-20: ๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ํ์Hilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ import ๋ฌธ์ด ๋จ์์์ต๋๋ค:
- line 10:
dagger.hilt.android.lifecycle.HiltViewModel- line 20:
javax.inject.Inject๋ค์๊ณผ ๊ฐ์ด ์์ ํด์ฃผ์ธ์:
-import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.serialization.json.Json import org.orbitmvi.orbit.Container import org.orbitmvi.orbit.ContainerHost import org.orbitmvi.orbit.annotation.OrbitExperimental import org.orbitmvi.orbit.syntax.simple.blockingIntent import org.orbitmvi.orbit.syntax.simple.intent import org.orbitmvi.orbit.syntax.simple.postSideEffect import org.orbitmvi.orbit.syntax.simple.reduce import org.orbitmvi.orbit.viewmodel.container -import javax.inject.Injectdomain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableCellUseCase.kt (1)
7-11: ๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ํ์Hilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ import ๋ฌธ์ด ๋จ์์์ต๋๋ค:
- line 7:
javax.inject.Inject๋ค์๊ณผ ๊ฐ์ด ์์ ํด์ฃผ์ธ์:
import com.suwiki.common.model.timetable.TimetableCell import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.TimetableRepository -import javax.inject.Injectdomain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetMainTimetableCreateTime.kt (1)
5-7: Hilt์์ Koin์ผ๋ก ์ ํ ์ ๋ฏธ์ฌ์ฉ import ์ญ์ ํ์
@Inject์ด๋ ธํ ์ด์ ์ ์ ๊ฑฐ๋์์ง๋ง, ํด๋น import๋ ์ฌ์ ํ ๋จ์์์ต๋๋ค. ๋ฏธ์ฌ์ฉ import๋ ์ ๊ฑฐํ์ฌ ์ฝ๋์ ๋ช ํ์ฑ์ ๋์ด๋ ๊ฒ์ด ์ข์ต๋๋ค.-import javax.inject.Injectpresentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorViewModel.kt (1)
15-28: ๋ฏธ์ฌ์ฉ Hilt ๊ด๋ จ import ์ ๊ฑฐ ํ์Hilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ Hilt ๊ด๋ จ ์ด๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋์์ง๋ง, ๊ด๋ จ import๋ ์ฌ์ ํ ๋จ์์์ต๋๋ค. ๋ฏธ์ฌ์ฉ import๋ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
-import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Injectpresentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureViewModel.kt (1)
16-33: Hilt ๊ด๋ จ ๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ํ์Koin์ผ๋ก ์ ํํ๋ฉด์ Hilt ๊ด๋ จ ์ด๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋์์ง๋ง, ํด๋น import๋ ์ฌ์ ํ ๋จ์์์ต๋๋ค. ๋ฏธ์ฌ์ฉ import ๋ฌธ์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ฝ๋ ํ์ง ํฅ์์ ๋์์ด ๋ฉ๋๋ค.
-import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Injectpresentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorScreen.kt (1)
16-16: ์ฌ์ฉํ์ง ์๋ Hilt import๋ฅผ ์ ๊ฑฐํ์ธ์.
hiltViewModel()์์koinViewModel()์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ ๋๋ฌธ์ ์ด import๋ ๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค. ์ฝ๋ ์ ๋ฆฌ๋ฅผ ์ํด ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-import androidx.hilt.navigation.compose.hiltViewModelpresentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorScreen.kt (1)
38-38: ์ฌ์ฉํ์ง ์๋ Hilt import๋ฅผ ์ ๊ฑฐํ์ธ์.
hiltViewModel()์์koinViewModel()์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ ๋๋ฌธ์ ์ด import๋ ๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค. ์ฝ๋ ์ ๋ฆฌ๋ฅผ ์ํด ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-import androidx.hilt.navigation.compose.hiltViewModelpresentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListScreen.kt (1)
18-18: ์ฌ์ฉํ์ง ์๋ Hilt import๋ฅผ ์ ๊ฑฐํ์ธ์.
hiltViewModel()์์koinViewModel()์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ ๋๋ฌธ์ ์ด import๋ ๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค. ์ฝ๋ ์ ๋ฆฌ๋ฅผ ์ํด ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-import androidx.hilt.navigation.compose.hiltViewModelapp-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt (1)
4-12: Koin ์ค์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ด Application ํด๋์ค์์ ์ ๋๋ก ์ด๋ฃจ์ด์ก์ต๋๋ค. ํ์ํ ๋ชจ๋ ๋ชจ๋๋ค์ด ๋ฑ๋ก๋์ด ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
๋ค์ ์ฌํญ์ ๊ณ ๋ คํด๋ณด์ธ์:
- ๋ชจ๋์ ๊ณ์ธต๋ณ๋ก ๊ทธ๋ฃนํํ๊ฑฐ๋ ์ฃผ์์ ์ถ๊ฐํ์ฌ ๊ตฌ์ฑ์ ๋ช ํํ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ๋ชจ๋ ๊ฐ ์์กด์ฑ์ด ์๋ ๊ฒฝ์ฐ ์์๊ฐ ์ค์ํ ์ ์์ผ๋ฏ๋ก ํ์ธ์ด ํ์ํฉ๋๋ค.
๋ชจ๋์ ๊ณ์ธต๋ณ๋ก ๊ทธ๋ฃนํํ๋ ์์:
modules( + // Remote data sources remoteTimetableDataSourceModule, + // Local data sources localTimetableDataSourceModule, + // Repositories timetableRepositoryModule, openMajorRepositoryModule, + // Domain timetableDomainModule, + // Presentation timetableModule, openMajorModule, )Also applies to: 20-31
presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableScreen.kt (1)
18-18: ์ฌ์ฉ๋์ง ์๋ import ์ ๊ฑฐ ํ์
hiltViewModel์ ๋ํ import๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ฝ๋๋ ์ด์ Koin์ ์ฌ์ฉํ๋ฏ๋ก ์ด import ๋ฌธ์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.-import androidx.hilt.navigation.compose.hiltViewModellocal/openmajor/src/main/java/com/suwiki/local/openmajor/datasource/LocalOpenMajorDataSourceImpl.kt (1)
16-28: Koin ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฑ๊ณต์ ์ด๋ ๋ฏธ์ฌ์ฉ import ์ ๋ฆฌ ๋ฐ Dispatcher ๊ด๋ จ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.Dagger Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์์ ์ด ์ ์์ ์ผ๋ก ์ํ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ์ด ์์ต๋๋ค:
- ๋ฏธ์ฌ์ฉ import ๋ฌธ์ด ๋จ์์์ต๋๋ค (Dispatcher, SuwikiDispatchers, NormalDataStore, Inject ๋ฑ)
- ioDispatcher๋ฅผ ํ๋์ฝ๋ฉํ๋ฉด ํ ์คํธ ์ Dispatcher๋ฅผ ๋์ฒดํ๊ธฐ ์ด๋ ค์์ง๋๋ค.
๋ถํ์ํ import ์ ๊ฑฐ ๋ฐ Dispatcher ์ฃผ์ ๋ฐฉ์ ๊ฐ์ :
-import com.suwiki.common.android.Dispatcher -import com.suwiki.common.android.SuwikiDispatchers -import com.suwiki.local.common.datastore.di.NormalDataStore -import javax.inject.Injectํฅํ ํ ์คํธ ์ฉ์ด์ฑ์ ์ํด Dispatcher๋ฅผ ์์ฑ์๋ฅผ ํตํด ์ฃผ์ ๋ฐ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค:
class LocalOpenMajorDataSourceImpl( private val dataStore: DataStore<Preferences>, private val db: OpenMajorDatabase, + private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO ) : LocalOpenMajorDataSource { - private val ioDispatcher = Dispatchers.IOlocal/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalTimetableDatasourceImpl.kt (1)
17-28: Koin ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฑ๊ณต์ ์ด๋ ๋ฏธ์ฌ์ฉ import ์ ๋ฆฌ ๋ฐ Dispatcher ์ฃผ์ ๋ฐฉ์ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.Dagger Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ก์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ์ด ์์ต๋๋ค:
- ๋ฏธ์ฌ์ฉ import ๋ฌธ์ด ๋จ์์์ต๋๋ค (Dispatcher, SuwikiDispatchers, NormalDataStore, Inject ๋ฑ)
- ioDispatcher๋ฅผ ํด๋์ค ๋ด๋ถ์์ ์ง์ ์ด๊ธฐํํ๋ฉด ํ ์คํธ ์ ๋์ฒดํ๊ธฐ ์ด๋ ค์์ง๋๋ค.
๋ถํ์ํ import ์ ๊ฑฐ:
-import com.suwiki.common.android.Dispatcher -import com.suwiki.common.android.SuwikiDispatchers -import com.suwiki.local.common.datastore.di.NormalDataStore -import javax.inject.Injectํฅํ ํ ์คํธ ์ฉ์ด์ฑ์ ์ํด Dispatcher๋ฅผ ์์ฑ์๋ฅผ ํตํด ์ฃผ์ ๋ฐ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค:
class LocalTimetableDatasourceImpl( private val dataStore: DataStore<Preferences>, private val timetableDatabase: TimetableDatabase, + private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO ) : LocalTimetableDataSource { - private val ioDispatcher = Dispatchers.IOremote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/ApiModule.kt (1)
5-8: ์ฌ์ฉํ์ง ์๋ Hilt/Dagger ์ํฌํธ ์ ๊ฑฐ ํ์Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ๋ฏ๋ก ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ Dagger/Hilt ๊ด๋ จ ์ํฌํธ๋ค(
dagger.Module,dagger.Provides,dagger.hilt.InstallIn,dagger.hilt.components.SingletonComponent,javax.inject.Singleton)์ ์ ๊ฑฐํด์ฃผ์ธ์.-import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent import org.koin.core.qualifier.named import org.koin.dsl.module import retrofit2.Retrofit -import javax.inject.SingletonAlso applies to: 12-12
local/common/src/main/java/com/suwiki/local/common/database/di/DaoModule.kt (1)
9-12: ์ฌ์ฉํ์ง ์๋ Hilt/Dagger ์ํฌํธ ์ ๊ฑฐ ํ์Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ๋ฏ๋ก ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ Dagger/Hilt ๊ด๋ จ ์ํฌํธ๋ค(
dagger.Module,dagger.Provides,dagger.hilt.InstallIn,dagger.hilt.components.SingletonComponent)์ ์ ๊ฑฐํด์ฃผ์ธ์.import com.suwiki.local.common.database.dao.TimeTableDao import com.suwiki.local.common.database.database.OpenLectureDatabase -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent import org.koin.dsl.modulelocal/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalOpenLectureDatasourceImpl.kt (2)
7-8: ์ฌ์ฉํ์ง ์๋ ์ํฌํธ ์ ๊ฑฐ ํ์Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ๋ฏ๋ก ๋ ์ด์ ์ฌ์ฉํ์ง ์๋
@Dispatcher,SuwikiDispatchers๋ฐjavax.inject.Inject๊ด๋ จ ์ํฌํธ๋ค์ ์ ๊ฑฐํด์ฃผ์ธ์.-import com.suwiki.common.android.Dispatcher -import com.suwiki.common.android.SuwikiDispatchers import com.suwiki.common.model.timetable.OpenLecture import com.suwiki.data.timetable.datasource.LocalOpenLectureDataSource import com.suwiki.local.common.database.database.OpenLectureDatabase import com.suwiki.local.common.datastore.di.NormalDataStore import com.suwiki.local.timetable.converter.toEntity import com.suwiki.local.timetable.converter.toModel import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext -import javax.inject.InjectAlso applies to: 20-20
13-13: NormalDataStore ์ด๋ ธํ ์ด์ ํ์ธ ํ์
NormalDataStore์ด๋ ธํ ์ด์ ์ด ์์ง ์ํฌํธ๋์ด ์์ง๋ง ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ด ์ด๋ ธํ ์ด์ ์ ํตํ ์๋ณ์๊ฐ ๋ ์ด์ ํ์ ์๋ค๋ฉด ์ํฌํธ๋ฅผ ์ ๊ฑฐํด์ฃผ์ธ์.import com.suwiki.common.model.timetable.OpenLecture import com.suwiki.data.timetable.datasource.LocalOpenLectureDataSource import com.suwiki.local.common.database.database.OpenLectureDatabase -import com.suwiki.local.common.datastore.di.NormalDataStore import com.suwiki.local.timetable.converter.toEntity import com.suwiki.local.timetable.converter.toModelremote/common/src/main/java/com/suwiki/remote/common/di/NetworkModule.kt (1)
67-68:toMediaTypeOrNull()๋์toMediaType()์ฌ์ฉ ๊ถ์ฅ
"application/json".toMediaTypeOrNull()!!ํํ๋ ๋ ๊ฐ์ ํด์ (!!)๊ฐ ํฌํจ๋ผ ๋ถํ์ํ NPE ์ํ์ ๋จ๊น๋๋ค. ์์ MIME ํ์ ์ null ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋กtoMediaType()๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ๋ ํธ์ด ์์ ํ๊ณ ๊ฐ๊ฒฐํฉ๋๋ค.- .addConverterFactory(get<Json>().asConverterFactory("application/json".toMediaTypeOrNull()!!)) + .addConverterFactory(get<Json>().asConverterFactory("application/json".toMediaType()))Also applies to: 87-88
๐ Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
๐ Files selected for processing (73)
app-compose/build.gradle.kts(1 hunks)app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt(1 hunks)build-logic/convention/src/main/java/com/kunize/convention/Const.kt(1 hunks)data/openmajor/build.gradle.kts(1 hunks)data/openmajor/src/main/java/com/suwiki/data/openmajor/di/RepositoryModule.kt(1 hunks)data/openmajor/src/main/java/com/suwiki/data/openmajor/repository/OpenMajorRepositoryImpl.kt(1 hunks)data/timetable/build.gradle.kts(1 hunks)data/timetable/src/main/java/com/suwiki/data/timetable/di/RepositoryModule.kt(1 hunks)data/timetable/src/main/java/com/suwiki/data/timetable/repository/OpenLectureRepositoryImpl.kt(1 hunks)data/timetable/src/main/java/com/suwiki/data/timetable/repository/TimetableRepositoryImpl.kt(1 hunks)domain/timetable/build.gradle.kts(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/timetableDomainModule.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableCellUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetAllTimetableUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetMainTimetableUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetOpenLectureListUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetTimetableCellTypeUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableCellUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetMainTimetableCreateTime.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetTimetableCellTypeUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateOpenLectureIfNeedUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableCellUseCase.kt(1 hunks)domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableUseCase.kt(1 hunks)gradle/libs.versions.toml(2 hunks)local/common/build.gradle.kts(1 hunks)local/common/src/main/java/com/suwiki/local/common/database/di/DaoModule.kt(1 hunks)local/common/src/main/java/com/suwiki/local/common/database/di/DatabaseModule.kt(1 hunks)local/common/src/main/java/com/suwiki/local/common/datastore/di/DataStoreModule.kt(1 hunks)local/openmajor/src/main/java/com/suwiki/local/openmajor/datasource/LocalOpenMajorDataSourceImpl.kt(1 hunks)local/timetable/build.gradle.kts(1 hunks)local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalOpenLectureDatasourceImpl.kt(1 hunks)local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalTimetableDatasourceImpl.kt(1 hunks)local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalDataSourceModule.kt(1 hunks)presentation/navigator/build.gradle.kts(1 hunks)presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainActivity.kt(0 hunks)presentation/openmajor/build.gradle.kts(1 hunks)presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorScreen.kt(1 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(1 hunks)presentation/timetable/build.gradle.kts(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorScreen.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorViewModel.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableModule.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureScreen.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureViewModel.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableScreen.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableViewModel.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorScreen.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListScreen.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListViewModel.kt(1 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/SendWidgetUpdateCommand.kt(0 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/TimetableWidget.kt(0 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/TimetableWidgetReceiver.kt(0 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/Common.kt(0 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/GlanceTimetable.kt(0 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/cell/GlanceClassCell.kt(0 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/cell/GlanceELearningCell.kt(0 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/cell/GlanceEmptyCell.kt(0 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/column/GlanceClassColumn.kt(0 hunks)presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/column/GlanceTimeColumn.kt(0 hunks)remote/common/build.gradle.kts(1 hunks)remote/common/src/main/java/com/suwiki/remote/common/di/FirebaseDatabaseModule.kt(1 hunks)remote/common/src/main/java/com/suwiki/remote/common/di/NetworkModule.kt(1 hunks)remote/openmajor/build.gradle.kts(1 hunks)remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/ApiModule.kt(1 hunks)remote/timetable/build.gradle.kts(1 hunks)remote/timetable/src/main/java/com.suwiki.remote.timetable/api/OpenLectureApi.kt(0 hunks)remote/timetable/src/main/java/com.suwiki.remote.timetable/datasource/RemoteOpenLectureDataSourceImpl.kt(1 hunks)remote/timetable/src/main/java/com.suwiki.remote.timetable/di/ApiModule.kt(0 hunks)remote/timetable/src/main/java/com.suwiki.remote.timetable/di/RemoteDataSourceModule.kt(1 hunks)
๐ค Files with no reviewable changes (13)
- presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainActivity.kt
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/SendWidgetUpdateCommand.kt
- remote/timetable/src/main/java/com.suwiki.remote.timetable/api/OpenLectureApi.kt
- remote/timetable/src/main/java/com.suwiki.remote.timetable/di/ApiModule.kt
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/column/GlanceTimeColumn.kt
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/Common.kt
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/TimetableWidget.kt
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/cell/GlanceELearningCell.kt
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/cell/GlanceClassCell.kt
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/cell/GlanceEmptyCell.kt
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/GlanceTimetable.kt
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/TimetableWidgetReceiver.kt
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/widget/timetable/column/GlanceClassColumn.kt
โฐ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build
๐ Additional comments (49)
remote/timetable/build.gradle.kts (1)
17-19: Koin ์์กด์ฑ ์ถ๊ฐ ํ์ธ
libs.koin.core์libs.koin.android๊ฐ ์ถ๊ฐ๋์ด Koin DI๊ฐ ํ์ฑํ๋์์ต๋๋ค.remoteTimetableDataSourceModule๋ฑ Koin ๋ชจ๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ฑ๋ก๋์๋์ง ๊ฒ์ฆํ์ธ์.remote/common/build.gradle.kts (1)
38-40: Koin ๋ํ๋์ ์ถ๊ฐ ํ์ธ
libs.koin.core์libs.koin.android๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ถ๊ฐ๋์ด Koin DI ์ค์ ์ด ๋ฐ์๋์์ต๋๋ค.domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableUseCase.kt (1)
8-8: @Inject ์ด๋ ธํ ์ด์ ์ ๊ฑฐ ๋ฐ์๋จ
ํด๋์ค ์ ์ธ์์@Inject์ ๊ฑฐ๊ฐ ์ ์ ์ ์ฉ๋์์ต๋๋ค.domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableUseCase.kt (1)
8-8: @Inject ์ด๋ ธํ ์ด์ ์ ๊ฑฐ ๋ฐ์๋จ
ํด๋์ค ์ ์ธ๋ถ์์@Inject์ ๊ฑฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ฉ๋์์ต๋๋ค.remote/openmajor/build.gradle.kts (1)
17-19: Koin ๋ํ๋์ ์ถ๊ฐ ํ์ธ
libs.koin.core๋ฐlibs.koin.android๊ฐ ์ ์์ ์ผ๋ก ์ถ๊ฐ๋์ด Koin DI ํตํฉ์ด ์๋ฃ๋์์ต๋๋ค.local/timetable/build.gradle.kts (1)
31-32: Koin ๋ํ๋์ ์ถ๊ฐ ํ์ธ
libs.koin.core์libs.koin.android๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ถ๊ฐ๋์ด ๋ก์ปฌ ๋ฐ์ดํฐ์์ค DI ์ค์ ์ ๋ฐ์๋์์ต๋๋ค.data/timetable/build.gradle.kts (1)
13-15: Koin ์์กด์ฑ ์ถ๊ฐ๊ฐ ์ ์ ํ๊ฒ ์ด๋ฃจ์ด์ก์ต๋๋ค.Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํด ํ์ํ ํต์ฌ ์์กด์ฑ์ด ์ ์ถ๊ฐ๋์์ต๋๋ค. ์ฝ์ด ๋ฐ ์๋๋ก์ด๋ ํนํ ๋ชจ๋์ ๋ชจ๋ ํฌํจํ ๊ฒ์ด ์ข์ต๋๋ค.
presentation/timetable/build.gradle.kts (2)
12-12: ์์กด์ฑ ๋ณ๊ฒฝ (implementation โ api)์ ๋ํ ๊ฒํ ๊ฐ ํ์ํฉ๋๋ค.domain.timetable ๋ชจ๋์
implementation์์api๋ก ๋ณ๊ฒฝํ๋ฉด presentation ๋ชจ๋์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋์์๋ domain.timetable์ ํด๋์ค๋ค์ ์ง์ ์ ๊ทผํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด๊ฒ์ด ์๋์ ์ธ ์ค๊ณ ๊ฒฐ์ ์ธ์ง ํ์ธํด์ฃผ์ธ์. ์ํคํ ์ฒ ๊ณ์ธต ๋ถ๋ฆฌ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
17-19: Koin Compose ์์กด์ฑ ์ถ๊ฐ๊ฐ ์ ์ ํฉ๋๋ค.Compose UI์ ํจ๊ป Koin์ ์ฌ์ฉํ๊ธฐ ์ํ ํ์ ์์กด์ฑ์ด ๋ชจ๋ ์ ์ถ๊ฐ๋์์ต๋๋ค:
- koin.compose: ๊ธฐ๋ณธ Compose ํตํฉ
- koin.compose.viewmodel: Compose์์ ViewModel ์ฌ์ฉ์ ์ํ ํ์ฅ
- koin.compose.viewmodel.navigation: ๋ค๋น๊ฒ์ด์ ๊ณผ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ฅ
์ด๋ hiltViewModel()์์ koinViewModel()์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ง์ํฉ๋๋ค.
data/openmajor/build.gradle.kts (1)
12-13: Koin ์์กด์ฑ ์ถ๊ฐ๊ฐ ์ ์ ํฉ๋๋ค.OpenMajor ๋ฐ์ดํฐ ๋ชจ๋์ Koin ์์กด์ฑ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ถ๊ฐ๋์์ต๋๋ค. Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ํ์ํ ํต์ฌ ์์กด์ฑ์ด ๋ชจ๋ ํฌํจ๋์ด ์์ต๋๋ค.
domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateOpenLectureIfNeedUseCase.kt (1)
7-9: ์ฝ๋ ๋ณ๊ฒฝ์ด ์ ์ ํฉ๋๋คHilt์์ Koin์ผ๋ก DI ํ๋ ์์ํฌ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ณผ์ ์์
@Inject์ด๋ ธํ ์ด์ ์ ์ ๊ฑฐํ ๊ฒ์ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ์ ๋๋ค. Koin์์๋ ์์ฑ์ ์ฃผ์ ์ ์ด๋ ธํ ์ด์ ์ด ํ์ํ์ง ์์ต๋๋ค.data/timetable/src/main/java/com/suwiki/data/timetable/repository/TimetableRepositoryImpl.kt (1)
13-15: ์ฝ๋ ๋ณ๊ฒฝ์ด ์ ์ ํฉ๋๋คHilt์์ Koin์ผ๋ก DI ํ๋ ์์ํฌ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ณผ์ ์์
@Inject์ด๋ ธํ ์ด์ ์ ์ ๊ฑฐํ ๊ฒ์ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ์ ๋๋ค. Koin์์๋ ์์ฑ์ ์ฃผ์ ์ ์ด๋ ธํ ์ด์ ์ด ํ์ํ์ง ์์ต๋๋ค.build-logic/convention/src/main/java/com/kunize/convention/Const.kt (1)
6-8:Details
โ Verification inconclusive
SDK ๋ฒ์ ์ ๋ฐ์ดํธ ๊ฒํ ํ์
SDK ๋ฒ์ ์ด ์๋นํ ๋์์ก์ต๋๋ค:
- compileSdk์ targetSdk๊ฐ 35๋ก ์ฆ๊ฐ (Android 15 ๊ฐ๋ฐ์ ํ๋ฆฌ๋ทฐ ๋์)
- minSdk๊ฐ 26์์ 28๋ก ์ฆ๊ฐ (Android 8.x Oreo ์ง์ ์ค๋จ)
ํนํ minSdk ์ฆ๊ฐ๋ ์ง์ํ๋ ๊ธฐ๊ธฐ ๋ฒ์์ ์ํฅ์ ์ค ์ ์์ผ๋ฏ๋ก, ์ด ๋ณ๊ฒฝ์ด ์๋์ ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๋ฏธ์น๋ ์ํฅ์ ๊ณ ๋ คํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
๐ Script executed:
#!/bin/bash # Android ๋ฒ์ ๋ณ ์ฌ์ฉ์ ๋ถํฌ๋ฅผ ํ์ธํ๊ธฐ ์ํ ์ ๋ณด ์ถ๋ ฅ echo "Google Play Console์์ ํ์ฌ ์ฑ์ Android ๋ฒ์ ๋ณ ์ฌ์ฉ์ ๋ถํฌ๋ฅผ ํ์ธํ์ธ์." echo "Android 8.x (API 26-27) ์ฌ์ฉ์ ๋น์จ์ด ์ค์ํฉ๋๋ค." echo "์ฐธ๊ณ : https://developer.android.com/about/dashboards"Length of output: 316
SDK ๋ฒ์ ์ ๋ฐ์ดํธ ๊ฒํ ์์ฒญ
minSdk๋ฅผ 28๋ก ์ํฅ ์กฐ์ ํ๋ฉด Android 8.x(API 26โ27) ์ง์์ด ์ค๋จ๋๋ฏ๋ก, ์ด ๋ณ๊ฒฝ์ด ์๋๋ ๊ฒ์ธ์ง์ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๋ฏธ์น๋ ์ํฅ์ ๋ฐ๋์ ํ์ธํด์ฃผ์ธ์.
- ํ์ผ:
build-logic/convention/src/main/java/com/kunize/convention/Const.kt(6โ8ํ)- ๋ณ๊ฒฝ๋ SDK ๋ฒ์ :
const val compileSdk = 35 const val minSdk = 28 const val targetSdk = 35- ํ์ธ ๋ฐฉ๋ฒ:
โข Google Play Console > Android ๋ฒ์ ๋ณ ์ฌ์ฉ์ ๋ถํฌ (ํนํ API 26โ27) ํ์ธ
โข API 26โ27 ์ฌ์ฉ์ ๋น์จ์ด ์ถฉ๋ถํ ๋ฎ์ ๋ณ๊ฒฝ ์ํฅ์ด ํ์ฉ ๊ฐ๋ฅํ์ง ๊ฒํdomain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableUseCase.kt (1)
7-9: ์ฝ๋ ๋ณ๊ฒฝ์ด ์ ์ ํฉ๋๋คHilt์์ Koin์ผ๋ก DI ํ๋ ์์ํฌ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ณผ์ ์์
@Inject์ด๋ ธํ ์ด์ ์ ์ ๊ฑฐํ ๊ฒ์ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ์ ๋๋ค. Koin์์๋ ์์ฑ์ ์ฃผ์ ์ ์ด๋ ธํ ์ด์ ์ด ํ์ํ์ง ์์ต๋๋ค.domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetOpenLectureListUseCase.kt (1)
8-10: ์ฝ๋ ๋ณ๊ฒฝ ์น์ธ - Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์์ฑ์์์
@Inject์ด๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋ ๊ฒ์ด ํ์ธ๋ฉ๋๋ค. ์ด๋ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ง๊ฒ ์ ์ ํ ๋ณ๊ฒฝ๋์์ต๋๋ค.domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableCellUseCase.kt (1)
8-10: ์ฝ๋ ๋ณ๊ฒฝ ์น์ธ - Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์์ฑ์์์
@Inject์ด๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋ ๊ฒ์ด ํ์ธ๋ฉ๋๋ค. ์ด๋ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ง๊ฒ ์ ์ ํ ๋ณ๊ฒฝ๋์์ต๋๋ค.remote/timetable/src/main/java/com.suwiki.remote.timetable/datasource/RemoteOpenLectureDataSourceImpl.kt (1)
10-12: ์ฝ๋ ๋ณ๊ฒฝ ์น์ธ - Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์์ฑ์์์
@Inject์ด๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋ ๊ฒ์ด ํ์ธ๋ฉ๋๋ค. ์ด๋ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ง๊ฒ ์ ์ ํ ๋ณ๊ฒฝ๋์์ต๋๋ค.data/timetable/src/main/java/com/suwiki/data/timetable/repository/OpenLectureRepositoryImpl.kt (1)
18-21: ์ฝ๋ ๋ณ๊ฒฝ ์น์ธ - Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์์ฑ์์์
@Inject์ด๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋ ๊ฒ์ด ํ์ธ๋ฉ๋๋ค. ์ด๋ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ง๊ฒ ์ ์ ํ ๋ณ๊ฒฝ๋์์ต๋๋ค.domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetTimetableCellTypeUseCase.kt (1)
7-9:Details
โ Verification inconclusive
Hilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ธ๋จ
์์ฑ์์์
@Inject์ ๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋์ด Koin ์คํ์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๊ฒ์ PR ๋ชฉ์ ์ ๋ง๊ฒ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค.์ ์ ํ Koin ๋ชจ๋์์ ์ด UseCase๋ฅผ ์ ๊ณตํ๊ณ ์๋์ง ํ์ธํ์ธ์.
๐ Script executed:
#!/bin/bash # timetableDomainModule์์ GetTimetableCellTypeUseCase๊ฐ ๋ฑ๋ก๋์ด ์๋์ง ํ์ธํฉ๋๋ค. echo "Looking for GetTimetableCellTypeUseCase registration in Koin modules..." fd -e kt | xargs grep -l "timetableDomainModule" | xargs cat | grep -A 10 "timetableDomainModule" | grep "GetTimetableCellTypeUseCase"Length of output: 283
[Koin ๋ชจ๋ ๋ด UseCase ๋ฑ๋ก ์ฌํ์ธ ์คํฌ๋ฆฝํธ ์คํ]
Koin DSL์์GetTimetableCellTypeUseCase๊ฐ ์ค์ ๋ก single ๋๋ factory๋ก ๋ฑ๋ก๋์ด ์๋์ง ์ถ๊ฐ๋ก ๊ฒ์ํฉ๋๋ค.
๐ Script executed:
#!/bin/bash echo "Koin DSL์์ GetTimetableCellTypeUseCase ๋ฑ๋ก ๊ฒ์ ์ค..." # single์ด๋ factory๋ก ๋ฑ๋ก๋ ๋ถ๋ถ์ ๊ฒ์ํฉ๋๋ค. rg -n "single<.*GetTimetableCellTypeUseCase" --glob "*.kt" || rg -n "factory<.*GetTimetableCellTypeUseCase" --glob "*.kt"Length of output: 231
GetTimetableCellTypeUseCase Koin ๋ชจ๋ ๋ฑ๋ก ํ์ธ ํ์
ํ์ฌ ์ฝ๋๋ฒ ์ด์ค์์GetTimetableCellTypeUseCase๋ฅผ Koin DSL(single๋๋factory)๋ก ๋ฑ๋กํ ๋ถ๋ถ์ด ๊ฒ์๋์ง ์์์ต๋๋ค.
โtimetableDomainModule๋๋ ๋ค๋ฅธ Koin ๋ชจ๋์ ํด๋น UseCase๊ฐ ์ ๊ณต(provide)๋๊ณ ์๋์ง ์๋์ผ๋ก ํ์ธํด์ฃผ์ธ์.domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetAllTimetableUseCase.kt (1)
8-10:Details
โ Verification successful
Hilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ธ๋จ
์์ฑ์์์
@Inject์ ๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋์ด Koin ์คํ์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๊ฒ์ PR ๋ชฉ์ ์ ๋ง๊ฒ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค.์ ์ ํ Koin ๋ชจ๋์์ ์ด UseCase๋ฅผ ์ ๊ณตํ๊ณ ์๋์ง ํ์ธํ์ธ์.
๐ Script executed:
#!/bin/bash # timetableDomainModule์์ GetAllTimetableUseCase๊ฐ ๋ฑ๋ก๋์ด ์๋์ง ํ์ธํฉ๋๋ค. echo "Looking for GetAllTimetableUseCase registration in Koin modules..." fd -e kt | xargs grep -l "timetableDomainModule" | xargs cat | grep -A 10 "timetableDomainModule" | grep "GetAllTimetableUseCase"Length of output: 308
Koin ๋ชจ๋ ๋ฑ๋ก ํ์ธ๋จ
timetableDomainModule์
factoryOf(::GetAllTimetableUseCase)๋ก GetAllTimetableUseCase๊ฐ ์ ์์ ์ผ๋ก ๋ฑ๋ก๋์ด ์์์ ํ์ธํ์ต๋๋ค. ์ถ๊ฐ ์กฐ์น๊ฐ ํ์ ์์ต๋๋ค.presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorViewModel.kt (1)
31-38:Details
โ Verification successful
ViewModel์ DI ํ๋ ์์ํฌ ๋ง์ด๊ทธ๋ ์ด์ ํ์ธ๋จ
@HiltViewModel๋ฐ@Inject์ ๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋์ด Koin ์คํ์ผ์ ViewModel ์ฃผ์ ์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. PR ๋ชฉ์ ์ ๋ง๊ฒ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค.์ ์ ํ Koin ๋ชจ๋์์ ์ด ViewModel์ ์ ๊ณตํ๊ณ ์๋์ง ํ์ธํ์ธ์.
๐ Script executed:
#!/bin/bash # openMajorModule์์ OpenMajorViewModel์ด ๋ฑ๋ก๋์ด ์๋์ง ํ์ธํฉ๋๋ค. echo "Looking for OpenMajorViewModel registration in Koin modules..." fd -e kt | xargs grep -l "openMajorModule" | xargs cat | grep -A 10 "openMajorModule" | grep "OpenMajorViewModel" # Koin viewModelOf๋ฅผ ์ฌ์ฉํ๋์ง ํ์ธํฉ๋๋ค. echo "Checking if viewModelOf is used for OpenMajorViewModel..." fd -e kt | xargs grep -l "OpenMajorViewModel" | xargs grep "viewModelOf"Length of output: 802
ViewModel Koin ๋ฑ๋ก ํ์ธ ์๋ฃ
OpenMajorModule.kt์์viewModelOf(::OpenMajorViewModel)์ ํตํดOpenMajorViewModel์ด ์ ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ฒ์ด ํ์ธ๋์์ต๋๋ค. Koin DI ์ค์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด ์์ด ์ถ๊ฐ ๊ฒ์ฆ์ด๋ ์์ ์ด ํ์ํ์ง ์์ต๋๋ค.domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetTimetableCellTypeUseCase.kt (1)
7-9:Details
โ Verification inconclusive
Hilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ธ๋จ
์์ฑ์์์
@Inject์ ๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋์ด Koin ์คํ์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๊ฒ์ PR ๋ชฉ์ ์ ๋ง๊ฒ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค.์ ์ ํ Koin ๋ชจ๋์์ ์ด UseCase๋ฅผ ์ ๊ณตํ๊ณ ์๋์ง ํ์ธํ์ธ์.
๐ Script executed:
#!/bin/bash # timetableDomainModule์์ SetTimetableCellTypeUseCase๊ฐ ๋ฑ๋ก๋์ด ์๋์ง ํ์ธํฉ๋๋ค. echo "Looking for SetTimetableCellTypeUseCase registration in Koin modules..." fd -e kt | xargs grep -l "timetableDomainModule" | xargs cat | grep -A 10 "timetableDomainModule" | grep "SetTimetableCellTypeUseCase"Length of output: 283
SetTimetableCellTypeUseCase์ Koin ๋ชจ๋ ๋ฑ๋ก ์ฌ๋ถ ํ์ธ ํ์
์์ฑ์์์@Inject์ ๋ ธํ ์ด์ ์ ๊ฑฐ๋ฅผ ํตํด Koin ์คํ์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ ์ ์ ํฉ๋๋ค.
๋ค๋ง, ํด๋น UseCase๊ฐ ์ค์ ๋ก Koin ๋ชจ๋์ ์ ๊ณต(provide)๋๊ณ ์๋์ง ์๋ ํญ๋ชฉ์ ์ง์ ํ์ธํด ์ฃผ์ธ์:
timetableDomainModule๋๋ ๊ด๋ จ DI ๋ชจ๋ ํ์ผ ๋ด์SetTimetableCellTypeUseCase๊ฐ ๋ฑ๋ก๋์ด ์๋์ง
(์:single { SetTimetableCellTypeUseCase(get()) }ํํ)presentation/openmajor/build.gradle.kts (1)
10-16:Details
โ Verification inconclusive
api ์์กด์ฑ ๋ ๋ฒจ ์ฌ์ฉ์ ๋ํ ํ์ธ ํ์
domain ๋ชจ๋๋ค์ด
implementation์์api๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๋ ์ด ๋ชจ๋์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋์๊ฒ ํด๋น ์์กด์ฑ์ ์ ์ด์ํค๋ ์ํฅ์ด ์์ต๋๋ค. Koin์ ์ฌ์ฉํ ๋ ํ์ํ ์ค์ ์ผ ์ ์์ง๋ง, ๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์์ง ์ ์์ต๋๋ค.์ด๋ฌํ ๋ณ๊ฒฝ์ด ์๋์ ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์ด ๋ชจ๋์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋์์ ์ด๋ฌํ domain ๋ชจ๋์ ์ง์ ์ ๊ทผํด์ผ ํ๋ ์๊ตฌ์ฌํญ์ด ์๋์ง ํ์ธํด์ฃผ์ธ์.
๐ Script executed:
#!/bin/bash # ์ด ๋ชจ๋์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋๋ค์ ํ์ธํฉ๋๋ค grep -r "implementation(projects.presentation.openmajor)" --include="*.kts" .Length of output: 79
์๋ ๋ช ๋ น์ด๋ก
presentation/openmajor๋ชจ๋ ์ฐธ์กฐ๋ฅผ ๋ ํฌ๊ด์ ์ผ๋ก ๊ฒ์ํด ์ฃผ์ธ์:
๐ Script executed:
#!/bin/bash # presentation/openmajor ๋ชจ๋์ ์ฐธ์กฐํ๋ ๋ชจ๋ build.gradle.kts ํ์ผ์ ๊ฒ์ํฉ๋๋ค. rg "projects\\.presentation\\.openmajor|project\\(\":presentation:openmajor\"\\)" -t ktsLength of output: 112
์๋ ๋ช ๋ น์ด๋ก
.gradle.ktsํ์ผ ์ ์ฒด์์presentation/openmajor๋ชจ๋ ์ฐธ์กฐ๋ฅผ ๋ค์ ํ์ธํด ์ฃผ์ธ์:
๐ Script executed:
#!/bin/bash # ๋ชจ๋ .gradle.kts ํ์ผ์ ๋์์ผ๋ก presentation/openmajor ๋ชจ๋ ์ฐธ์กฐ ๊ฒ์ rg "projects\\.presentation\\.openmajor|project\\(\":presentation:openmajor\"\\)" --glob "*.gradle.kts" -n .Length of output: 188
api ์์กด์ฑ ์ ์ด ์ํฅ ํ์ธ ์์ฒญ
presentation/openmajor๋ชจ๋์์domain.openmajorยทdomain.timetable์implementationโapi๋ก ๋ณ๊ฒฝํจ์ ๋ฐ๋ผ, ์ด๋ฅผ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ๋ชจ๋์ ๋๋ฉ์ธ ๋ชจ๋์ด ์ ์ด๋ฉ๋๋ค. ํ์ฌ ํ์ธ๋ ์ฐธ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- presentation/navigator/build.gradle.kts (12์ค):
api(projects.presentation.openmajor)์ด๋ก ์ธํด
presentation/navigator๋ชจ๋์์๋domain.openmajor๋ฐdomain.timetableํจํค์ง์ ์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ง๋๋ค.
ํด๋น ๋ณ๊ฒฝ์ด ์๋๋ ๊ฒ์ธ์ง, ๊ทธ๋ฆฌ๊ณnavigator๋ชจ๋์์ ๋๋ฉ์ธ ๋ชจ๋์ API๋ฅผ ์ง์ ์ฌ์ฉํด์ผ ํ๋์ง ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค.
ํ์ํ์ง ์๋ค๋ฉด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํดapiโimplementation์ผ๋ก ๋๋๋ฆฌ๋ ๊ฒ์ ๊ฒํ ํด ์ฃผ์ธ์.presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt (1)
22-26:Details
โ Verification successful
Hilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ธ
ViewModel ์์ฑ์์์
@Inject์ด๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋์์ต๋๋ค. ์ด๋ Koin ๋ชจ๋์์ ์ด ViewModel์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ฑ๋ก๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
๐ Script executed:
#!/bin/bash # Verify if TimetableEditorViewModel is properly registered in a Koin module rg "timetable.*Module" -A 20 | grep -i "TimetableEditorViewModel"Length of output: 200
TimetableEditorViewModel Koin ๋ฑ๋ก ํ์ธ ์๋ฃ
TimetableModule.ktํ์ผ์์viewModelOf(::TimetableEditorViewModel)๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋ฑ๋ก๋์ด ์์ด ์ถ๊ฐ ๊ฒ์ฆ์ด๋ ์์ ์ด ํ์ํ์ง ์์ต๋๋ค.โข ์์น:
- presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableModule.kt
domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableCellUseCase.kt (1)
9-11:Details
โ Verification successful
Koin ๋ชจ๋ ๋ฑ๋ก ํ์ธ ํ์
UseCase ์์ฑ์์์
@Inject์ด๋ ธํ ์ด์ ์ด ์ ๊ฑฐ๋์์ต๋๋ค. ์ด UseCase๊ฐ Koin ๋ชจ๋์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฑ๋ก๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
๐ Script executed:
#!/bin/bash # Verify if DeleteTimetableCellUseCase is properly registered in a Koin module rg "timetable.*Module" -A 40 | grep -i "DeleteTimetableCellUseCase"Length of output: 195
Koin ๋ชจ๋ ๋ฑ๋ก ํ์ธ ์๋ฃ
DeleteTimetableCellUseCase๊ฐdomain/timetable/src/main/java/com/suwiki/domain/timetable/timetableDomainModule.kt๋ดfactoryOf(::DeleteTimetableCellUseCase)๋ก ์ ์ ๋ฑ๋ก๋์ด ์์ผ๋ฏ๋ก ์ถ๊ฐ ์กฐ์น๊ฐ ํ์ ์์ต๋๋ค.
presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureScreen.kt (1)
43-71:Details
โ Verification successful
๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ๋ฐ Koin ViewModel ํตํฉ ํ์ธ
Hilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ import ๋ฌธ์ด ๋จ์์์ต๋๋ค:
- line 43:
androidx.hilt.navigation.compose.hiltViewModel๋ํ, ViewModel ์ฃผ์ ๋ฐฉ์์ด
hiltViewModel()์์koinViewModel()๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.๋ค์๊ณผ ๊ฐ์ด ๋ฏธ์ฌ์ฉ import๋ฅผ ์ ๊ฑฐํด์ฃผ์ธ์:
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel import com.suwiki.common.model.timetable.OpenLectureAlso applies to: 77-77
๐ Script executed:
#!/bin/bash # Verify if OpenLectureViewModel is properly registered in a Koin module rg "timetable.*Module" -A 40 | grep -i "OpenLectureViewModel" # Check the application initialization of Koin rg -A 20 "startKoin"Length of output: 2320
๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ๋ฐ Koin ViewModel ์ฃผ์ ํ์ธ ์๋ฃ
Koin ๋ชจ๋(
TimetableModule.kt)์์OpenLectureViewModel์ด ์ ์ ๋ฑ๋ก๋์ด ์์ผ๋ฉฐ,SuwikiApplication์startKoin์ด๊ธฐํ์๋timetableModule์ด ํฌํจ๋์ด ์์์ด ํ์ธ๋์์ต๋๋ค.
์๋ ๋ฏธ์ฌ์ฉ import๋ง ์ ๊ฑฐํด์ฃผ์ธ์:-import androidx.hilt.navigation.compose.hiltViewModelpresentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorModule.kt (1)
1-9: Koin ๋ชจ๋ ๊ตฌํ์ด ์ ์ ํ๊ฒ ์์ฑ๋์์ต๋๋ค.
openMajorModule๋ชจ๋์ด Koin์ ๊ถ์ฅ ๋ฐฉ์๋๋ก ๊ตฌํ๋์์ผ๋ฉฐ,viewModelOfDSL์ ์ฌ์ฉํ์ฌOpenMajorViewModel์ ๋ฑ๋กํ ๊ฒ์ด ์ ์ ํฉ๋๋ค.presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureViewModel.kt (1)
1-194:Details
โ Verification successful
Koin ์์กด์ฑ ์ฃผ์ ์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ผ๊ด๋๊ฒ ์ ์ฉ๋์๋์ง ํ์ธ
Hilt์์ Koin์ผ๋ก ์ ํ๋์์ผ๋ฉฐ ViewModel ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์ ์ง๋์์ต๋๋ค. ๋ค๋ง, ์ด ํด๋์ค๊ฐ timetableModule์ ์ ๋๋ก ๋ฑ๋ก๋์๋์ง ํ์ธํด๋ณด์ธ์.
๐ Script executed:
#!/bin/bash # ๋ชจ๋ Koin ๋ชจ๋ ํ์ผ์ ์ฐพ์ OpenLectureViewModel์ด ๋ฑ๋ก๋์ด ์๋์ง ํ์ธ echo "Checking for OpenLectureViewModel registration in Koin modules..." rg "OpenLectureViewModel" --type kotlin -A 2 -B 2Length of output: 2950
OpenLectureViewModel Koin ๋ชจ๋ ๋ฑ๋ก ํ์ธ
presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableModule.kt์์val timetableModule = module { viewModelOf(::OpenLectureViewModel) โฆ }์ผ๋ก
OpenLectureViewModel์ด ์ ์ ๋ฑ๋ก๋์ด ์์ผ๋ฉฐ,OpenLectureRoute์์๋koinViewModel()์ ํตํด ์ฌ๋ฐ๋ฅด๊ฒ ์ฃผ์ ๋๊ณ ์์ต๋๋ค.
์ถ๊ฐ ๊ฒํ ํ ์ฌํญ์ด ์์ต๋๋ค.presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorScreen.kt (1)
26-26: Koin ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.Hilt์์ Koin์ผ๋ก์ ViewModel ์ฃผ์ ๋ณ๊ฒฝ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ฃจ์ด์ก์ต๋๋ค.
TimetableEditorViewModel์ด Koin ๋ชจ๋์ ์ ๋๋ก ๋ฑ๋ก๋์ด ์๋์ง ํ์ธํ์ธ์.Also applies to: 32-32
presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorScreen.kt (1)
53-53: Koin ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.Hilt์์ Koin์ผ๋ก์ ViewModel ์ฃผ์ ๋ณ๊ฒฝ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ฃจ์ด์ก์ต๋๋ค.
CellEditorViewModel์ด Koin ๋ชจ๋์ ์ ๋๋ก ๋ฑ๋ก๋์ด ์๋์ง ํ์ธํ์ธ์.Also applies to: 59-59
presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListScreen.kt (1)
28-28: Koin ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.Hilt์์ Koin์ผ๋ก์ ViewModel ์ฃผ์ ๋ณ๊ฒฝ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ฃจ์ด์ก์ต๋๋ค.
TimetableListViewModel์ด Koin ๋ชจ๋์ ์ ๋๋ก ๋ฑ๋ก๋์ด ์๋์ง ํ์ธํ์ธ์.Also applies to: 34-34
app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt (1)
15-32: DI ํ๋ ์์ํฌ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ฒ ์ ํ ํ ์คํธ๊ฐ ํ์ํฉ๋๋ค.Hilt์์ Koin์ผ๋ก์ ์ ์ฒด ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฑ์ ๋ชจ๋ ๋ถ๋ถ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ ์ค์ํ ๋ณ๊ฒฝ์ฌํญ์ ๋๋ค. PR ์ค๋ช ์ ๋ฐ๋ฅด๋ฉด ๊ด๋ฒ์ํ ํ ์คํธ๊ฐ ์์ง ์ํ๋์ง ์์์ผ๋ฏ๋ก, ๋ค์ ์ฌํญ์ ํ์ธํ์ธ์:
- ๋ชจ๋ ํ๋ฉด๊ณผ ๊ธฐ๋ฅ์ด ์ ๋๋ก ์๋ํ๋์ง ์๋์ผ๋ก ํ ์คํธ
- ๊ฐ ViewModel๊ณผ ์์กด์ฑ์ด ์ฌ๋ฐ๋ฅด๊ฒ Koin ๋ชจ๋์ ๋ฑ๋ก๋์๋์ง ํ์ธ
- ํนํ ์ฑ๊ธํค ๋ฒ์์ ํฉํ ๋ฆฌ ๋ฒ์๊ฐ ์ด์ Hilt ์ค์ ๊ณผ ์ผ์นํ๋์ง ๊ฒ์ฆ
ํ ์คํธ ์ผ์ด์ค๊ฐ ์๋ค๋ฉด ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ์ฌ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์์๋์ง ์์๋์ง ํ์ธํ์ธ์.
presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableScreen.kt (1)
31-31: DI ํ๋ ์์ํฌ ๋ง์ด๊ทธ๋ ์ด์ ํ์ธHilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ฃจ์ด์ก์ต๋๋ค. ViewModel ์ฃผ์ ๋ฐฉ์์ด
hiltViewModel()์์koinViewModel()๋ก ์ ์ ํ๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค.Also applies to: 38-38
presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableModule.kt (1)
1-15: Koin ๋ชจ๋ ๊ตฌํ ์น์ธKoin ๋ชจ๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.
viewModelOfDSL์ ์ฌ์ฉํ์ฌ ๊ฐ ViewModel์ ๋ฑ๋กํ๋ ๋ฐฉ์์ด ์ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ด ๋ชจ๋์ Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์์ ํ์ํ ์์กด์ฑ ์ฃผ์ ์ค์ ์ ์ ์ ํ ์ ๊ณตํฉ๋๋ค.domain/timetable/src/main/java/com/suwiki/domain/timetable/timetableDomainModule.kt (1)
1-26: ๋๋ฉ์ธ ๋ชจ๋ ๊ตฌํ ์น์ธ๋๋ฉ์ธ ๊ณ์ธต์ Koin ๋ชจ๋์ด ์ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ฃผ์์ ํตํด use case๋ค์ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ๋ช ํํ๊ฒ ๊ตฌ๋ถํ์ฌ ๊ฐ๋ ์ฑ์ ๋์์ต๋๋ค.
factoryOfDSL์ ์ฌ์ฉํ์ฌ ๊ฐ use case๋ฅผ ์ ์ ํ๊ฒ ๋ฑ๋กํ๊ณ ์์ต๋๋ค.remote/timetable/src/main/java/com.suwiki.remote.timetable/di/RemoteDataSourceModule.kt (1)
4-6: Remote ๋ฐ์ดํฐ ์์ค ๋ชจ๋ ๊ตฌํ ์น์ธKoin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ฃจ์ด์ก์ต๋๋ค.
includes(firebaseDatabaseModule)๋ฅผ ํตํด Firebase ๋ชจ๋์ ํฌํจ์ํค๊ณ ,RemoteOpenLectureDataSource๋ฅผ ์ฑ๊ธํค์ผ๋ก ์ ์ ํ๊ฒ ๋ฑ๋กํ์ต๋๋ค. Dagger Hilt์์ Koin์ผ๋ก์ ๋ณํ์ด ์ ํํ๊ฒ ์ํ๋์์ต๋๋ค.Also applies to: 8-11
remote/common/src/main/java/com/suwiki/remote/common/di/FirebaseDatabaseModule.kt (1)
4-10: Hilt์์ Koin์ผ๋ก ์์กด์ฑ ์ฃผ์ ํ๋ ์์ํฌ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ ๋์์ต๋๋ค.Dagger Hilt์์ Koin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ ์ ํ๊ฒ ์ํ๋์์ต๋๋ค. FirebaseDatabase ์ธ์คํด์ค ์ ๊ณต ๋ก์ง์ด ๋์ผํ๊ฒ ์ ์ง๋๋ฉด์ ์์กด์ฑ ์ฃผ์ ํ๋ ์์ํฌ๋ง ๊ต์ฒด๋์์ต๋๋ค.
data/openmajor/src/main/java/com/suwiki/data/openmajor/di/RepositoryModule.kt (1)
5-10: ๋ฆฌํฌ์งํ ๋ฆฌ ๋ชจ๋์ Koin ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.Dagger Hilt์ ์ถ์ ๋ชจ๋ ๋ฐ @BINDS ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ๋ฐ์ธ๋ฉ์์ Koin์ module DSL ๋ฐ single ํจ์๋ฅผ ์ฌ์ฉํ ๋ฐฉ์์ผ๋ก ์ ์ ํ๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค. get() ํจ์๋ฅผ ํตํด OpenMajorRepositoryImpl์ ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ์๋ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.
remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/ApiModule.kt (2)
9-10: ์ ์ ํ Koin ์ํฌํธ ์ถ๊ฐ๋จHilt์์ Koin์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํ ํ์ํ ์ํฌํธ๋ค์ด ์ถ๊ฐ๋์์ต๋๋ค.
14-18: Koin ๋ชจ๋ ์ ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋จHilt ๋ชจ๋์์ Koin ๋ชจ๋๋ก ๋ณํ์ด ์ ์ด๋ฃจ์ด์ก์ต๋๋ค.
single<MajorApi>์ ์๋ฅผ ํตํด ์ฑ๊ธํค์ผ๋ก MajorApi๋ฅผ ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ, named ํ์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ํ "authRetrofit" Retrofit ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ค๊ณ ์์ต๋๋ค.local/common/src/main/java/com/suwiki/local/common/database/di/DatabaseModule.kt (2)
8-9: Koin ์ํฌํธ ์ถ๊ฐ ์ ์ ํจKoin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํ ํ์ํ ์ํฌํธ๋ค์ด ์ถ๊ฐ๋์์ต๋๋ค.
11-40: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋์ด Koin์ผ๋ก ์ ๋ณํ๋จHilt์์ Koin์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ ๋ณํ์ด ์ ์ด๋ฃจ์ด์ก์ต๋๋ค. ์ธ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(OpenMajor, Timetable, OpenLecture)๊ฐ ๋ชจ๋ ์ฑ๊ธํค์ผ๋ก ์ ์ ํ๊ฒ ์ ๊ณต๋๊ณ ์์ผ๋ฉฐ, ๊ธฐ์กด ์ค์ (๋ง์ด๊ทธ๋ ์ด์ , fallback ์ ์ฑ ๋ฑ)๋ ์ ์ ์ง๋์์ต๋๋ค. Hilt์
@ApplicationContext๋์ Koin์androidContext()๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ๋ ์ ์ ํฉ๋๋ค.local/common/src/main/java/com/suwiki/local/common/database/di/DaoModule.kt (2)
13-13: Koin ์ํฌํธ ์ถ๊ฐ๋จKoin์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํ ํ์ํ ์ํฌํธ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
15-19: DAO ๋ชจ๋์ด Koin์ผ๋ก ์ ๋ณํ๋จHilt์์ Koin์ผ๋ก DAO ๋ชจ๋ ๋ณํ์ด ์ ์ด๋ฃจ์ด์ก์ต๋๋ค. ์ธ ๊ฐ์ DAO(OpenMajorDao, TimeTableDao, OpenLectureDao)๊ฐ ๋ชจ๋ ์ฑ๊ธํค์ผ๋ก ์ ์ ํ๊ฒ ์ ๊ณต๋๊ณ ์์ผ๋ฉฐ, ๊ฐ DAO๋ฅผ ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์๋ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.
local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalOpenLectureDatasourceImpl.kt (1)
16-16: Dispatchers ์ํฌํธ ์ถ๊ฐ๋จ
Dispatchers.IO๋ฅผ ์ง์ ์ฌ์ฉํ๊ธฐ ์ํ ์ํฌํธ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalDataSourceModule.kt (1)
1-23: Hilt์์ Koin์ผ๋ก์ ์ ํ์ด ์ ์ ํ๊ฒ ์ด๋ฃจ์ด์ก์ต๋๋ค.Dagger Hilt์์ Koin์ผ๋ก ์์กด์ฑ ์ฃผ์ ํ๋ ์์ํฌ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ ์ํ๋์์ต๋๋ค. ๋ชจ๋ ์ ์ธ, ์์กด์ฑ ์ ๊ณต ๋ฐ ์ธํฐํ์ด์ค ๋ฐ์ธ๋ฉ์ด Koin์ DSL์ ํ์ฉํ์ฌ ์ ์ ํ๊ฒ ๊ตฌํ๋์์ต๋๋ค.
local/common/src/main/java/com/suwiki/local/common/datastore/di/DataStoreModule.kt (1)
18-35: DataStore ๋ชจ๋์ด Koin ๋ฐฉ์์ผ๋ก ์ ์ ํ ๋ณํ๋์์ต๋๋ค.Koin์
moduleDSL์ ์ฌ์ฉํ์ฌ DataStore ์ธ์คํด์ค๋ค์ ์ ๊ณตํ๋ ๊ตฌํ์ด ์ ๋์์ต๋๋ค.androidContext()๋ฅผ ํตํ ์ปจํ ์คํธ ์ ๊ทผ๊ณผ named ํ๋ฆฌํ์ด์ด๋ฅผ ์ฌ์ฉํ ์๋ณ๋ ์ ์ ํฉ๋๋ค.gradle/libs.versions.toml (1)
209-213: Koin ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ์ด ์ ์ ํ ์ถ๊ฐ๋์์ต๋๋ค.Koin ๊ด๋ จ ๋ชจ๋ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(core, android, compose ๊ด๋ จ ๋ชจ๋)๊ฐ ์ ์ ํ ์ ์๋์์ต๋๋ค.
data/timetable/src/main/java/com/suwiki/data/timetable/di/RepositoryModule.kt (1)
16-19: Repository ๋ชจ๋์ Koin ๋ณํ์ด ์ ๋์์ต๋๋ค.
singleOf์bindDSL์ ์ฌ์ฉํ Repository ๊ตฌํ ๋ฐ ์ธํฐํ์ด์ค ๋ฐ์ธ๋ฉ์ด ์ ์ ํฉ๋๋ค.
| implementation(libs.koin.core) | ||
| implementation(libs.koin.android) | ||
|
|
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.
๐ ๏ธ Refactor suggestion
Koin ์ฝ์ด ๋ฐ Android ์์กด์ฑ ์ถ๊ฐ
libs.koin.core์ libs.koin.android๊ฐ ์ถ๊ฐ๋์ด Koin DI ๊ตฌ์ฑ์ด ์ง์๋ฉ๋๋ค. ๋์์ ๊ธฐ์กด Hilt ๊ด๋ จ ํ๋ฌ๊ทธ์ธ(alias(libs.plugins.suwiki.android.hilt)) ๋ฐ ์์กด์ฑ์ด ๋จ์ ์๋์ง ์ ๊ฑฐ ์ฌ๋ถ๋ฅผ ๊ฒํ ํ์ธ์.
| implementation(libs.hilt.core) | ||
|
|
||
| implementation(libs.koin.core) |
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.
๐ ๏ธ Refactor suggestion
Hilt ์ฝ์ด ์์กด์ฑ ์ ๊ฑฐ ๋ฐ Koin ์์กด์ฑ ์ ํ
implementation(libs.koin.core)๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ค๋ณต๋ DI ๊ตฌ์ฑ์ ๋ฐฉ์งํ๊ธฐ ์ํด implementation(libs.hilt.core) ์์กด์ฑ์ ์ ๊ฑฐํ์ธ์.
| implementation(libs.koin.core) | ||
| implementation(libs.koin.android) | ||
|
|
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.
๐ก Verification agent
๐งฉ Analysis chain
Koin ์์กด์ฑ ์ถ๊ฐ ๋ฐ Hilt ํ๋ฌ๊ทธ์ธ ์ ๊ฑฐ ํ์ธ
libs.koin.core์ libs.koin.android๊ฐ ์ถ๊ฐ๋์ด ์ฑ ์์ค DI๊ฐ Koin์ผ๋ก ์ ํ๋์์ต๋๋ค. alias(libs.plugins.suwiki.android.hilt) ํ๋ฌ๊ทธ์ธ์ด ๋จ์ ์๋์ง ํ์ธ ํ ์ ๊ฑฐํ๊ณ , SuwikiApplication์์ Koin ๋ชจ๋์ด ์ ์ ์ด๊ธฐํ๋๋์ง ๊ฒ์ฆํ์ธ์.
๐ Script executed:
#!/bin/bash
echo "app-compose/build.gradle.kts์์ Hilt ํ๋ฌ๊ทธ์ธ alias ํ์ธ"
grep -R "alias(libs.plugins.suwiki.android.hilt)" -n app-compose/build.gradle.kts || echo "Hilt ํ๋ฌ๊ทธ์ธ alias ์์"
echo "SuwikiApplication์์ Koin ์ด๊ธฐํ(startKoin) ํ์ธ"
grep -R "startKoin" -n .Length of output: 563
๐ Script executed:
#!/bin/bash
file="app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt"
echo "SuwikiApplication์ startKoin ํธ์ถ ๋ฐ ๋ชจ๋ ์ค์ ํ์ธ"
grep -R "startKoin" -n "$file" -A10 || echo "startKoin ํธ์ถ ์์"
echo "---"
echo "modules ๋ฑ๋ก ํ์ธ"
grep -R "modules(" -n "$file" || echo "modules ํธ์ถ ์์"Length of output: 1026
Hilt ํ๋ฌ๊ทธ์ธ alias ์ ๊ฑฐ ํ์
app-compose/build.gradle.kts5ํ์alias(libs.plugins.suwiki.android.hilt)๋ฅผ ์ญ์ ํ์ธ์.SuwikiApplication์์๋ ์ด๋ฏธstartKoin(20ํ)๊ณผmodules(โฆ)(22ํ~)๊ฐ ์ ์ ํธ์ถ๋๊ณ ์์ต๋๋ค.
์ญ์ ํ Gradle ๋น๋ ๋ฐ ์ฑ ์คํ ์ Koin ๊ธฐ๋ฐ DI๊ฐ ์๋๋๋ก ๋์ํ๋์ง ๊ฒ์ฆํด ์ฃผ์ธ์.
| import com.suwiki.common.model.timetable.Timetable | ||
| import com.suwiki.domain.common.runCatchingIgnoreCancelled | ||
| import com.suwiki.domain.timetable.repository.TimetableRepository | ||
| import javax.inject.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.
๐ ๏ธ Refactor suggestion
๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ๊ถ์ฅ
javax.inject.Inject๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก ์ญ์ ํ์ฌ ๊ฐ๋
์ฑ๊ณผ ๋น๋ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํด์ฃผ์ธ์.
| import com.suwiki.common.model.timetable.Timetable | ||
| import com.suwiki.domain.common.runCatchingIgnoreCancelled | ||
| import com.suwiki.domain.timetable.repository.TimetableRepository | ||
| import javax.inject.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.
๐ ๏ธ Refactor suggestion
๋ฏธ์ฌ์ฉ import ์ ๊ฑฐ ๊ถ์ฅ
javax.inject.Inject๊ฐ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์์ต๋๋ค. import ๋ฌธ์ ์ญ์ ํด์ฃผ์ธ์.
| import javax.inject.Inject | ||
|
|
||
| class OpenMajorRepositoryImpl @Inject constructor( | ||
| class OpenMajorRepositoryImpl( |
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.
๐ก Verification agent
๐งฉ Analysis chain
@Inject ์ ๋ ธํ ์ด์ ์ ๊ฑฐ๋ ์ ์ ํ๋ ์ถ๊ฐ ์ ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
Hilt์์ Koin์ผ๋ก ์ ํํ๋ฉด์ @Inject ์ ๋ ธํ ์ด์ ์ ์ ๊ฑฐํ ๊ฒ์ ์ ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ ์ฌํญ์ ํ์ธํด ์ฃผ์ธ์:
- 10๋ฒ ์ค์
javax.inject.Injectimport๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก ์ ๊ฑฐํด์ผ ํฉ๋๋ค. - ์ด ๊ตฌํ์ฒด๊ฐ Koin ๋ชจ๋์ ์ ์ ํ ๋ฑ๋ก๋์๋์ง ํ์ธํ์ธ์ (์ผ๋ฐ์ ์ผ๋ก RepositoryModule.kt ํ์ผ).
-import javax.inject.Inject๐ Script executed:
#!/bin/bash
# RepositoryModule ํ์ผ์์ OpenMajorRepositoryImpl์ด ๋ฑ๋ก๋์๋์ง ํ์ธ
rg "OpenMajorRepositoryImpl" --type kotlin | grep -i moduleLength of output: 357
๋ถํ์ํ javax.inject.Inject import ์ ๊ฑฐ ํ์
Koin DI ๋ชจ๋(RepositoryModule.kt)์์ OpenMajorRepositoryImpl์ด ์ด๋ฏธ ๋ฑ๋ก๋ ๊ฒ์ ํ์ธํ์ต๋๋ค. ์๋์ ๊ฐ์ด import๋ง ์ ๊ฑฐํด์ฃผ์ธ์.
- ํ์ผ:
data/openmajor/src/main/java/com/suwiki/data/openmajor/repository/OpenMajorRepositoryImpl.kt(10๋ฒ ์ค)
-import javax.inject.Inject๐ 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.
| import javax.inject.Inject | |
| class OpenMajorRepositoryImpl @Inject constructor( | |
| class OpenMajorRepositoryImpl( | |
| class OpenMajorRepositoryImpl( | |
| // โฆ | |
| ) |
| private val dataStore: DataStore<Preferences>, | ||
| private val openLectureDatabase: OpenLectureDatabase, | ||
| ) : LocalOpenLectureDataSource { | ||
| private val ioDispatcher = Dispatchers.IO |
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.
๐ ๏ธ Refactor suggestion
๋์คํจ์ฒ ํ๋์ฝ๋ฉ ์ฃผ์
์ฃผ์
๋๋ CoroutineDispatcher๋ฅผ Dispatchers.IO๋ก ํ๋์ฝ๋ฉํ์์ต๋๋ค. ์ด๋ ํ
์คํธ๊ฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค(ํ
์คํธ์ฉ ๋์คํจ์ฒ๋ก ์ฝ๊ฒ ๋์ฒดํ ์ ์์). ๊ฐ๋ฅํ๋ค๋ฉด Koin์ ํตํด ๋์คํจ์ฒ๋ฅผ ์ฃผ์
๋ฐ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์ธ์.
- private val ioDispatcher = Dispatchers.IO
+ private val ioDispatcher: CoroutineDispatcher = get()๊ทธ๋ฆฌ๊ณ Koin ๋ชจ๋์ ๋ค์๊ณผ ๊ฐ์ด ๋์คํจ์ฒ๋ฅผ ์ ๊ณตํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ธ์:
// LocalTimetableModule.kt ํ์ผ์ ์ถ๊ฐ
single<CoroutineDispatcher> { Dispatchers.IO }| class LocalOpenLectureDatasourceImpl( | ||
| private val dataStore: DataStore<Preferences>, | ||
| private val openLectureDatabase: OpenLectureDatabase, |
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.
๐ก Verification agent
๐งฉ Analysis chain
์์ฑ์ ์ฃผ์ ๋ฐฉ์ ๋ณ๊ฒฝ
Hilt์ @Inject ๋์ Koin์ ์์ฑ์ ์ฃผ์
๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. @NormalDataStore ์ด๋
ธํ
์ด์
๋ ์ ๊ฑฐ๋์๋๋ฐ, ์ฌ๋ฌ DataStore ์ธ์คํด์ค๊ฐ ์๋ ๊ฒฝ์ฐ Koin์์ ์ด๋ป๊ฒ ๊ตฌ๋ถํ๋์ง ํ์ธ์ด ํ์ํฉ๋๋ค.
Koin ์ค์ ์์ DataStore ์ธ์คํด์ค๊ฐ ์ด๋ป๊ฒ ์ ๊ณต๋๋์ง ๋ค์ ์คํฌ๋ฆฝํธ๋ก ํ์ธํด๋ณด์ธ์:
๐ Script executed:
#!/bin/bash
# ํ๋ก์ ํธ์์ DataStore ๊ด๋ จ Koin ๋ชจ๋ ์ค์ ํ์ธ
echo "DataStore ๊ด๋ จ Koin ๋ชจ๋ ์ค์ ํ์ธ:"
rg "DataStore.*module" -l
# DataStore ์ธ์คํด์ค ์ ๊ณต ๋ฐฉ์ ํ์ธ
echo "DataStore ์ธ์คํด์ค ์ ๊ณต ๋ฐฉ์:"
rg "single.*DataStore" -A 2 -B 2Length of output: 744
Koin ๋ชจ๋: DataStore qualifier ๋ช ์ ๊ฒํ ํ์
DataStoreModule ์์ ์ด๋ฏธ named("normalDataStore") qualifier ๋ก ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๊ณ ์์ผ๋ฏ๋ก, LocalOpenLectureDatasourceImpl ์์ฑ์์ ์ฃผ์
ํ ๋๋ ๋์ผํ qualifier ๋ฅผ ๋ช
์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฌ๋ฌ DataStore ์ธ์คํด์ค ์ค ์ด๋ค ๊ฒ์ ์ฃผ์
ํ ์ง ์ ์ ์์ด DI ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ฒํ ์ฌํญ:
local/common/src/main/java/com/suwiki/local/common/datastore/di/DataStoreModule.kt์์๋ก ์ ์๋จ์ ํ์ธsingle(qualifier = named("normalDataStore")) { โฆ }
LocalOpenLectureDatasourceImpl์ ๋ฐ์ธ๋ฉํ๋ Koin ๋ชจ๋(์:local/timetable/src/main/java/.../di/TimetableModule.kt)์์์ ๊ฐ์ด ์์ single<LocalOpenLectureDatasource> { LocalOpenLectureDatasourceImpl( get(named("normalDataStore")), // qualifier ๋ช ์ get() ) }
| kotlin-test = "2.0.20" | ||
| core = "1.6.1" | ||
|
|
||
| koin = "4.1.0-Beta10" |
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.
๐ก Verification agent
๐งฉ Analysis chain
Koin ๋ฒ์ ์ถ๊ฐ๊ฐ ์ ์ ํฉ๋๋ค.
Koin 4.1.0-Beta10 ๋ฒ์ ์ ์ถ๊ฐํ์ต๋๋ค. ๋ฒ ํ ๋ฒ์ ์ด๋ฏ๋ก ์์ ์ ์ธ ๋ฆด๋ฆฌ์ค๋ก ์ ๊ทธ๋ ์ด๋ ๊ณํ์ ๊ณ ๋ คํ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ์ต์ ์์ ๋ฒ์ ์ ํ์ธํด๋ณด์ธ์:
๐ Script executed:
#!/bin/bash
curl -s https://search.maven.org/solrsearch/select?q=g:%22io.insert-koin%22+AND+a:%22koin-core%22&rows=20&wt=json | jq -r '.response.docs | sort_by(.v) | reverse | .[0:5] | .[] | .v'Length of output: 2125
Koin ๋ฒ์ ์ ๋ฐ์ดํธ ์ ์: ์ต์ ๋ฒ ํ(4.1.0-Beta11) ๋๋ ์์ (4.0.0) ์ ํ
ํ์ฌ Maven Central์๋ 4.1.0-Beta10 ๋์ 4.1.0-Beta11์ด ๋ฑ๋ก๋์ด ์์ต๋๋ค.
- ๋ฒ ํ ์ฑ๋์ ์ ์งํ ๊ฒฝ์ฐ โ
4.1.0-Beta11๋ก ์ ๊ทธ๋ ์ด๋ ๊ถ์ฅ - ์์ ์ฑ์ ์ต์ฐ์ ์ผ๋ก ํ ๊ฒฝ์ฐ โ ํ์ฌ ์์ ๋ฆด๋ฆฌ์ค์ธ
4.0.0์ผ๋ก ๊ณ ์ ๊ถ์ฅ
์์ ์์น:
- ํ์ผ:
gradle/libs.versions.toml(๋ผ์ธ 73)- koin = "4.1.0-Beta10" + koin = "4.1.0-Beta11" # ์ต์ ๋ฒ ํ # ๋๋ + koin = "4.0.0" # ์์ ๋ฒ์
Committable suggestion skipped: line range outside the PR's diff.
| val loggingInterceptor = HttpLoggingInterceptor { message -> | ||
| when { | ||
| !message.isJsonObject() && !message.isJsonArray() -> | ||
| Timber.tag("RETROFIT_TAG").d("CONNECTION INFO -> $message") | ||
|
|
||
| else -> kotlin.runCatching { | ||
| json.encodeToString(Json.parseToJsonElement(message)) | ||
| }.onSuccess { | ||
| Timber.tag(RETROFIT_TAG).d(it) | ||
| }.onFailure { | ||
| Timber.tag(RETROFIT_TAG).d(message) | ||
| else -> kotlin.runCatching { | ||
| json.encodeToString(Json.parseToJsonElement(message)) | ||
| }.onSuccess { | ||
| Timber.tag("RETROFIT_TAG").d(it) | ||
| }.onFailure { | ||
| Timber.tag("RETROFIT_TAG").d(message) | ||
| } | ||
| } | ||
| } | ||
| } | ||
| loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY | ||
| loggingInterceptor | ||
| } |
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.
๐ ๏ธ Refactor suggestion
๋ฆด๋ฆฌ์ค ๋น๋์์ ๊ณผ๋ํ ๋ก๊ทธ ๋
ธ์ถ ๋ฐฉ์ง
HttpLoggingInterceptor์ ๋ ๋ฒจ์ ํญ์ BODY๋ก ๊ณ ์ ํ๋ฉด ๋ฏผ๊ฐํ ์์ฒญ/์๋ต ๋ฐ์ดํฐ๊ฐ ๋ฆด๋ฆฌ์ค ๋น๋์์๋ ๋
ธ์ถ๋ ์ํ์ด ์์ต๋๋ค. BuildConfig.DEBUG ํ๋๊ทธ๋ก ๋ถ๊ธฐํ์ฌ ๋๋ฒ๊ทธ ๋น๋์๋ง BODY, ๋ฆด๋ฆฌ์ค ๋น๋์๋ NONE(๋๋ BASIC)์ ์ค์ ํด ์ฃผ์ธ์.
-loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
+loggingInterceptor.level = if (BuildConfig.DEBUG) {
+ HttpLoggingInterceptor.Level.BODY
+} else {
+ HttpLoggingInterceptor.Level.NONE
+}|
|
||
| val timetableDomainModule = module { | ||
| // Timetable management use cases | ||
| factoryOf(::DeleteTimetableUseCase) |
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.
UseCase๋ค์ single ๋์ ์ factory๋ก ์์ฑํ๋ ์ด์ ์ ์ ์์๊น์?
factory๋ก ์์ฑํ๊ฒ ๋๋ฉด UseCase๋ค ํธ์ถํ ๋๋ง๋ค ๊ฐ์ฒด๋ฅผ ๊ณ์ ์๋ก ์์ฑํ๊ฒ ๋ ํ ๋ฐ ์ฑ๋ฅ์ ์ํฅ์ด ์์๊ฑฐ ๊ฐ์์์
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.
์๋
๋ณ ์ด์ ์์ต๋๋ค ... !
์ผ๋จ cmp ์คํ ๊ฐ๋ฅ ํ์ธ์ด ์ฐ์ ์ด๋ผ ์๊ฐํด์ ๋ง ์งฐ์ด์..ใ
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.
๋ต, ๊ทธ๋ผ ์ด ๋ถ๋ถ์ ์ถํ์ ๋ ๊ฒํ ํด๋ณด๊ณ ์์ ํ ์ง ๊ฒฐ์ ํ์์ฃ
BEEEAM-J
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.
koin ์ ์ฉ ์ฝ๋ ํ์ธ ํ์ต๋๋ค.
๊ณ ์ํ์ จ์ต๋๋ค :)
๐ PR ์์ฝ
๐ฑ ์์ ํ ๋ด์ฉ
๐ฑ PR ํฌ์ธํธ
๐ธ ์คํฌ๋ฆฐ์ท
๐ฎ ๊ด๋ จ ์ด์
Summary by CodeRabbit
์๋ก์ด ๊ธฐ๋ฅ
๋ฒ๊ทธ ์์
๊ธฐํ ๋ณ๊ฒฝ์ฌํญ