From 8fd51114399b11ad8542a08f6c657e38f0b4bceb Mon Sep 17 00:00:00 2001 From: jinukeu Date: Tue, 12 Dec 2023 10:34:37 +0900 Subject: [PATCH] =?UTF-8?q?refactor/#33:=20Dispatcher=20=ED=95=98=EB=93=9C?= =?UTF-8?q?=20=EC=BD=94=EB=94=A9=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app-compose/build.gradle.kts | 1 + .../repository/OpenMajorRepositoryImpl.kt | 4 +--- .../repository/OpenLectureRepositoryImpl.kt | 2 +- local/openmajor/build.gradle.kts | 4 +++- .../LocalOpenMajorDataSourceImpl.kt | 13 +++++++++---- local/timetable/build.gradle.kts | 4 +++- .../LocalOpenLectureDatasourceImpl.kt | 13 +++++++++---- .../LocalTimetableDatasourceImpl.kt | 19 ++++++++++++------- settings.gradle.kts | 2 +- 9 files changed, 40 insertions(+), 22 deletions(-) diff --git a/app-compose/build.gradle.kts b/app-compose/build.gradle.kts index de0ece3d9..fa34d3bc3 100644 --- a/app-compose/build.gradle.kts +++ b/app-compose/build.gradle.kts @@ -18,6 +18,7 @@ android { dependencies { implementation(projects.presentation) + implementation(projects.core.android) implementation(projects.core.model) implementation(projects.core.common) implementation(projects.core.network) 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 1ccd570c1..5c50c706f 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 @@ -4,11 +4,9 @@ import com.suwiki.core.model.openmajor.OpenMajor import com.suwiki.data.openmajor.datasource.LocalOpenMajorDataSource import com.suwiki.data.openmajor.datasource.RemoteOpenMajorDataSource import com.suwiki.domain.openmajor.repository.OpenMajorRepository -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.flow.flowOn import javax.inject.Inject class OpenMajorRepositoryImpl @Inject constructor( @@ -36,7 +34,7 @@ class OpenMajorRepositoryImpl @Inject constructor( setLocalOpenMajorVersion(remoteVersion) } } - }.flowOn(Dispatchers.IO) + } override suspend fun getBookmarkedOpenMajorList(): List { return remoteOpenMajorDataSource.getBookmarkedMajorList() 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 87ef3598a..b6f706cd4 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 @@ -34,5 +34,5 @@ class OpenLectureRepositoryImpl @Inject constructor( setOpenLectureListVersion(remoteVersion) } } - }.flowOn(Dispatchers.IO) + } } diff --git a/local/openmajor/build.gradle.kts b/local/openmajor/build.gradle.kts index df7be066c..f4edd8921 100644 --- a/local/openmajor/build.gradle.kts +++ b/local/openmajor/build.gradle.kts @@ -11,9 +11,11 @@ android { dependencies { implementation(projects.core.model) - implementation(projects.data.openmajor) + implementation(projects.core.android) implementation(projects.core.database) + implementation(projects.data.openmajor) + ksp(libs.room.compiler) implementation(libs.room.runtime) implementation(libs.room.ktx) 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 04262110e..a1dc612d0 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,18 +4,23 @@ 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.core.android.Dispatcher +import com.suwiki.core.android.SuwikiDispatchers import com.suwiki.core.database.database.OpenMajorDatabase import com.suwiki.core.database.di.NormalDataStore import com.suwiki.core.model.openmajor.OpenMajor import com.suwiki.data.openmajor.datasource.LocalOpenMajorDataSource import com.suwiki.local.openmajor.converter.toEntity import com.suwiki.local.openmajor.converter.toModel +import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map +import kotlinx.coroutines.withContext import javax.inject.Inject class LocalOpenMajorDataSourceImpl @Inject constructor( @NormalDataStore private val dataStore: DataStore, + @Dispatcher(SuwikiDispatchers.IO) private val ioDispatcher: CoroutineDispatcher, private val db: OpenMajorDatabase, ) : LocalOpenMajorDataSource { @@ -33,15 +38,15 @@ class LocalOpenMajorDataSourceImpl @Inject constructor( dataStore.edit { it[OPEN_MAJOR_VERSION] = version } } - override suspend fun getLocalOpenMajorList(): List { - return db.openMajorDao().getAll().map { it.toModel() } + override suspend fun getLocalOpenMajorList(): List = withContext(ioDispatcher) { + db.openMajorDao().getAll().map { it.toModel() } } - override suspend fun saveAllOpenMajors(majors: List) { + override suspend fun saveAllOpenMajors(majors: List) = withContext(ioDispatcher) { db.openMajorDao().insertAll(majors.map { it.toEntity() }) } - override suspend fun deleteAllOpenMajors() { + override suspend fun deleteAllOpenMajors() = withContext(ioDispatcher) { db.openMajorDao().deleteAll() } } diff --git a/local/timetable/build.gradle.kts b/local/timetable/build.gradle.kts index d2d43b005..433bf2e7c 100644 --- a/local/timetable/build.gradle.kts +++ b/local/timetable/build.gradle.kts @@ -12,9 +12,11 @@ android { dependencies { implementation(projects.core.model) - implementation(projects.data.timetable) + implementation(projects.core.android) implementation(projects.core.database) + implementation(projects.data.timetable) + ksp(libs.room.compiler) implementation(libs.room.runtime) implementation(libs.room.ktx) 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 43d8f7959..30039fa32 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,18 +4,23 @@ 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.core.android.Dispatcher +import com.suwiki.core.android.SuwikiDispatchers import com.suwiki.core.database.database.OpenLectureDatabase import com.suwiki.core.database.di.NormalDataStore import com.suwiki.core.model.timetable.OpenLecture import com.suwiki.data.timetable.datasource.LocalOpenLectureDatasource import com.suwiki.local.timetable.converter.toEntity import com.suwiki.local.timetable.converter.toModel +import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map +import kotlinx.coroutines.withContext import javax.inject.Inject class LocalOpenLectureDatasourceImpl @Inject constructor( @NormalDataStore private val dataStore: DataStore, + @Dispatcher(SuwikiDispatchers.IO) private val ioDispatcher: CoroutineDispatcher, private val openLectureDatabase: OpenLectureDatabase, ) : LocalOpenLectureDatasource { @@ -34,15 +39,15 @@ class LocalOpenLectureDatasourceImpl @Inject constructor( return data.map { it[LOCAL_OPEN_LECTURE_VERSION] ?: 0L } } - override suspend fun getOpenLectureList(): List { - return openLectureDatabase.openLectureDao().getAll().map { it.toModel() } + override suspend fun getOpenLectureList(): List = withContext(ioDispatcher) { + openLectureDatabase.openLectureDao().getAll().map { it.toModel() } } - override suspend fun insertOpenLecture(data: OpenLecture) { + override suspend fun insertOpenLecture(data: OpenLecture) = withContext(ioDispatcher) { openLectureDatabase.openLectureDao().insert(data.toEntity()) } - override suspend fun deleteAllOpenLecture() { + override suspend fun deleteAllOpenLecture() = withContext(ioDispatcher) { openLectureDatabase.openLectureDao().deleteAll() } } 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 61d675c92..6235a5319 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 @@ -4,18 +4,23 @@ 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.core.android.Dispatcher +import com.suwiki.core.android.SuwikiDispatchers import com.suwiki.core.database.database.TimetableDatabase import com.suwiki.core.database.di.NormalDataStore import com.suwiki.core.model.timetable.Timetable import com.suwiki.data.timetable.datasource.LocalTimetableDataSource import com.suwiki.local.timetable.converter.toEntity import com.suwiki.local.timetable.converter.toModel +import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map +import kotlinx.coroutines.withContext import javax.inject.Inject class LocalTimetableDatasourceImpl @Inject constructor( @NormalDataStore private val dataStore: DataStore, + @Dispatcher(SuwikiDispatchers.IO) private val ioDispatcher: CoroutineDispatcher, private val timetableDatabase: TimetableDatabase, ) : LocalTimetableDataSource { @@ -26,23 +31,23 @@ class LocalTimetableDatasourceImpl @Inject constructor( private val data: Flow get() = dataStore.data - override suspend fun getAllTimetable(): List { - return timetableDatabase.timetableDao().getAll().map { it.toModel() } + override suspend fun getAllTimetable(): List = withContext(ioDispatcher) { + timetableDatabase.timetableDao().getAll().map { it.toModel() } } - override suspend fun getTimetable(createTime: Long): Timetable { - return timetableDatabase.timetableDao().get(createTime).toModel() + override suspend fun getTimetable(createTime: Long): Timetable = withContext(ioDispatcher) { + timetableDatabase.timetableDao().get(createTime).toModel() } - override suspend fun deleteAllTimetable() { + override suspend fun deleteAllTimetable() = withContext(ioDispatcher) { timetableDatabase.timetableDao().deleteAll() } - override suspend fun deleteTimetable(data: Timetable) { + override suspend fun deleteTimetable(data: Timetable) = withContext(ioDispatcher) { timetableDatabase.timetableDao().delete(data.toEntity()) } - override suspend fun updateTimetable(data: Timetable) { + override suspend fun updateTimetable(data: Timetable) = withContext(ioDispatcher) { timetableDatabase.timetableDao().update(data.toEntity()) } diff --git a/settings.gradle.kts b/settings.gradle.kts index 0eb4bc421..98936914e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -22,6 +22,7 @@ rootProject.name = "uswtimetable" include(":presentation") include(":app-compose") +include(":core:android") include(":core:model") include(":core:common") include(":core:network") @@ -60,4 +61,3 @@ include(":domain:lectureevaluation:my") include(":domain:lectureevaluation:editor") include(":domain:timetable") include(":domain:notice") -include(":core:android")