diff --git a/app-compose/build.gradle.kts b/app-compose/build.gradle.kts index f438cd4f9..001c4b642 100644 --- a/app-compose/build.gradle.kts +++ b/app-compose/build.gradle.kts @@ -2,7 +2,6 @@ plugins { alias(libs.plugins.suwiki.android.application) alias(libs.plugins.suwiki.android.application.compose) - alias(libs.plugins.suwiki.android.hilt) alias(libs.plugins.google.services) alias(libs.plugins.firebase.crashlytics) alias(libs.plugins.compose.compiler) @@ -25,9 +24,11 @@ dependencies { implementation(projects.remote.openmajor) implementation(projects.remote.timetable) + implementation(projects.remote.common) implementation(projects.local.openmajor) implementation(projects.local.timetable) + implementation(projects.local.common) implementation(projects.data.openmajor) implementation(projects.data.timetable) diff --git a/app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt b/app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt index f3c89ba16..27bbeb66b 100644 --- a/app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt +++ b/app-compose/src/main/java/com/kunize/uswtimetable/SuwikiApplication.kt @@ -3,10 +3,21 @@ package com.kunize.uswtimetable import android.app.Application import com.suwiki.data.openmajor.di.openMajorRepositoryModule import com.suwiki.data.timetable.di.timetableRepositoryModule -import com.suwiki.domain.timetable.timetableDomainModule +import com.suwiki.domain.openmajor.di.openMajorUseCaseModule +import com.suwiki.domain.timetable.timetableUseCaseModule +import com.suwiki.local.common.database.di.daoModule +import com.suwiki.local.common.datastore.di.dataStoreModule +import com.suwiki.local.common.database.di.databaseModule +import com.suwiki.local.openmajor.di.localOpenMajorDataSourceModule import com.suwiki.local.timetable.di.localTimetableDataSourceModule -import com.suwiki.presentation.openmajor.di.openMajorModule -import com.suwiki.presentation.timetable.di.timetableModule +import com.suwiki.presentation.navigator.di.mainViewModelModule +import com.suwiki.presentation.openmajor.di.openMajorViewModelModule +import com.suwiki.presentation.timetable.di.timetableViewModelModule +import com.suwiki.remote.common.di.apiModule +import com.suwiki.remote.common.di.firebaseDatabaseModule +import com.suwiki.remote.common.di.networkModule +import com.suwiki.remote.openmajor.di.remoteOpenMajorApiModule +import com.suwiki.remote.openmajor.di.remoteOpenMajorDataSourceModule import com.suwiki.remote.timetable.di.remoteTimetableDataSourceModule import org.koin.android.ext.koin.androidContext import org.koin.core.context.startKoin @@ -20,13 +31,35 @@ class SuwikiApplication : Application() { startKoin { androidContext(this@SuwikiApplication) modules( - remoteTimetableDataSourceModule, - localTimetableDataSourceModule, - timetableRepositoryModule, + // data module openMajorRepositoryModule, - timetableModule, - openMajorModule, - timetableDomainModule, + timetableRepositoryModule, + + // domain module + openMajorUseCaseModule, + timetableUseCaseModule, + + // presentation module + mainViewModelModule, + openMajorViewModelModule, + timetableViewModelModule, + + // local module + localOpenMajorDataSourceModule, + localTimetableDataSourceModule, + // common + daoModule, + databaseModule, + dataStoreModule, + + // remote module + remoteOpenMajorApiModule, + remoteOpenMajorDataSourceModule, + remoteTimetableDataSourceModule, + // common + apiModule, + networkModule, + firebaseDatabaseModule, ) } } diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index bb79dec9c..00f570402 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -33,10 +33,6 @@ gradlePlugin { id = "suwiki.android.library.compose" implementationClass = "AndroidLibraryComposeConventionPlugin" } - register("androidHilt") { - id = "suwiki.android.hilt" - implementationClass = "AndroidHiltConventionPlugin" - } register("javaLibrary") { id = "suwiki.java.library" implementationClass = "JavaLibraryConventionPlugin" diff --git a/build-logic/convention/src/main/java/AndroidHiltConventionPlugin.kt b/build-logic/convention/src/main/java/AndroidHiltConventionPlugin.kt deleted file mode 100644 index 949716e2c..000000000 --- a/build-logic/convention/src/main/java/AndroidHiltConventionPlugin.kt +++ /dev/null @@ -1,22 +0,0 @@ -import com.kunize.convention.libs -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.kotlin.dsl.dependencies - -class AndroidHiltConventionPlugin : Plugin { - override fun apply(target: Project) { - with(target) { - with(pluginManager) { - apply("com.google.devtools.ksp") - apply("dagger.hilt.android.plugin") - } - - dependencies { - "implementation"(libs.findLibrary("hilt.android").get()) - "ksp"(libs.findLibrary("hilt.compiler").get()) - "testImplementation"(libs.findLibrary("hilt.testing").get()) - "kspTest"(libs.findLibrary("hilt.testing.compiler").get()) - } - } - } -} diff --git a/build-logic/convention/src/main/java/DataConventionPlugin.kt b/build-logic/convention/src/main/java/DataConventionPlugin.kt index c1e9d7e03..fc9b6dd2e 100644 --- a/build-logic/convention/src/main/java/DataConventionPlugin.kt +++ b/build-logic/convention/src/main/java/DataConventionPlugin.kt @@ -10,7 +10,6 @@ internal class DataConventionPlugin : Plugin { with(target) { with(pluginManager) { apply("suwiki.android.library") - apply("suwiki.android.hilt") } dependencies { diff --git a/build-logic/convention/src/main/java/PresentationComposeConventionPlugin.kt b/build-logic/convention/src/main/java/PresentationComposeConventionPlugin.kt index 1991400ed..18012e151 100644 --- a/build-logic/convention/src/main/java/PresentationComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/java/PresentationComposeConventionPlugin.kt @@ -11,7 +11,6 @@ internal class PresentationComposeConventionPlugin : Plugin { with(pluginManager) { apply("suwiki.android.library") apply("suwiki.android.library.compose") - apply("suwiki.android.hilt") } dependencies { diff --git a/build-logic/convention/src/main/java/RemoteConventionPlugin.kt b/build-logic/convention/src/main/java/RemoteConventionPlugin.kt index b37608925..21d70dccb 100644 --- a/build-logic/convention/src/main/java/RemoteConventionPlugin.kt +++ b/build-logic/convention/src/main/java/RemoteConventionPlugin.kt @@ -10,7 +10,6 @@ internal class RemoteConventionPlugin : Plugin { with(target) { with(pluginManager) { apply("suwiki.android.library") - apply("suwiki.android.hilt") } dependencies { diff --git a/build.gradle.kts b/build.gradle.kts index 4c305bc2c..4dee9d5dd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,6 @@ plugins { alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.serialization) apply false alias(libs.plugins.ksp) apply false - alias(libs.plugins.hilt) apply false alias(libs.plugins.protobuf) apply false alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.android.kotlin.multiplatform.library) apply false diff --git a/common/android/build.gradle.kts b/common/android/build.gradle.kts index 38c1753c7..7f1744bf5 100644 --- a/common/android/build.gradle.kts +++ b/common/android/build.gradle.kts @@ -1,7 +1,6 @@ @Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { alias(libs.plugins.suwiki.android.library) - alias(libs.plugins.suwiki.android.hilt) } android { diff --git a/common/android/src/main/java/com/suwiki/common/android/Dispatcher.kt b/common/android/src/main/java/com/suwiki/common/android/Dispatcher.kt deleted file mode 100644 index af856b43f..000000000 --- a/common/android/src/main/java/com/suwiki/common/android/Dispatcher.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.suwiki.common.android - -import javax.inject.Qualifier - -@Qualifier -@Retention(AnnotationRetention.RUNTIME) -annotation class Dispatcher(val suwikiDispatcher: SuwikiDispatchers) - -enum class SuwikiDispatchers { - IO, -} diff --git a/common/android/src/main/java/com/suwiki/common/android/DispatchersModule.kt b/common/android/src/main/java/com/suwiki/common/android/DispatchersModule.kt deleted file mode 100644 index dc9079eaa..000000000 --- a/common/android/src/main/java/com/suwiki/common/android/DispatchersModule.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.suwiki.common.android - -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.Dispatchers - -@Module -@InstallIn(SingletonComponent::class) -object DispatchersModule { - @Provides - @Dispatcher(SuwikiDispatchers.IO) - fun providesIODispatcher(): CoroutineDispatcher = Dispatchers.IO -} diff --git a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/PurchaseHistory.kt b/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/PurchaseHistory.kt deleted file mode 100644 index 12af2cc5b..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/PurchaseHistory.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.suwiki.common.model.lectureevaluation - -import java.time.LocalDateTime - -data class PurchaseHistory( - val id: Long, - val lectureName: String, - val professor: String, - val majorType: String, - val createDate: LocalDateTime, -) diff --git a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/exam/ExamEvaluationList.kt b/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/exam/ExamEvaluationList.kt deleted file mode 100644 index d3c806aea..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/exam/ExamEvaluationList.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.suwiki.common.model.lectureevaluation.exam - -import androidx.compose.runtime.Stable - -@Stable -data class ExamEvaluationList( - val data: List, - val needBuyExam: Boolean, - val written: Boolean, -) - -@Stable -data class ExamEvaluation( - val id: Long, - val selectedSemester: String, - val examInfo: String, - val examType: String, - val examDifficulty: String, - val content: String, -) diff --git a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/exam/MyExamEvaluation.kt b/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/exam/MyExamEvaluation.kt deleted file mode 100644 index 14486d658..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/exam/MyExamEvaluation.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.suwiki.common.model.lectureevaluation.exam - -import androidx.compose.runtime.Stable -import kotlinx.serialization.Serializable - -@Serializable -@Stable -data class MyExamEvaluation( - val id: Long = -1L, - val lectureName: String = "", // 과목 이름 - val professor: String = "", // 교수이름 - val majorType: String = "", // 개설학과 - val selectedSemester: String = "", - val semesterList: List = emptyList(), - val examInfo: List = emptyList(), // 시험 유형 ex) "족보, 교재, PPT, 필기, 응용, 실습, 과제", - val examType: String = "", // 시험 종류(바텀시트) ex) "중간고사", //기말고사, 쪽지, 기타 - val examDifficulty: String = "", // 시험 난이도 - val content: String = "", -) diff --git a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationAverage.kt b/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationAverage.kt deleted file mode 100644 index 4551c3e70..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationAverage.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.suwiki.common.model.lectureevaluation.lecture - -data class LectureEvaluationAverage( - val id: Long, - val lectureInfo: LectureInfo, - val lectureTotalAvg: Float, - val lectureSatisfactionAvg: Float, - val lectureHoneyAvg: Float, - val lectureLearningAvg: Float, -) diff --git a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationExtraAverage.kt b/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationExtraAverage.kt deleted file mode 100644 index c21fbc8c7..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationExtraAverage.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.suwiki.common.model.lectureevaluation.lecture - -import androidx.compose.runtime.Stable -import com.suwiki.common.model.enums.GradeLevel -import com.suwiki.common.model.enums.HomeworkLevel -import com.suwiki.common.model.enums.TeamLevel - -@Stable -data class LectureEvaluationExtraAverage( - val id: Long = 0, - val info: LectureInfo = LectureInfo(), - val totalAvg: Float = 0f, - val satisfactionAvg: Float = 0f, - val honeyAvg: Float = 0f, - val learningAvg: Float = 0f, - val teamAvg: TeamLevel = TeamLevel.EXIST, - val gradeAvg: GradeLevel = GradeLevel.DIFFICULT, - val homeworkAvg: HomeworkLevel = HomeworkLevel.MANY, -) diff --git a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationList.kt b/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationList.kt deleted file mode 100644 index 4c3ab4696..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureEvaluationList.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.suwiki.common.model.lectureevaluation.lecture - -import androidx.compose.runtime.Stable - -@Stable -data class LectureEvaluationList( - val data: List, - val written: Boolean, -) - -@Stable -data class LectureEvaluation( - val id: Long, - val selectedSemester: String, - val totalAvg: Float, - val satisfaction: Float, - val learning: Float, - val honey: Float, - val team: Int, - val difficulty: Int, - val homework: Int, - val content: String, -) diff --git a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureInfo.kt b/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureInfo.kt deleted file mode 100644 index 1bc49b1ee..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/LectureInfo.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.suwiki.common.model.lectureevaluation.lecture - -import androidx.compose.runtime.Stable -import kotlinx.serialization.Serializable - -@Serializable -@Stable -data class LectureInfo( - val semesterList: List = listOf(""), - val professor: String = "", - val majorType: String = "", - val lectureType: String = "", - val lectureName: String = "", -) diff --git a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/MyLectureEvaluation.kt b/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/MyLectureEvaluation.kt deleted file mode 100644 index e408dc8c3..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/lectureevaluation/lecture/MyLectureEvaluation.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.suwiki.common.model.lectureevaluation.lecture - -import androidx.compose.runtime.Stable -import kotlinx.serialization.Serializable - -@Serializable -@Stable -data class MyLectureEvaluation( - val id: Long = 0, - val lectureInfo: LectureInfo = LectureInfo(), - val selectedSemester: String = "", - val totalAvg: Float = 2.5f, // 총점 - val satisfaction: Float = 2.5f, // 만족도 - val learning: Float = 2.5f, // 배움지수 - val honey: Float = 2.5f, // 꿀강지수 - val team: Int = 0, - val difficulty: Int = 1, - val homework: Int = 1, - val content: String = "", -) diff --git a/common/model/src/main/java/com/suwiki/common/model/notice/Notice.kt b/common/model/src/main/java/com/suwiki/common/model/notice/Notice.kt deleted file mode 100644 index a7be468c9..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/notice/Notice.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.suwiki.common.model.notice - -import java.time.LocalDateTime - -data class Notice( - val id: Long = 0, - val title: String = "", - val date: LocalDateTime? = null, -) diff --git a/common/model/src/main/java/com/suwiki/common/model/notice/NoticeDetail.kt b/common/model/src/main/java/com/suwiki/common/model/notice/NoticeDetail.kt deleted file mode 100644 index 7386cb7d4..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/notice/NoticeDetail.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.suwiki.common.model.notice - -import androidx.compose.runtime.Stable -import java.time.LocalDateTime - -@Stable -data class NoticeDetail( - val id: Long = 0, - val title: String = "", - val date: LocalDateTime? = null, - val content: String = "", -) diff --git a/common/model/src/main/java/com/suwiki/common/model/user/Suspension.kt b/common/model/src/main/java/com/suwiki/common/model/user/Suspension.kt deleted file mode 100644 index 6bc4dcfb4..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/user/Suspension.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.suwiki.common.model.user - -import java.time.LocalDateTime - -sealed class Suspension { - data class Ban( - val reason: String, - val judgement: String, - val createdAt: LocalDateTime, - val expiredAt: LocalDateTime, - ) : Suspension() - - data class Block( - val reason: String, - val judgement: String, - val createdAt: LocalDateTime, - val expiredAt: LocalDateTime, - ) : Suspension() -} diff --git a/common/model/src/main/java/com/suwiki/common/model/user/Token.kt b/common/model/src/main/java/com/suwiki/common/model/user/Token.kt deleted file mode 100644 index dcc58b652..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/user/Token.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.suwiki.common.model.user - -data class Token( - val accessToken: String, - val refreshToken: String, -) diff --git a/common/model/src/main/java/com/suwiki/common/model/user/User.kt b/common/model/src/main/java/com/suwiki/common/model/user/User.kt deleted file mode 100644 index b327ad725..000000000 --- a/common/model/src/main/java/com/suwiki/common/model/user/User.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.suwiki.common.model.user - -const val DEFAULT_USER_ID = "" -const val DEFAULT_USER_EMAIL = "" -const val DEFAULT_USER_POINT = 0 -const val DEFAULT_USER_WRITTEN_EVALUATION = 0 -const val DEFAULT_USER_WRITTEN_EXAM = 0 -const val DEFAULT_USER_VIEW_EXAM = 0 - -data class User( - val userId: String = DEFAULT_USER_ID, - val email: String = DEFAULT_USER_EMAIL, - val point: Int = DEFAULT_USER_POINT, - val writtenEvaluation: Int = DEFAULT_USER_WRITTEN_EVALUATION, - val writtenExam: Int = DEFAULT_USER_WRITTEN_EXAM, - val viewExam: Int = DEFAULT_USER_VIEW_EXAM, -) { - val isLoggedIn: Boolean - get() = this != User() -} diff --git a/common/security/.gitignore b/common/security/.gitignore deleted file mode 100644 index 42afabfd2..000000000 --- a/common/security/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/common/security/build.gradle.kts b/common/security/build.gradle.kts deleted file mode 100644 index 94b43846e..000000000 --- a/common/security/build.gradle.kts +++ /dev/null @@ -1,25 +0,0 @@ -@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed -plugins { - alias(libs.plugins.suwiki.android.library) - alias(libs.plugins.suwiki.android.hilt) - alias(libs.plugins.kotlin.serialization) - alias(libs.plugins.ksp) -} - -android { - namespace = "com.suwiki.common.security" -} - -dependencies { - implementation(projects.common.model) - - implementation(libs.bundles.coroutine) - - implementation(libs.androidx.datastore.core) - implementation(libs.androidx.datastore.preferences) - - implementation(libs.timber) - - testImplementation(libs.junit4) - androidTestImplementation(libs.junit4) -} diff --git a/common/security/consumer-rules.pro b/common/security/consumer-rules.pro deleted file mode 100644 index e69de29bb..000000000 diff --git a/common/security/proguard-rules.pro b/common/security/proguard-rules.pro deleted file mode 100644 index 481bb4348..000000000 --- a/common/security/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/common/security/src/main/AndroidManifest.xml b/common/security/src/main/AndroidManifest.xml deleted file mode 100644 index a5918e68a..000000000 --- a/common/security/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/common/security/src/main/java/com/suwiki/common/security/SecurityPreferences.kt b/common/security/src/main/java/com/suwiki/common/security/SecurityPreferences.kt deleted file mode 100644 index 15172ded3..000000000 --- a/common/security/src/main/java/com/suwiki/common/security/SecurityPreferences.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.suwiki.common.security - -import kotlinx.coroutines.flow.Flow - -interface SecurityPreferences { - - fun flowAccessToken(): Flow - - suspend fun setAccessToken(value: String) - - fun flowRefreshToken(): Flow - - suspend fun setRefreshToken(value: String) - - suspend fun clearAll() - - companion object { - - private const val KEY_ACCESS_TOKEN = "key-access-token" - private const val KEY_REFRESH_TOKEN = "key-refresh-token" - } -} diff --git a/common/security/src/main/java/com/suwiki/common/security/di/DataStoreModule.kt b/common/security/src/main/java/com/suwiki/common/security/di/DataStoreModule.kt deleted file mode 100644 index 44859a6ad..000000000 --- a/common/security/src/main/java/com/suwiki/common/security/di/DataStoreModule.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.suwiki.common.security.di - -import android.content.Context -import androidx.datastore.core.DataStore -import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler -import androidx.datastore.preferences.core.PreferenceDataStoreFactory -import androidx.datastore.preferences.core.Preferences -import androidx.datastore.preferences.core.emptyPreferences -import androidx.datastore.preferences.preferencesDataStoreFile -import com.suwiki.common.security.SecurityPreferences -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext -import dagger.hilt.components.SingletonComponent -import kotlinx.coroutines.flow.Flow -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -object DataStoreModule { - - @Singleton - @Provides - @SecureDataStore - fun provideEncryptedDataStore( - @ApplicationContext applicationContext: Context, - ): DataStore = PreferenceDataStoreFactory.create( - corruptionHandler = ReplaceFileCorruptionHandler( - produceNewData = { emptyPreferences() }, - ), - produceFile = { applicationContext.preferencesDataStoreFile("security-preference") }, - ) - - @Singleton - @Provides - fun provideSecurityPreference( - @SecureDataStore dataStore: DataStore, - ): SecurityPreferences = object : SecurityPreferences { - override fun flowAccessToken(): Flow = kotlinx.coroutines.flow.flowOf("fake_access_token") - - override suspend fun setAccessToken(value: String) { - // 아무 동작도 하지 않음 (fake 객체) - } - - override fun flowRefreshToken(): Flow = kotlinx.coroutines.flow.flowOf("fake_refresh_token") - - override suspend fun setRefreshToken(value: String) { - // 아무 동작도 하지 않음 (fake 객체) - } - - override suspend fun clearAll() { - // 아무 동작도 하지 않음 (fake 객체) - } - } -} diff --git a/common/security/src/main/java/com/suwiki/common/security/di/SecureDataStore.kt b/common/security/src/main/java/com/suwiki/common/security/di/SecureDataStore.kt deleted file mode 100644 index 421dc487f..000000000 --- a/common/security/src/main/java/com/suwiki/common/security/di/SecureDataStore.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.suwiki.common.security.di - -import javax.inject.Qualifier - -@Qualifier -@Retention(AnnotationRetention.BINARY) -internal annotation class SecureDataStore diff --git a/common/security/src/test/java/com/suwiki/security/ExampleUnitTest.kt b/common/security/src/test/java/com/suwiki/security/ExampleUnitTest.kt deleted file mode 100644 index b417c2c6d..000000000 --- a/common/security/src/test/java/com/suwiki/security/ExampleUnitTest.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.suwiki.security - -import junit.framework.TestCase.assertEquals -import org.junit.Test - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} diff --git a/data/openmajor/src/main/java/com/suwiki/data/openmajor/datasource/RemoteOpenMajorDataSource.kt b/data/openmajor/src/main/java/com/suwiki/data/openmajor/datasource/RemoteOpenMajorDataSource.kt index 38ed59c97..ec82645fe 100644 --- a/data/openmajor/src/main/java/com/suwiki/data/openmajor/datasource/RemoteOpenMajorDataSource.kt +++ b/data/openmajor/src/main/java/com/suwiki/data/openmajor/datasource/RemoteOpenMajorDataSource.kt @@ -3,7 +3,4 @@ package com.suwiki.data.openmajor.datasource interface RemoteOpenMajorDataSource { suspend fun getOpenMajorVersion(): Float suspend fun getOpenMajorList(): List - suspend fun getBookmarkedMajorList(): List - suspend fun bookmarkMajor(majorName: String) - suspend fun removeBookmarkMajor(majorName: String) } diff --git a/data/openmajor/src/main/java/com/suwiki/data/openmajor/di/RepositoryModule.kt b/data/openmajor/src/main/java/com/suwiki/data/openmajor/di/OpenMajorRepositoryModule.kt similarity index 100% rename from data/openmajor/src/main/java/com/suwiki/data/openmajor/di/RepositoryModule.kt rename to data/openmajor/src/main/java/com/suwiki/data/openmajor/di/OpenMajorRepositoryModule.kt diff --git a/data/openmajor/src/main/java/com/suwiki/data/openmajor/repository/OpenMajorRepositoryImpl.kt b/data/openmajor/src/main/java/com/suwiki/data/openmajor/repository/OpenMajorRepositoryImpl.kt index 2cc34cf41..be6c1283e 100644 --- a/data/openmajor/src/main/java/com/suwiki/data/openmajor/repository/OpenMajorRepositoryImpl.kt +++ b/data/openmajor/src/main/java/com/suwiki/data/openmajor/repository/OpenMajorRepositoryImpl.kt @@ -7,7 +7,6 @@ import com.suwiki.domain.openmajor.repository.OpenMajorRepository import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.flow -import javax.inject.Inject class OpenMajorRepositoryImpl( private val localOpenMajorDataSource: LocalOpenMajorDataSource, @@ -35,16 +34,4 @@ class OpenMajorRepositoryImpl( } } } - - override suspend fun getBookmarkedOpenMajorList(): List { - return remoteOpenMajorDataSource.getBookmarkedMajorList() - } - - override suspend fun bookmarkMajor(majorName: String) { - remoteOpenMajorDataSource.bookmarkMajor(majorName) - } - - override suspend fun removeBookmarkMajor(majorName: String) { - remoteOpenMajorDataSource.removeBookmarkMajor(majorName) - } } diff --git a/data/timetable/src/main/java/com/suwiki/data/timetable/di/RepositoryModule.kt b/data/timetable/src/main/java/com/suwiki/data/timetable/di/TitmetableRepositoryModule.kt similarity index 61% rename from data/timetable/src/main/java/com/suwiki/data/timetable/di/RepositoryModule.kt rename to data/timetable/src/main/java/com/suwiki/data/timetable/di/TitmetableRepositoryModule.kt index 70a6eb7cc..0f6f7770a 100644 --- a/data/timetable/src/main/java/com/suwiki/data/timetable/di/RepositoryModule.kt +++ b/data/timetable/src/main/java/com/suwiki/data/timetable/di/TitmetableRepositoryModule.kt @@ -4,16 +4,11 @@ import com.suwiki.data.timetable.repository.OpenLectureRepositoryImpl import com.suwiki.data.timetable.repository.TimetableRepositoryImpl import com.suwiki.domain.timetable.repository.OpenLectureRepository import com.suwiki.domain.timetable.repository.TimetableRepository -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton import org.koin.core.module.dsl.bind import org.koin.core.module.dsl.singleOf import org.koin.dsl.module val timetableRepositoryModule = module { - singleOf(::OpenLectureRepositoryImpl) { bind() } - singleOf(::TimetableRepositoryImpl) { bind() } + single { OpenLectureRepositoryImpl(get(), get()) } + single { TimetableRepositoryImpl(get()) } } diff --git a/data/timetable/src/main/java/com/suwiki/data/timetable/repository/OpenLectureRepositoryImpl.kt b/data/timetable/src/main/java/com/suwiki/data/timetable/repository/OpenLectureRepositoryImpl.kt index f300ad9eb..0f9bba394 100644 --- a/data/timetable/src/main/java/com/suwiki/data/timetable/repository/OpenLectureRepositoryImpl.kt +++ b/data/timetable/src/main/java/com/suwiki/data/timetable/repository/OpenLectureRepositoryImpl.kt @@ -13,7 +13,6 @@ import kotlinx.coroutines.flow.map import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.Locale -import javax.inject.Inject class OpenLectureRepositoryImpl( private val remoteOpenLectureDataSource: RemoteOpenLectureDataSource, diff --git a/data/timetable/src/main/java/com/suwiki/data/timetable/repository/TimetableRepositoryImpl.kt b/data/timetable/src/main/java/com/suwiki/data/timetable/repository/TimetableRepositoryImpl.kt index a1f7eedb5..2f031fed9 100644 --- a/data/timetable/src/main/java/com/suwiki/data/timetable/repository/TimetableRepositoryImpl.kt +++ b/data/timetable/src/main/java/com/suwiki/data/timetable/repository/TimetableRepositoryImpl.kt @@ -8,7 +8,6 @@ import com.suwiki.common.model.timetable.TimetableDay import com.suwiki.data.timetable.datasource.LocalTimetableDataSource import com.suwiki.domain.timetable.repository.TimetableRepository import kotlinx.coroutines.flow.firstOrNull -import javax.inject.Inject class TimetableRepositoryImpl ( private val localTimetableDataSource: LocalTimetableDataSource, diff --git a/domain/openmajor/build.gradle.kts b/domain/openmajor/build.gradle.kts index b0b56a2d3..bb40d165a 100644 --- a/domain/openmajor/build.gradle.kts +++ b/domain/openmajor/build.gradle.kts @@ -8,5 +8,6 @@ dependencies { implementation(projects.domain.common) implementation(libs.kotlinx.coroutines.core) - implementation(libs.hilt.core) + + implementation(libs.koin.core) } diff --git a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/di/OpenMajorUseCaseModule.kt b/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/di/OpenMajorUseCaseModule.kt new file mode 100644 index 000000000..bc11a7572 --- /dev/null +++ b/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/di/OpenMajorUseCaseModule.kt @@ -0,0 +1,8 @@ +package com.suwiki.domain.openmajor.di + +import com.suwiki.domain.openmajor.usecase.GetOpenMajorListUseCase +import org.koin.dsl.module + +val openMajorUseCaseModule = module { + factory { GetOpenMajorListUseCase(get()) } +} diff --git a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/repository/OpenMajorRepository.kt b/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/repository/OpenMajorRepository.kt index 60d4055b6..020529d8e 100644 --- a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/repository/OpenMajorRepository.kt +++ b/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/repository/OpenMajorRepository.kt @@ -4,7 +4,4 @@ import kotlinx.coroutines.flow.Flow interface OpenMajorRepository { suspend fun getOpenMajorList(): Flow> - suspend fun getBookmarkedOpenMajorList(): List - suspend fun bookmarkMajor(majorName: String) - suspend fun removeBookmarkMajor(majorName: String) } diff --git a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetBookmarkedOpenMajorListUseCase.kt b/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetBookmarkedOpenMajorListUseCase.kt deleted file mode 100644 index 72d60ba5c..000000000 --- a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetBookmarkedOpenMajorListUseCase.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.suwiki.domain.openmajor.usecase - -import com.suwiki.domain.common.runCatchingIgnoreCancelled -import com.suwiki.domain.openmajor.repository.OpenMajorRepository -import javax.inject.Inject - -class GetBookmarkedOpenMajorListUseCase @Inject constructor( - private val openMajorRepository: OpenMajorRepository, -) { - suspend operator fun invoke(): Result> = runCatchingIgnoreCancelled { - openMajorRepository.getBookmarkedOpenMajorList() - } -} diff --git a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetOpenMajorListUseCase.kt b/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetOpenMajorListUseCase.kt index 95f590a61..620429e6a 100644 --- a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetOpenMajorListUseCase.kt +++ b/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/GetOpenMajorListUseCase.kt @@ -3,11 +3,8 @@ package com.suwiki.domain.openmajor.usecase import com.suwiki.domain.openmajor.repository.OpenMajorRepository import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import javax.inject.Inject -class GetOpenMajorListUseCase @Inject constructor( - private val openMajorRepository: OpenMajorRepository, -) { +class GetOpenMajorListUseCase (private val openMajorRepository: OpenMajorRepository, ) { /** * 가장 먼저 LocalOpenMajorList를 emit합니다. * 그 이후 LocalVersion과 RemoteVersion을 비교한 후 diff --git a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/RegisterBookmarkUseCase.kt b/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/RegisterBookmarkUseCase.kt deleted file mode 100644 index 84de8dab1..000000000 --- a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/RegisterBookmarkUseCase.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.suwiki.domain.openmajor.usecase - -import com.suwiki.domain.common.runCatchingIgnoreCancelled -import com.suwiki.domain.openmajor.repository.OpenMajorRepository -import javax.inject.Inject - -class RegisterBookmarkUseCase @Inject constructor( - private val openMajorRepository: OpenMajorRepository, -) { - suspend operator fun invoke(major: String): Result = runCatchingIgnoreCancelled { - openMajorRepository.bookmarkMajor( - major, - ) - } -} diff --git a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/UnRegisterBookmarkUseCase.kt b/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/UnRegisterBookmarkUseCase.kt deleted file mode 100644 index 9546d23b0..000000000 --- a/domain/openmajor/src/main/java/com/suwiki/domain/openmajor/usecase/UnRegisterBookmarkUseCase.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.suwiki.domain.openmajor.usecase - -import com.suwiki.domain.common.runCatchingIgnoreCancelled -import com.suwiki.domain.openmajor.repository.OpenMajorRepository -import javax.inject.Inject - -class UnRegisterBookmarkUseCase @Inject constructor( - private val openMajorRepository: OpenMajorRepository, -) { - suspend operator fun invoke(major: String): Result = runCatchingIgnoreCancelled { - openMajorRepository.removeBookmarkMajor( - major, - ) - } -} diff --git a/domain/timetable/build.gradle.kts b/domain/timetable/build.gradle.kts index 7fff4bea3..e1b5fe44d 100644 --- a/domain/timetable/build.gradle.kts +++ b/domain/timetable/build.gradle.kts @@ -9,7 +9,6 @@ dependencies { implementation(projects.domain.common) implementation(libs.kotlinx.coroutines.core) - implementation(libs.hilt.core) implementation(libs.koin.core) } diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/TimetableUseCaseModule.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/TimetableUseCaseModule.kt new file mode 100644 index 000000000..ca359c279 --- /dev/null +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/TimetableUseCaseModule.kt @@ -0,0 +1,25 @@ +package com.suwiki.domain.timetable + +import com.suwiki.domain.timetable.usecase.* +import org.koin.dsl.module + +val timetableUseCaseModule = module { + // Timetable management use cases + factory { DeleteTimetableUseCase(get()) } + factory { GetAllTimetableUseCase(get()) } + factory { GetMainTimetableUseCase(get()) } + factory { InsertTimetableUseCase(get()) } + factory { UpdateTimetableUseCase(get()) } + factory { SetMainTimetableCreateTime(get()) } + + // Timetable cell use cases + factory { DeleteTimetableCellUseCase(get()) } + factory { InsertTimetableCellUseCase(get()) } + factory { UpdateTimetableCellUseCase(get()) } + factory { GetTimetableCellTypeUseCase(get()) } + factory { SetTimetableCellTypeUseCase(get()) } + + // Open lecture use cases + factory { GetOpenLectureListUseCase(get()) } + factory { UpdateOpenLectureIfNeedUseCase(get()) } +} diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/timetableDomainModule.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/timetableDomainModule.kt deleted file mode 100644 index f925bd826..000000000 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/timetableDomainModule.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.suwiki.domain.timetable - -import com.suwiki.domain.timetable.usecase.* -import org.koin.core.module.dsl.factoryOf -import org.koin.dsl.module - -val timetableDomainModule = module { - // Timetable management use cases - factoryOf(::DeleteTimetableUseCase) - factoryOf(::GetAllTimetableUseCase) - factoryOf(::GetMainTimetableUseCase) - factoryOf(::InsertTimetableUseCase) - factoryOf(::UpdateTimetableUseCase) - factoryOf(::SetMainTimetableCreateTime) - - // Timetable cell use cases - factoryOf(::DeleteTimetableCellUseCase) - factoryOf(::InsertTimetableCellUseCase) - factoryOf(::UpdateTimetableCellUseCase) - factoryOf(::GetTimetableCellTypeUseCase) - factoryOf(::SetTimetableCellTypeUseCase) - - // Open lecture use cases - factoryOf(::GetOpenLectureListUseCase) - factoryOf(::UpdateOpenLectureIfNeedUseCase) -} diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableCellUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableCellUseCase.kt index 6482dd790..5e85763fe 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableCellUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableCellUseCase.kt @@ -4,7 +4,6 @@ import com.suwiki.common.model.timetable.Timetable 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 DeleteTimetableCellUseCase( private val timetableRepository: TimetableRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableUseCase.kt index 55f9cf313..f736cab58 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/DeleteTimetableUseCase.kt @@ -3,7 +3,6 @@ package com.suwiki.domain.timetable.usecase import com.suwiki.common.model.timetable.Timetable import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.TimetableRepository -import javax.inject.Inject class DeleteTimetableUseCase( private val timetableRepository: TimetableRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetAllTimetableUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetAllTimetableUseCase.kt index 995c29a95..a4b90aeaa 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetAllTimetableUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetAllTimetableUseCase.kt @@ -3,7 +3,6 @@ package com.suwiki.domain.timetable.usecase import com.suwiki.common.model.timetable.Timetable import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.TimetableRepository -import javax.inject.Inject class GetAllTimetableUseCase( private val timetableRepository: TimetableRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetMainTimetableUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetMainTimetableUseCase.kt index 9775a8c75..fe980f1c4 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetMainTimetableUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetMainTimetableUseCase.kt @@ -3,7 +3,6 @@ package com.suwiki.domain.timetable.usecase import com.suwiki.common.model.timetable.Timetable import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.TimetableRepository -import javax.inject.Inject class GetMainTimetableUseCase( private val timetableRepository: TimetableRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetOpenLectureListUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetOpenLectureListUseCase.kt index fffe2d418..f1c979e7c 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetOpenLectureListUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetOpenLectureListUseCase.kt @@ -1,9 +1,6 @@ package com.suwiki.domain.timetable.usecase -import com.suwiki.common.model.timetable.OpenLectureData -import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.OpenLectureRepository -import javax.inject.Inject class GetOpenLectureListUseCase( private val openLectureRepository: OpenLectureRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetTimetableCellTypeUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetTimetableCellTypeUseCase.kt index f93a64791..8a1ce2034 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetTimetableCellTypeUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/GetTimetableCellTypeUseCase.kt @@ -2,7 +2,6 @@ package com.suwiki.domain.timetable.usecase import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.TimetableRepository -import javax.inject.Inject class GetTimetableCellTypeUseCase( private val timetableRepository: TimetableRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableCellUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableCellUseCase.kt index 1172076bd..619df9c61 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableCellUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableCellUseCase.kt @@ -3,7 +3,6 @@ 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, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableUseCase.kt index a98edecfb..9fad52229 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/InsertTimetableUseCase.kt @@ -3,7 +3,6 @@ package com.suwiki.domain.timetable.usecase import com.suwiki.common.model.timetable.Timetable import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.TimetableRepository -import javax.inject.Inject class InsertTimetableUseCase( private val timetableRepository: TimetableRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetMainTimetableCreateTime.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetMainTimetableCreateTime.kt index 0157b536f..bd576d7db 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetMainTimetableCreateTime.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetMainTimetableCreateTime.kt @@ -2,7 +2,6 @@ package com.suwiki.domain.timetable.usecase import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.TimetableRepository -import javax.inject.Inject class SetMainTimetableCreateTime( private val timetableRepository: TimetableRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetTimetableCellTypeUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetTimetableCellTypeUseCase.kt index a40403e98..9e794927f 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetTimetableCellTypeUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/SetTimetableCellTypeUseCase.kt @@ -2,7 +2,6 @@ package com.suwiki.domain.timetable.usecase import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.TimetableRepository -import javax.inject.Inject class SetTimetableCellTypeUseCase( private val timetableRepository: TimetableRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateOpenLectureIfNeedUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateOpenLectureIfNeedUseCase.kt index 478e3da8e..42c0c9cd8 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateOpenLectureIfNeedUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateOpenLectureIfNeedUseCase.kt @@ -2,7 +2,6 @@ package com.suwiki.domain.timetable.usecase import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.OpenLectureRepository -import javax.inject.Inject class UpdateOpenLectureIfNeedUseCase( private val openLectureRepository: OpenLectureRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableCellUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableCellUseCase.kt index 51fcb86a7..45079a71f 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableCellUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableCellUseCase.kt @@ -3,7 +3,6 @@ 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 UpdateTimetableCellUseCase( private val timetableRepository: TimetableRepository, diff --git a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableUseCase.kt b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableUseCase.kt index ee0823eb8..52e90ca7f 100644 --- a/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableUseCase.kt +++ b/domain/timetable/src/main/java/com/suwiki/domain/timetable/usecase/UpdateTimetableUseCase.kt @@ -2,7 +2,6 @@ package com.suwiki.domain.timetable.usecase import com.suwiki.domain.common.runCatchingIgnoreCancelled import com.suwiki.domain.timetable.repository.TimetableRepository -import javax.inject.Inject class UpdateTimetableUseCase( private val timetableRepository: TimetableRepository, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 99bd59d40..06b512828 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,6 @@ compose-bom = "2023.12.00-alpha04" compose-material3 = "1.2.0-alpha07" activity-compose = "1.7.2" compose-stable-marker = "1.0.3" -androidx-hilt-navigation-compose = "1.0.0" compose-rating-bar = "1.3.4" compose-toolbar = "2.3.5" glance = "1.0.0" @@ -44,8 +43,6 @@ retrofit = "2.9.0" retrofit-kotlinx-serialization-json = "1.0.0" okhttp = "4.11.0" -hilt = "2.56" -hiltExt = "2.56" room = "2.7.0" timber = "5.0.1" @@ -81,7 +78,6 @@ ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } android-application = { id = "com.android.application", version.ref = "android-gradle-plugin" } android-library = { id = "com.android.library", version.ref = "android-gradle-plugin" } -hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } google-services = { id = "com.google.gms.google-services", version.ref = "google-service" } protobuf = { id = "com.google.protobuf", version.ref = "protobuf-plugin" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" } @@ -94,7 +90,6 @@ suwiki-android-application = { id = "suwiki.android.application", version = "uns suwiki-android-application-compose = { id = "suwiki.android.application.compose", version = "unspecified" } suwiki-android-library = { id = "suwiki.android.library", version = "unspecified" } suwiki-android-library-compose = { id = "suwiki.android.library.compose", version = "unspecified" } -suwiki-android-hilt = { id = "suwiki.android.hilt", version = "unspecified" } suwiki-java-library = { id = "suwiki.java.library", version = "unspecified" } suwiki-android-presentation-compose = { id = "suwiki.android.presentation.compose", version = "unspecified" } suwiki-android-remote = { id = "suwiki.android.remote", version = "unspecified" } @@ -128,7 +123,6 @@ coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coi activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activity-ktx" } lifecycle-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidx-navigation" } -hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidx-hilt-navigation-compose" } compose-stable-marker = { group = "com.github.skydoves", name = "compose-stable-marker", version.ref = "compose-stable-marker" } compose-rating-bar = { group = "com.github.a914-gowtham", name = "compose-ratingbar", version.ref = "compose-rating-bar" } compose-toolbar = { group = "me.onebone", name = "toolbar-compose", version.ref="compose-toolbar" } @@ -140,12 +134,6 @@ orbit-viewmodel = { group = "org.orbit-mvi", name = "orbit-viewmodel", version.r orbit-compose = { group = "org.orbit-mvi", name = "orbit-compose", version.ref = "orbit" } orbit-test = { group = "org.orbit-mvi", name = "orbit-test", version.ref = "orbit" } -hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } -hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hiltExt" } -hilt-core = { group = "com.google.dagger", name = "hilt-core", version.ref = "hilt" } -hilt-testing = { module = "com.google.dagger:hilt-android-testing", version.ref = "hilt" } -hilt-testing-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hiltExt" } - kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" } kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" } @@ -217,7 +205,7 @@ firebase = ["firebase-analytics", "firebase-database"] androidx-lifecycle = ["androidx-lifecycle-runtime-ktx", "androidx-lifecycle-viewmodel-ktx"] androidx-navigation = ["navigation-fragment-ktx", "navigation-ui-ktx"] coroutine = ["kotlinx-coroutines-android", "kotlinx-coroutines-core"] -compose = ["ui", "ui-graphics", "ui-tooling-preview", "material3-compose", "coil-compose", "ui-foundation", "activity-compose", "lifecycle-compose", "navigation-compose", "hilt-navigation-compose"] +compose = ["ui", "ui-graphics", "ui-tooling-preview", "material3-compose", "coil-compose", "ui-foundation", "activity-compose", "lifecycle-compose", "navigation-compose"] compose-debug = ["ui-tooling", "ui-test-manifest"] glance = ["glance-appwidger", "glance-material3"] diff --git a/local/common/build.gradle.kts b/local/common/build.gradle.kts index 09fbb5d1d..0552b20fd 100644 --- a/local/common/build.gradle.kts +++ b/local/common/build.gradle.kts @@ -1,7 +1,6 @@ @Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { alias(libs.plugins.suwiki.android.library) - alias(libs.plugins.suwiki.android.hilt) alias(libs.plugins.ksp) alias(libs.plugins.protobuf) alias(libs.plugins.kotlin.serialization) diff --git a/local/common/src/main/java/com/suwiki/local/common/database/di/DaoModule.kt b/local/common/src/main/java/com/suwiki/local/common/database/di/DaoModule.kt index 3da8aff92..9f5b4bab1 100644 --- a/local/common/src/main/java/com/suwiki/local/common/database/di/DaoModule.kt +++ b/local/common/src/main/java/com/suwiki/local/common/database/di/DaoModule.kt @@ -6,10 +6,6 @@ import com.suwiki.local.common.database.database.TimetableDatabase import com.suwiki.local.common.database.dao.OpenMajorDao 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.module val daoModule = module { diff --git a/local/common/src/main/java/com/suwiki/local/common/datastore/di/DataStoreModule.kt b/local/common/src/main/java/com/suwiki/local/common/datastore/di/DataStoreModule.kt index 8f7929068..9a8b8d728 100644 --- a/local/common/src/main/java/com/suwiki/local/common/datastore/di/DataStoreModule.kt +++ b/local/common/src/main/java/com/suwiki/local/common/datastore/di/DataStoreModule.kt @@ -1,15 +1,11 @@ package com.suwiki.local.common.datastore.di -import android.content.Context -import androidx.datastore.core.DataStore import androidx.datastore.core.DataStoreFactory import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler import androidx.datastore.dataStoreFile import androidx.datastore.preferences.core.PreferenceDataStoreFactory -import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.emptyPreferences import androidx.datastore.preferences.preferencesDataStoreFile -import com.suwiki.local.common.UserPreference import com.suwiki.local.common.datastore.proto.UserPreferenceSerializer import org.koin.android.ext.koin.androidContext import org.koin.core.qualifier.named diff --git a/local/common/src/main/java/com/suwiki/local/common/datastore/di/NormalDataStore.kt b/local/common/src/main/java/com/suwiki/local/common/datastore/di/NormalDataStore.kt deleted file mode 100644 index 6074cc0ae..000000000 --- a/local/common/src/main/java/com/suwiki/local/common/datastore/di/NormalDataStore.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.suwiki.local.common.datastore.di - -import javax.inject.Qualifier - -@Qualifier -@Retention(AnnotationRetention.BINARY) -annotation class NormalDataStore diff --git a/local/common/src/main/java/com/suwiki/local/common/datastore/proto/UserPreferenceSerializer.kt b/local/common/src/main/java/com/suwiki/local/common/datastore/proto/UserPreferenceSerializer.kt index 7ff7c5331..ccf6c1b87 100644 --- a/local/common/src/main/java/com/suwiki/local/common/datastore/proto/UserPreferenceSerializer.kt +++ b/local/common/src/main/java/com/suwiki/local/common/datastore/proto/UserPreferenceSerializer.kt @@ -6,9 +6,8 @@ import androidx.datastore.preferences.protobuf.InvalidProtocolBufferException import com.suwiki.local.common.UserPreference import java.io.InputStream import java.io.OutputStream -import javax.inject.Inject -class UserPreferenceSerializer @Inject constructor() : Serializer { +class UserPreferenceSerializer: Serializer { override val defaultValue: UserPreference = UserPreference.getDefaultInstance() override suspend fun readFrom(input: InputStream): UserPreference = diff --git a/local/openmajor/build.gradle.kts b/local/openmajor/build.gradle.kts index c8c2fc189..97d66957f 100644 --- a/local/openmajor/build.gradle.kts +++ b/local/openmajor/build.gradle.kts @@ -1,7 +1,6 @@ @Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { alias(libs.plugins.suwiki.android.library) - alias(libs.plugins.suwiki.android.hilt) alias(libs.plugins.ksp) } @@ -24,6 +23,9 @@ dependencies { implementation(libs.androidx.datastore.core) implementation(libs.androidx.datastore.preferences) + implementation(libs.koin.core) + implementation(libs.koin.android) + testImplementation(libs.junit4) androidTestImplementation(libs.junit4) } diff --git a/local/openmajor/src/main/java/com/suwiki/local/openmajor/datasource/LocalOpenMajorDataSourceImpl.kt b/local/openmajor/src/main/java/com/suwiki/local/openmajor/datasource/LocalOpenMajorDataSourceImpl.kt index ba2f60ed2..e96b49a4b 100644 --- a/local/openmajor/src/main/java/com/suwiki/local/openmajor/datasource/LocalOpenMajorDataSourceImpl.kt +++ b/local/openmajor/src/main/java/com/suwiki/local/openmajor/datasource/LocalOpenMajorDataSourceImpl.kt @@ -4,20 +4,15 @@ import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.floatPreferencesKey -import com.suwiki.common.android.Dispatcher -import com.suwiki.common.android.SuwikiDispatchers import com.suwiki.common.model.openmajor.OpenMajor import com.suwiki.data.openmajor.datasource.LocalOpenMajorDataSource import com.suwiki.local.common.database.database.OpenMajorDatabase -import com.suwiki.local.common.datastore.di.NormalDataStore import com.suwiki.local.openmajor.converter.toEntity import com.suwiki.local.openmajor.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.Inject class LocalOpenMajorDataSourceImpl( private val dataStore: DataStore, diff --git a/local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalDataSourceModule.kt b/local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalDataSourceModule.kt deleted file mode 100644 index a9eba0210..000000000 --- a/local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalDataSourceModule.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.suwiki.local.openmajor.di - -import com.suwiki.data.openmajor.datasource.LocalOpenMajorDataSource -import com.suwiki.local.openmajor.datasource.LocalOpenMajorDataSourceImpl -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -abstract class LocalDataSourceModule { - - @Singleton - @Binds - abstract fun bindLocalOpenMajorDataSource( - localOpenMajorDataSourceImpl: LocalOpenMajorDataSourceImpl, - ): LocalOpenMajorDataSource -} diff --git a/local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalOpenMajorDataSourceModule.kt b/local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalOpenMajorDataSourceModule.kt new file mode 100644 index 000000000..fa4223acb --- /dev/null +++ b/local/openmajor/src/main/java/com/suwiki/local/openmajor/di/LocalOpenMajorDataSourceModule.kt @@ -0,0 +1,13 @@ +package com.suwiki.local.openmajor.di + +import com.suwiki.data.openmajor.datasource.LocalOpenMajorDataSource +import com.suwiki.local.openmajor.datasource.LocalOpenMajorDataSourceImpl +import org.koin.core.qualifier.named +import org.koin.dsl.module + +val localOpenMajorDataSourceModule = module { + single { + LocalOpenMajorDataSourceImpl(get(named("normalDataStore")), get()) + } +} + diff --git a/local/timetable/build.gradle.kts b/local/timetable/build.gradle.kts index 1f90b2328..4b6cdb535 100644 --- a/local/timetable/build.gradle.kts +++ b/local/timetable/build.gradle.kts @@ -1,7 +1,6 @@ @Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { alias(libs.plugins.suwiki.android.library) - alias(libs.plugins.suwiki.android.hilt) alias(libs.plugins.ksp) alias(libs.plugins.kotlin.serialization) } diff --git a/local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalOpenLectureDatasourceImpl.kt b/local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalOpenLectureDatasourceImpl.kt index 3d2d1e575..c6fb504f2 100644 --- a/local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalOpenLectureDatasourceImpl.kt +++ b/local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalOpenLectureDatasourceImpl.kt @@ -4,20 +4,15 @@ import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.longPreferencesKey -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.Inject class LocalOpenLectureDatasourceImpl( private val dataStore: DataStore, diff --git a/local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalTimetableDatasourceImpl.kt b/local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalTimetableDatasourceImpl.kt index 4eeb4f164..f8e846fa3 100644 --- a/local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalTimetableDatasourceImpl.kt +++ b/local/timetable/src/main/java/com.suwiki.local.timetable/datasource/LocalTimetableDatasourceImpl.kt @@ -5,20 +5,15 @@ import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.longPreferencesKey import androidx.datastore.preferences.core.stringPreferencesKey -import com.suwiki.common.android.Dispatcher -import com.suwiki.common.android.SuwikiDispatchers import com.suwiki.common.model.timetable.Timetable import com.suwiki.data.timetable.datasource.LocalTimetableDataSource import com.suwiki.local.common.database.database.TimetableDatabase -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.Inject class LocalTimetableDatasourceImpl( private val dataStore: DataStore, diff --git a/local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalDataSourceModule.kt b/local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalTimetableDataSourceModule.kt similarity index 63% rename from local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalDataSourceModule.kt rename to local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalTimetableDataSourceModule.kt index 3ce094885..2571af324 100644 --- a/local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalDataSourceModule.kt +++ b/local/timetable/src/main/java/com.suwiki.local.timetable/di/LocalTimetableDataSourceModule.kt @@ -2,9 +2,6 @@ package com.suwiki.local.timetable.di import com.suwiki.data.timetable.datasource.LocalOpenLectureDataSource import com.suwiki.data.timetable.datasource.LocalTimetableDataSource -import com.suwiki.data.timetable.di.timetableRepositoryModule -import com.suwiki.local.common.database.di.databaseModule -import com.suwiki.local.common.datastore.di.dataStoreModule import com.suwiki.local.timetable.datasource.LocalOpenLectureDatasourceImpl import com.suwiki.local.timetable.datasource.LocalTimetableDatasourceImpl import org.koin.core.qualifier.named @@ -12,12 +9,11 @@ import org.koin.dsl.bind import org.koin.dsl.module val localTimetableDataSourceModule = module { - includes(dataStoreModule, databaseModule, timetableRepositoryModule) - single { + single { LocalTimetableDatasourceImpl(get(named("normalDataStore")), get()) - } bind LocalTimetableDataSource::class + } - single { + single{ LocalOpenLectureDatasourceImpl(get(named("normalDataStore")), get()) - } bind LocalOpenLectureDataSource::class + } } diff --git a/presentation/navigator/build.gradle.kts b/presentation/navigator/build.gradle.kts index 60445ffd2..c07e403c2 100644 --- a/presentation/navigator/build.gradle.kts +++ b/presentation/navigator/build.gradle.kts @@ -8,7 +8,10 @@ android { } dependencies { - api(projects.presentation.openmajor) api(projects.presentation.timetable) + + implementation(libs.koin.compose) + implementation(libs.koin.compose.viewmodel) + implementation(libs.koin.compose.viewmodel.navigation) } diff --git a/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainActivity.kt b/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainActivity.kt index 23f36517e..14bb28543 100644 --- a/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainActivity.kt +++ b/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainActivity.kt @@ -14,7 +14,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.core.view.WindowCompat import com.suwiki.presentation.common.designsystem.theme.SuwikiTheme -import dagger.hilt.android.AndroidEntryPoint class MainActivity : ComponentActivity() { diff --git a/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainScreen.kt b/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainScreen.kt index f34e480b0..8eed3ab12 100644 --- a/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainScreen.kt +++ b/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainScreen.kt @@ -1,31 +1,12 @@ package com.suwiki.presentation.navigator -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.animation.fadeIn -import androidx.compose.animation.fadeOut -import androidx.compose.animation.slideIn -import androidx.compose.animation.slideOut -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.RowScope -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Icon import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.compose.NavHost import com.suwiki.presentation.common.designsystem.component.dialog.SuwikiDialog import com.suwiki.presentation.common.ui.extension.versionCode @@ -34,13 +15,14 @@ import com.suwiki.presentation.navigator.component.SuwikiToast import com.suwiki.presentation.openmajor.navigation.OpenMajorRoute import com.suwiki.presentation.openmajor.navigation.openMajorNavGraph import com.suwiki.presentation.timetable.navigation.timetableNavGraph +import org.koin.compose.viewmodel.koinViewModel import org.orbitmvi.orbit.compose.collectAsState import org.orbitmvi.orbit.compose.collectSideEffect @Composable internal fun MainScreen( modifier: Modifier = Modifier, - viewModel: MainViewModel = hiltViewModel(), + viewModel: MainViewModel = koinViewModel(), navigator: MainNavigator = rememberMainNavigator(), ) { val uiState = viewModel.collectAsState().value diff --git a/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainViewModel.kt b/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainViewModel.kt index 07120ac23..ac3cd6bab 100644 --- a/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainViewModel.kt +++ b/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/MainViewModel.kt @@ -4,7 +4,6 @@ import androidx.lifecycle.ViewModel import com.suwiki.common.android.recordException import com.suwiki.common.model.exception.NetworkException import com.suwiki.common.model.exception.UnknownException -import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.delay import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock @@ -15,10 +14,8 @@ import org.orbitmvi.orbit.syntax.simple.postSideEffect import org.orbitmvi.orbit.syntax.simple.reduce import org.orbitmvi.orbit.viewmodel.container import java.net.ConnectException -import javax.inject.Inject -@HiltViewModel -class MainViewModel @Inject constructor() : ContainerHost, ViewModel() { +class MainViewModel: ContainerHost, ViewModel() { override val container: Container = container(MainState()) private val mutex = Mutex() diff --git a/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/di/MainViewModelModule.kt b/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/di/MainViewModelModule.kt new file mode 100644 index 000000000..dbbd08db0 --- /dev/null +++ b/presentation/navigator/src/main/java/com/suwiki/presentation/navigator/di/MainViewModelModule.kt @@ -0,0 +1,9 @@ +package com.suwiki.presentation.navigator.di + +import com.suwiki.presentation.navigator.MainViewModel +import org.koin.core.module.dsl.viewModelOf +import org.koin.dsl.module + +val mainViewModelModule = module { + viewModelOf(::MainViewModel) +} diff --git a/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorScreen.kt b/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorScreen.kt index 2af5203a1..3fbba8edd 100644 --- a/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorScreen.kt +++ b/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorScreen.kt @@ -29,7 +29,6 @@ import androidx.compose.ui.res.stringResource 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.SuwikiAppBarWithTitle import com.suwiki.presentation.common.designsystem.component.button.SuwikiContainedLargeButton import com.suwiki.presentation.common.designsystem.component.loading.LoadingScreen diff --git a/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorViewModel.kt b/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorViewModel.kt index ff91310f6..a3d16cb66 100644 --- a/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorViewModel.kt +++ b/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/OpenMajorViewModel.kt @@ -4,16 +4,11 @@ import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.suwiki.common.model.exception.AuthorizationException -import com.suwiki.domain.openmajor.usecase.GetBookmarkedOpenMajorListUseCase import com.suwiki.domain.openmajor.usecase.GetOpenMajorListUseCase -import com.suwiki.domain.openmajor.usecase.RegisterBookmarkUseCase -import com.suwiki.domain.openmajor.usecase.UnRegisterBookmarkUseCase import com.suwiki.domain.timetable.repository.OpenLectureRepository -import com.suwiki.presentation.openmajor.model.OpenMajorTap import com.suwiki.presentation.openmajor.model.toBookmarkedOpenMajorList import com.suwiki.presentation.openmajor.model.toOpenMajorList import com.suwiki.presentation.openmajor.navigation.OpenMajorRoute -import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -26,65 +21,21 @@ 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.Inject class OpenMajorViewModel( private val getOpenMajorListUseCase: GetOpenMajorListUseCase, - private val getBookmarkedOpenMajorListUseCase: GetBookmarkedOpenMajorListUseCase, - private val registerBookmarkUseCase: RegisterBookmarkUseCase, - private val unRegisterBookmarkUseCase: UnRegisterBookmarkUseCase, private val openLectureRepository: OpenLectureRepository, savedStateHandle: SavedStateHandle, ) : ContainerHost, ViewModel() { override val container: Container = container(OpenMajorState()) - private var isLoggedIn: Boolean = true private var selectedOpenMajor = savedStateHandle[OpenMajorRoute.ARGUMENT_NAME] ?: "전체" private val allOpenMajorList = mutableListOf() - private val bookmarkedOpenMajorList = mutableListOf() @OptIn(OrbitExperimental::class) fun updateSearchValue(searchValue: String) = blockingIntent { reduce { state.copy(searchValue = searchValue) } reduceOpenMajorList(searchValue) - reduceBookmarkedOpenMajorList(searchValue) - } - - fun toggleBookmark(openMajor: String) = intent { - if (isLoggedIn.not()) { - postSideEffect(OpenMajorSideEffect.ShowNeedLoginToast) - return@intent - } - - if (openMajor in bookmarkedOpenMajorList) { - unRegisterBookmark(openMajor) - } else { - registerBookmark(openMajor) - } - } - - private fun registerBookmark(openMajor: String) = intent { - registerBookmarkUseCase(openMajor) - .onSuccess { - bookmarkedOpenMajorList.add(openMajor) - reduceBookmarkedOpenMajorList() - reduceOpenMajorList() - } - .onFailure { - postSideEffect(OpenMajorSideEffect.HandleException(it)) - } - } - - private fun unRegisterBookmark(openMajor: String) = intent { - unRegisterBookmarkUseCase(openMajor) - .onSuccess { - bookmarkedOpenMajorList.remove(openMajor) - reduceBookmarkedOpenMajorList() - reduceOpenMajorList() - } - .onFailure { - postSideEffect(OpenMajorSideEffect.HandleException(it)) - } } fun syncPagerState(currentPage: Int) = intent { @@ -94,7 +45,6 @@ class OpenMajorViewModel( fun updateSelectedOpenMajor(openMajor: String) = intent { selectedOpenMajor = openMajor reduceOpenMajorList() - reduceBookmarkedOpenMajorList() } fun popBackStack() = intent { postSideEffect(OpenMajorSideEffect.PopBackStack) } @@ -107,7 +57,7 @@ class OpenMajorViewModel( fun initData() = intent { reduce { state.copy(isLoading = true) } - joinAll(getOpenMajor(), getBookmarkedOpenMajor()) + joinAll(getOpenMajor()) reduce { state.copy(isLoading = false) } } @@ -125,33 +75,6 @@ class OpenMajorViewModel( reduce { state.copy( filteredAllOpenMajorList = allOpenMajorList.toOpenMajorList( - searchValue = searchValue, - bookmarkedOpenMajorList = bookmarkedOpenMajorList, - selectedOpenMajor = selectedOpenMajor, - ), - ) - } - } - - private fun getBookmarkedOpenMajor() = intent { - getBookmarkedOpenMajorListUseCase() - .onSuccess { - bookmarkedOpenMajorList.addAll(it) - reduceBookmarkedOpenMajorList() - reduceOpenMajorList() - } - .onFailure { - if (it is AuthorizationException) { - isLoggedIn = false - } else { - } - } - } - - private fun reduceBookmarkedOpenMajorList(searchValue: String = container.stateFlow.value.searchValue) = intent { - reduce { - state.copy( - filteredBookmarkedOpenMajorList = bookmarkedOpenMajorList.toBookmarkedOpenMajorList( searchValue = searchValue, selectedOpenMajor = selectedOpenMajor, ), diff --git a/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorModule.kt b/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorModule.kt deleted file mode 100644 index 57072d08b..000000000 --- a/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorModule.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.suwiki.presentation.openmajor.di - -import com.suwiki.presentation.openmajor.OpenMajorViewModel -import org.koin.core.module.dsl.viewModelOf -import org.koin.dsl.module - -val openMajorModule = module { - viewModelOf(::OpenMajorViewModel) -} diff --git a/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorViewModelModule.kt b/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorViewModelModule.kt new file mode 100644 index 000000000..bbfc2a4b8 --- /dev/null +++ b/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/di/OpenMajorViewModelModule.kt @@ -0,0 +1,12 @@ +package com.suwiki.presentation.openmajor.di + +import androidx.lifecycle.SavedStateHandle +import com.suwiki.presentation.openmajor.OpenMajorViewModel +import org.koin.core.module.dsl.viewModel +import org.koin.dsl.module + +val openMajorViewModelModule = module { + viewModel { (savedStateHandle: SavedStateHandle) -> + OpenMajorViewModel(get(), get(), savedStateHandle) + } +} diff --git a/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/model/OpenMajor.kt b/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/model/OpenMajor.kt index 8a34be2d1..08ce32e3d 100644 --- a/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/model/OpenMajor.kt +++ b/presentation/openmajor/src/main/java/com/suwiki/presentation/openmajor/model/OpenMajor.kt @@ -6,7 +6,6 @@ import java.util.UUID data class OpenMajor( val id: UUID = UUID.randomUUID(), val name: String, - val isBookmarked: Boolean = false, val isSelected: Boolean = false, ) @@ -22,14 +21,12 @@ fun List.toBookmarkedOpenMajorList( }.map { name -> OpenMajor( name = name, - isBookmarked = true, isSelected = selectedOpenMajor == name, ) }.toPersistentList() fun List.toOpenMajorList( searchValue: String, - bookmarkedOpenMajorList: List, selectedOpenMajor: String, ) = filter { openMajor -> if (searchValue.isNotEmpty()) { @@ -40,7 +37,6 @@ fun List.toOpenMajorList( }.map { name -> OpenMajor( name = name, - isBookmarked = name in bookmarkedOpenMajorList, isSelected = selectedOpenMajor == name, ) }.toPersistentList() diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorScreen.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorScreen.kt index f4e1e14cf..ab8a5d1f3 100644 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorScreen.kt +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorScreen.kt @@ -35,7 +35,6 @@ import androidx.compose.ui.text.input.KeyboardType 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.TimetableCellColor import com.suwiki.common.model.timetable.TimetableDay import com.suwiki.presentation.common.designsystem.component.appbar.SuwikiAppBarWithTitle diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorViewModel.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorViewModel.kt index b66e75a89..d863725a3 100644 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorViewModel.kt +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/celleditor/CellEditorViewModel.kt @@ -12,7 +12,6 @@ import com.suwiki.domain.timetable.usecase.UpdateTimetableCellUseCase import com.suwiki.presentation.common.ui.extension.decodeFromUri import com.suwiki.presentation.timetable.navigation.TimetableRoute import com.suwiki.presentation.timetable.navigation.argument.CellEditorArgument -import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.serialization.json.Json import org.orbitmvi.orbit.Container import org.orbitmvi.orbit.ContainerHost @@ -23,7 +22,6 @@ 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.Inject class CellEditorViewModel( private val insertTimetableCellUseCase: InsertTimetableCellUseCase, diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableModule.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableModule.kt deleted file mode 100644 index 5809e372d..000000000 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableModule.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.suwiki.presentation.timetable.di - -import com.suwiki.presentation.timetable.openlecture.OpenLectureViewModel -import com.suwiki.presentation.timetable.timetable.TimetableViewModel -import com.suwiki.presentation.timetable.timetableeditor.TimetableEditorViewModel -import com.suwiki.presentation.timetable.timetablelist.TimetableListViewModel -import org.koin.core.module.dsl.viewModelOf -import org.koin.dsl.module - -val timetableModule = module { - viewModelOf(::OpenLectureViewModel) - viewModelOf(::TimetableViewModel) - viewModelOf(::TimetableEditorViewModel) - viewModelOf(::TimetableListViewModel) -} diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableViewModelModule.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableViewModelModule.kt new file mode 100644 index 000000000..412c2e5d1 --- /dev/null +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/di/TimetableViewModelModule.kt @@ -0,0 +1,22 @@ +package com.suwiki.presentation.timetable.di + +import org.koin.core.module.dsl.viewModel +import androidx.lifecycle.SavedStateHandle +import com.suwiki.presentation.timetable.celleditor.CellEditorViewModel +import com.suwiki.presentation.timetable.openlecture.OpenLectureViewModel +import com.suwiki.presentation.timetable.timetable.TimetableViewModel +import com.suwiki.presentation.timetable.timetableeditor.TimetableEditorViewModel +import com.suwiki.presentation.timetable.timetablelist.TimetableListViewModel +import org.koin.dsl.module + +val timetableViewModelModule = module { + viewModel { (savedStateHandle: SavedStateHandle) -> + CellEditorViewModel(get(), get(), savedStateHandle) + } + viewModel { OpenLectureViewModel(get(), get(), get(), get()) } + viewModel { TimetableViewModel(get(), get(), get(), get()) } + viewModel { (savedStateHandle: SavedStateHandle) -> + TimetableEditorViewModel(get(), get(), savedStateHandle) + } + viewModel { TimetableListViewModel(get(), get(), get()) } +} diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureScreen.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureScreen.kt index 3360b7d46..32b71ce91 100644 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureScreen.kt +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureScreen.kt @@ -40,7 +40,6 @@ import androidx.compose.ui.res.stringResource 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.OpenLecture import com.suwiki.common.model.timetable.TimetableCellColor import com.suwiki.presentation.common.designsystem.component.appbar.SuwikiAppBarWithTextButton @@ -55,7 +54,6 @@ import com.suwiki.presentation.common.designsystem.theme.GrayF6 import com.suwiki.presentation.common.designsystem.theme.Primary import com.suwiki.presentation.common.designsystem.theme.SuwikiTheme import com.suwiki.presentation.common.designsystem.theme.White -import com.suwiki.presentation.common.ui.extension.OnBottomReached import com.suwiki.presentation.common.ui.extension.suwikiClickable import com.suwiki.presentation.common.ui.util.timetableCellColorHexMap import com.suwiki.presentation.timetable.R diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureViewModel.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureViewModel.kt index a49531d27..ef2d33b35 100644 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureViewModel.kt +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/openlecture/OpenLectureViewModel.kt @@ -13,7 +13,6 @@ import com.suwiki.domain.timetable.usecase.InsertTimetableCellUseCase import com.suwiki.domain.timetable.usecase.UpdateOpenLectureIfNeedUseCase import com.suwiki.presentation.timetable.navigation.argument.toCellEditorArgument import com.suwiki.presentation.timetable.openlecture.model.SchoolLevel -import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.firstOrNull @@ -22,13 +21,11 @@ import kotlinx.coroutines.sync.withLock import org.orbitmvi.orbit.Container import org.orbitmvi.orbit.ContainerHost import org.orbitmvi.orbit.annotation.OrbitExperimental -import org.orbitmvi.orbit.syntax.simple.SimpleSyntax 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.Inject class OpenLectureViewModel( private val updateOpenLectureIfNeedUseCase: UpdateOpenLectureIfNeedUseCase, diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableScreen.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableScreen.kt index 478ccee9a..81c0b4340 100644 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableScreen.kt +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableScreen.kt @@ -15,7 +15,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource 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.TimetableCell import com.suwiki.presentation.common.designsystem.component.bottomsheet.SuwikiSelectBottomSheet import com.suwiki.presentation.common.designsystem.theme.SuwikiTheme diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableViewModel.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableViewModel.kt index 832fa0f04..63ac01372 100644 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableViewModel.kt +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetable/TimetableViewModel.kt @@ -8,14 +8,12 @@ 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.Inject class TimetableViewModel( private val getMainTimetableUseCase: GetMainTimetableUseCase, diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorScreen.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorScreen.kt index f3c1add3a..b677ffcd6 100644 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorScreen.kt +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorScreen.kt @@ -13,7 +13,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource 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.SuwikiAppBarWithTitle import com.suwiki.presentation.common.designsystem.component.bottomsheet.SuwikiSelectBottomSheet import com.suwiki.presentation.common.designsystem.component.button.SuwikiContainedLargeButton diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt index c14bf41aa..54a39b06e 100644 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt @@ -7,7 +7,6 @@ import com.suwiki.domain.timetable.usecase.UpdateTimetableUseCase import com.suwiki.presentation.common.ui.extension.decodeFromUri import com.suwiki.presentation.timetable.navigation.TimetableRoute import com.suwiki.presentation.timetable.navigation.argument.TimetableEditorArgument -import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.serialization.json.Json import org.orbitmvi.orbit.Container import org.orbitmvi.orbit.ContainerHost @@ -17,7 +16,6 @@ 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.Inject class TimetableEditorViewModel( private val insertTimetableUseCase: InsertTimetableUseCase, diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListScreen.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListScreen.kt index 1bede4bfc..b86d1c0c8 100644 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListScreen.kt +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListScreen.kt @@ -15,7 +15,6 @@ import androidx.compose.ui.res.stringResource 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.Timetable import com.suwiki.presentation.common.designsystem.component.appbar.SuwikiAppBarWithTextButton import com.suwiki.presentation.common.designsystem.component.container.SuwikiEditContainer diff --git a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListViewModel.kt b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListViewModel.kt index 57b355e6c..c420c0de0 100644 --- a/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListViewModel.kt +++ b/presentation/timetable/src/main/java/com/suwiki/presentation/timetable/timetablelist/TimetableListViewModel.kt @@ -6,7 +6,6 @@ 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 @@ -15,7 +14,6 @@ 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.Inject class TimetableListViewModel( private val getAllTimetableUseCase: GetAllTimetableUseCase, diff --git a/remote/common/build.gradle.kts b/remote/common/build.gradle.kts index 9b90cd59a..5c4dddffe 100644 --- a/remote/common/build.gradle.kts +++ b/remote/common/build.gradle.kts @@ -1,7 +1,6 @@ @Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { alias(libs.plugins.suwiki.android.library) - alias(libs.plugins.suwiki.android.hilt) alias(libs.plugins.kotlin.serialization) } @@ -21,7 +20,6 @@ android { dependencies { implementation(projects.common.model) - implementation(projects.common.security) implementation(libs.bundles.coroutine) implementation(libs.kotlinx.serialization.json) diff --git a/remote/common/src/main/java/com/suwiki/remote/common/authenticator/TokenAuthenticator.kt b/remote/common/src/main/java/com/suwiki/remote/common/authenticator/TokenAuthenticator.kt deleted file mode 100644 index 8e7442874..000000000 --- a/remote/common/src/main/java/com/suwiki/remote/common/authenticator/TokenAuthenticator.kt +++ /dev/null @@ -1,64 +0,0 @@ -package com.suwiki.remote.common.authenticator - -import com.suwiki.common.model.exception.SuwikiServerError -import com.suwiki.remote.common.di.AUTH_HEADER -import com.suwiki.remote.common.di.RETROFIT_TAG -import com.suwiki.remote.common.repository.AuthRepository -import com.suwiki.remote.common.retrofit.Json -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock -import okhttp3.Authenticator -import okhttp3.Request -import okhttp3.Route -import timber.log.Timber -import javax.inject.Inject - -internal class TokenAuthenticator @Inject constructor( - private val authRepository: AuthRepository, -) : Authenticator { - private val mutex = Mutex() - override fun authenticate(route: Route?, response: okhttp3.Response): Request? = runBlocking { - if (response.isTokenExpired.not()) return@runBlocking null - - mutex.withLock { - val accessToken = authRepository.accessToken.first() - val alreadyRefreshed = - response.request.header(AUTH_HEADER)?.contains(accessToken) == false - // if request's header's token is different, then that means the access token has already been refreshed - // we return the response with the locally persisted token in the header - if (alreadyRefreshed) { - Timber.tag(RETROFIT_TAG) - .d("TokenAuthenticator - 이미 토큰이 갱신됨 / 중단된 API 재요청") - - return@runBlocking response.request.newBuilder() - .header(AUTH_HEADER, accessToken) - .build() - } - - if (authRepository.reissueRefreshToken()) { - Timber.tag(RETROFIT_TAG) - .d("TokenAuthenticator - 토큰 갱신 성공 / 중단된 API 재요청") - response.request - .newBuilder() - .removeHeader(AUTH_HEADER) - .header(AUTH_HEADER, authRepository.accessToken.first()) - .build() - } else { - null - } - } - } -} - -private val okhttp3.Response.isTokenExpired: Boolean - get() { - val exception = kotlin.runCatching { - // https://stackoverflow.com/questions/60671465/retrofit-java-lang-illegalstateexception-closed - val suwikiErrorResponse = Json.getSuwikiErrorBody(peekBody(Long.MAX_VALUE).string()) - SuwikiServerError.valueOf(suwikiErrorResponse.suwikiCode).exception - }.getOrNull() ?: return false - - return exception == SuwikiServerError.TOKEN001.exception && code == 401 - } diff --git a/remote/common/src/main/java/com/suwiki/remote/common/di/ApiModule.kt b/remote/common/src/main/java/com/suwiki/remote/common/di/ApiModule.kt index c650c0f08..0f81d4792 100644 --- a/remote/common/src/main/java/com/suwiki/remote/common/di/ApiModule.kt +++ b/remote/common/src/main/java/com/suwiki/remote/common/di/ApiModule.kt @@ -1,20 +1,14 @@ package com.suwiki.remote.common.di import com.suwiki.remote.common.api.AuthApi -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.Singleton -@Module -@InstallIn(SingletonComponent::class) -object ApiModule { - @Singleton - @Provides - fun provideAuthApi(@NoAuthRetrofit retrofit: Retrofit): AuthApi { - return retrofit.create(AuthApi::class.java) +val apiModule = module { + single { + get(qualifier = named("NoAuthRetrofit")).create(AuthApi::class.java) } } + diff --git a/remote/common/src/main/java/com/suwiki/remote/common/di/NetworkModule.kt b/remote/common/src/main/java/com/suwiki/remote/common/di/NetworkModule.kt index 92a0de620..cc2be4eff 100644 --- a/remote/common/src/main/java/com/suwiki/remote/common/di/NetworkModule.kt +++ b/remote/common/src/main/java/com/suwiki/remote/common/di/NetworkModule.kt @@ -2,13 +2,7 @@ package com.suwiki.remote.common.di import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import com.suwiki.remote.common.BuildConfig -import com.suwiki.remote.common.authenticator.TokenAuthenticator -import com.suwiki.remote.common.interceptor.AuthenticationInterceptor import com.suwiki.remote.common.retrofit.ResultCallAdapterFactory -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaTypeOrNull @@ -17,8 +11,6 @@ import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import timber.log.Timber import java.util.concurrent.TimeUnit -import javax.inject.Qualifier -import javax.inject.Singleton import org.koin.dsl.module val networkModule = module { @@ -74,8 +66,6 @@ val networkModule = module { .connectTimeout(10, TimeUnit.SECONDS) .writeTimeout(15, TimeUnit.SECONDS) .addInterceptor(get()) - .addInterceptor(get()) - .authenticator(get()) .build() } diff --git a/remote/common/src/main/java/com/suwiki/remote/common/di/Qualifier.kt b/remote/common/src/main/java/com/suwiki/remote/common/di/Qualifier.kt deleted file mode 100644 index b1d9883d0..000000000 --- a/remote/common/src/main/java/com/suwiki/remote/common/di/Qualifier.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.suwiki.remote.common.di - -import javax.inject.Qualifier - -@Qualifier -@Retention(AnnotationRetention.BINARY) -internal annotation class NoAuthOkHttpClient - -@Qualifier -@Retention(AnnotationRetention.BINARY) -internal annotation class AuthOkHttpClient - -@Qualifier -@Retention(AnnotationRetention.BINARY) -annotation class NoAuthRetrofit - -@Qualifier -@Retention(AnnotationRetention.BINARY) -annotation class AuthRetrofit diff --git a/remote/common/src/main/java/com/suwiki/remote/common/di/RepositoryModule.kt b/remote/common/src/main/java/com/suwiki/remote/common/di/RepositoryModule.kt deleted file mode 100644 index 6b111c4ca..000000000 --- a/remote/common/src/main/java/com/suwiki/remote/common/di/RepositoryModule.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.suwiki.remote.common.di - -import com.suwiki.remote.common.repository.AuthRepository -import com.suwiki.remote.common.repository.AuthRepositoryImpl -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal abstract class RepositoryModule { - - @Singleton - @Binds - internal abstract fun bindAuthRepository( - authRepositoryImpl: AuthRepositoryImpl, - ): AuthRepository -} diff --git a/remote/common/src/main/java/com/suwiki/remote/common/interceptor/AuthenticationInterceptor.kt b/remote/common/src/main/java/com/suwiki/remote/common/interceptor/AuthenticationInterceptor.kt deleted file mode 100644 index ec672a014..000000000 --- a/remote/common/src/main/java/com/suwiki/remote/common/interceptor/AuthenticationInterceptor.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.suwiki.remote.common.interceptor - -import com.suwiki.remote.common.di.AUTH_HEADER -import com.suwiki.remote.common.di.RETROFIT_TAG -import com.suwiki.remote.common.repository.AuthRepository -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.runBlocking -import okhttp3.Interceptor -import timber.log.Timber -import javax.inject.Inject - -internal class AuthenticationInterceptor @Inject constructor( - private val authRepository: AuthRepository, -) : Interceptor { - override fun intercept(chain: Interceptor.Chain): okhttp3.Response { - return runBlocking { - val accessToken = authRepository.accessToken.first() - val request = chain.request().newBuilder() - .addHeader(AUTH_HEADER, accessToken).build() - Timber.tag(RETROFIT_TAG) - .d( - "AuthenticationInterceptor - intercept() called / request header: %s", - accessToken, - ) - return@runBlocking chain.proceed(request) - } - } -} diff --git a/remote/common/src/main/java/com/suwiki/remote/common/repository/AuthRepository.kt b/remote/common/src/main/java/com/suwiki/remote/common/repository/AuthRepository.kt deleted file mode 100644 index 57094f8e4..000000000 --- a/remote/common/src/main/java/com/suwiki/remote/common/repository/AuthRepository.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.suwiki.remote.common.repository - -import kotlinx.coroutines.flow.Flow - -internal interface AuthRepository { - val accessToken: Flow - - /** - * 토큰 재발급 - * */ - suspend fun reissueRefreshToken(): Boolean -} diff --git a/remote/common/src/main/java/com/suwiki/remote/common/repository/AuthRepositoryImpl.kt b/remote/common/src/main/java/com/suwiki/remote/common/repository/AuthRepositoryImpl.kt deleted file mode 100644 index 9823f30a3..000000000 --- a/remote/common/src/main/java/com/suwiki/remote/common/repository/AuthRepositoryImpl.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.suwiki.remote.common.repository - -import com.suwiki.common.security.SecurityPreferences -import com.suwiki.remote.common.api.AuthApi -import com.suwiki.remote.common.di.RETROFIT_TAG -import com.suwiki.remote.common.retrofit.onFailure -import com.suwiki.remote.common.retrofit.onSuccess -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.first -import timber.log.Timber -import javax.inject.Inject -import javax.inject.Singleton - -@Singleton -internal class AuthRepositoryImpl @Inject constructor( - private val authApi: AuthApi, - private val securityPreferences: SecurityPreferences, -) : AuthRepository { - private val refreshToken: Flow - get() = securityPreferences.flowRefreshToken() - override val accessToken: Flow - get() = securityPreferences.flowAccessToken() - - private suspend fun saveTokens(access: String, refresh: String) { - securityPreferences.setAccessToken(access) - securityPreferences.setRefreshToken(refresh) - } - - override suspend fun reissueRefreshToken(): Boolean = - authApi - .reissueRefreshToken(refreshToken.first()) - .onSuccess { - saveTokens(access = it.accessToken, refresh = it.refreshToken) - } - .onFailure { - securityPreferences.clearAll() - Timber.tag(RETROFIT_TAG) - .d("TokenAuthenticator - handleResponse() called / 리프레시 토큰이 만료되어 로그 아웃 되었습니다. $it") - } - .isSuccess -} diff --git a/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/datasource/RemoteOpenMajorDataSourceImpl.kt b/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/datasource/RemoteOpenMajorDataSourceImpl.kt index 46a8a0f6d..6492f46bf 100644 --- a/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/datasource/RemoteOpenMajorDataSourceImpl.kt +++ b/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/datasource/RemoteOpenMajorDataSourceImpl.kt @@ -2,12 +2,8 @@ package com.suwiki.remote.openmajor.datasource import com.suwiki.data.openmajor.datasource.RemoteOpenMajorDataSource import com.suwiki.remote.openmajor.api.MajorApi -import com.suwiki.remote.openmajor.request.BookmarkMajorRequest -import javax.inject.Inject -class RemoteOpenMajorDataSourceImpl @Inject constructor( - private val majorApi: MajorApi, -) : RemoteOpenMajorDataSource { +class RemoteOpenMajorDataSourceImpl(private val majorApi: MajorApi) : RemoteOpenMajorDataSource { override suspend fun getOpenMajorVersion(): Float { return majorApi.getOpenMajorVersion().getOrThrow().version } @@ -15,16 +11,4 @@ class RemoteOpenMajorDataSourceImpl @Inject constructor( override suspend fun getOpenMajorList(): List { return majorApi.getOpenMajorList().getOrThrow().data } - - override suspend fun getBookmarkedMajorList(): List { - return majorApi.getBookmarkMajorList().getOrThrow().data - } - - override suspend fun bookmarkMajor(majorName: String) { - return majorApi.bookmarkMajor(BookmarkMajorRequest(majorType = majorName)).getOrThrow() - } - - override suspend fun removeBookmarkMajor(majorName: String) { - return majorApi.removeBookmarkMajor(majorName = majorName).getOrThrow() - } } diff --git a/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteDataSourceModule.kt b/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteDataSourceModule.kt deleted file mode 100644 index 1a0d180ea..000000000 --- a/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteDataSourceModule.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.suwiki.remote.openmajor.di - -import com.suwiki.data.openmajor.datasource.RemoteOpenMajorDataSource -import com.suwiki.remote.openmajor.datasource.RemoteOpenMajorDataSourceImpl -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -abstract class RemoteDataSourceModule { - - @Singleton - @Binds - abstract fun bindRemoteOpenMajorDatasource( - remoteOpenMajorDataSourceImpl: RemoteOpenMajorDataSourceImpl, - ): RemoteOpenMajorDataSource -} diff --git a/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/ApiModule.kt b/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteOpenMajorApiModule.kt similarity index 55% rename from remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/ApiModule.kt rename to remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteOpenMajorApiModule.kt index 2946102c7..58a4d2802 100644 --- a/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/ApiModule.kt +++ b/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteOpenMajorApiModule.kt @@ -1,17 +1,11 @@ package com.suwiki.remote.openmajor.di -import com.suwiki.remote.common.di.AuthRetrofit import com.suwiki.remote.openmajor.api.MajorApi -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.Singleton -val openMajorModule = module { +val remoteOpenMajorApiModule = module { single { get(named("authRetrofit")).create(MajorApi::class.java) } diff --git a/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteOpenMajorDataSourceModule.kt b/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteOpenMajorDataSourceModule.kt new file mode 100644 index 000000000..958eee673 --- /dev/null +++ b/remote/openmajor/src/main/java/com/suwiki/remote/openmajor/di/RemoteOpenMajorDataSourceModule.kt @@ -0,0 +1,9 @@ +package com.suwiki.remote.openmajor.di + +import com.suwiki.data.openmajor.datasource.RemoteOpenMajorDataSource +import com.suwiki.remote.openmajor.datasource.RemoteOpenMajorDataSourceImpl +import org.koin.dsl.module + +val remoteOpenMajorDataSourceModule = module { + single { RemoteOpenMajorDataSourceImpl(get()) } +} diff --git a/remote/timetable/src/main/java/com.suwiki.remote.timetable/datasource/RemoteOpenLectureDataSourceImpl.kt b/remote/timetable/src/main/java/com.suwiki.remote.timetable/datasource/RemoteOpenLectureDataSourceImpl.kt index 697d4a058..8fcc44e50 100644 --- a/remote/timetable/src/main/java/com.suwiki.remote.timetable/datasource/RemoteOpenLectureDataSourceImpl.kt +++ b/remote/timetable/src/main/java/com.suwiki.remote.timetable/datasource/RemoteOpenLectureDataSourceImpl.kt @@ -5,7 +5,6 @@ import com.suwiki.data.timetable.OpenLectureRaw import com.suwiki.data.timetable.datasource.RemoteOpenLectureDataSource import kotlinx.coroutines.tasks.await import okhttp3.internal.toLongOrDefault -import javax.inject.Inject class RemoteOpenLectureDataSourceImpl( private val firebaseDatabase: FirebaseDatabase, diff --git a/remote/timetable/src/main/java/com.suwiki.remote.timetable/di/RemoteDataSourceModule.kt b/remote/timetable/src/main/java/com.suwiki.remote.timetable/di/RemoteTimetableDataSourceModule.kt similarity index 92% rename from remote/timetable/src/main/java/com.suwiki.remote.timetable/di/RemoteDataSourceModule.kt rename to remote/timetable/src/main/java/com.suwiki.remote.timetable/di/RemoteTimetableDataSourceModule.kt index 4898f01d8..3d26d018d 100644 --- a/remote/timetable/src/main/java/com.suwiki.remote.timetable/di/RemoteDataSourceModule.kt +++ b/remote/timetable/src/main/java/com.suwiki.remote.timetable/di/RemoteTimetableDataSourceModule.kt @@ -6,6 +6,5 @@ import com.suwiki.remote.timetable.datasource.RemoteOpenLectureDataSourceImpl import org.koin.dsl.module val remoteTimetableDataSourceModule = module { - includes(firebaseDatabaseModule) single { RemoteOpenLectureDataSourceImpl(get()) } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 6fb361994..8495fc5a4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -22,7 +22,6 @@ include(":app-compose") include(":common:android") include(":common:model") -include(":common:security") include(":remote:openmajor") include(":remote:timetable")