diff --git a/app/build.gradle b/app/build.gradle index 40caaf3..06fd8e8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "com.leoleo.quizapp" minSdk 29 targetSdk 34 - versionCode 102 - versionName "1.0.2" + versionCode 103 + versionName "1.0.3" testInstrumentationRunner "com.leoleo.androidapptemplate.CustomTestRunner" vectorDrawables { diff --git a/app/src/main/kotlin/com/leoleo/androidapptemplate/ui/quiz/QuizViewModel.kt b/app/src/main/kotlin/com/leoleo/androidapptemplate/ui/quiz/QuizViewModel.kt index 35a76bf..0a6ce6d 100644 --- a/app/src/main/kotlin/com/leoleo/androidapptemplate/ui/quiz/QuizViewModel.kt +++ b/app/src/main/kotlin/com/leoleo/androidapptemplate/ui/quiz/QuizViewModel.kt @@ -4,7 +4,6 @@ import android.util.Log import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue -import androidx.compose.ui.res.stringResource import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.leoleo.androidapptemplate.domain.repository.QuizRepository diff --git a/data/src/main/java/com/leoleo/androidapptemplate/data/quiz/dao/CompletedQuizDao.kt b/data/src/main/java/com/leoleo/androidapptemplate/data/quiz/dao/CompletedQuizDao.kt index 0e0f12c..3a99672 100644 --- a/data/src/main/java/com/leoleo/androidapptemplate/data/quiz/dao/CompletedQuizDao.kt +++ b/data/src/main/java/com/leoleo/androidapptemplate/data/quiz/dao/CompletedQuizDao.kt @@ -3,7 +3,6 @@ package com.leoleo.androidapptemplate.data.quiz.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.Query -import androidx.room.Update import com.leoleo.androidapptemplate.data.quiz.entity.COLUMN_TITLE import com.leoleo.androidapptemplate.data.quiz.entity.CompletedQuizEntity import com.leoleo.androidapptemplate.data.quiz.entity.TABLE_NAME_COMPLETED_QUIZ @@ -14,15 +13,9 @@ internal interface CompletedQuizDao { @Insert suspend fun insertQuizData(vararg entity: CompletedQuizEntity) - @Update - suspend fun updateQuizData(vararg entity: CompletedQuizEntity) - @Query("SELECT * FROM $TABLE_NAME_COMPLETED_QUIZ") fun observeAllCompletedQuiz(): Flow> - @Query("SELECT * FROM $TABLE_NAME_COMPLETED_QUIZ") - suspend fun selectAllCompletedQuiz(): List - @Query("SELECT * FROM $TABLE_NAME_COMPLETED_QUIZ WHERE $COLUMN_TITLE = :title") suspend fun selectCompletedQuizByTitle(title: String): List } \ No newline at end of file diff --git a/data/src/main/java/com/leoleo/androidapptemplate/data/repository/QuizRepositoryImpl.kt b/data/src/main/java/com/leoleo/androidapptemplate/data/repository/QuizRepositoryImpl.kt index 237a043..866475f 100644 --- a/data/src/main/java/com/leoleo/androidapptemplate/data/repository/QuizRepositoryImpl.kt +++ b/data/src/main/java/com/leoleo/androidapptemplate/data/repository/QuizRepositoryImpl.kt @@ -3,34 +3,22 @@ package com.leoleo.androidapptemplate.data.repository import com.leoleo.androidapptemplate.data.quiz.dao.CompletedQuizDao import com.leoleo.androidapptemplate.data.quiz.entity.CompletedQuizEntity import com.leoleo.androidapptemplate.data.quiz.entity.toModels -import com.leoleo.androidapptemplate.domain.di.IoDispatcher -import com.leoleo.androidapptemplate.domain.exception.callOrThrow import com.leoleo.androidapptemplate.domain.model.CompletedQuiz import com.leoleo.androidapptemplate.domain.repository.QuizRepository -import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import javax.inject.Inject -internal class QuizRepositoryImpl @Inject constructor( - private val dao: CompletedQuizDao, - @IoDispatcher private val dispatcher: CoroutineDispatcher, -) : QuizRepository { +internal class QuizRepositoryImpl @Inject constructor(private val dao: CompletedQuizDao) : + QuizRepository { override fun observeAllCompletedQuiz(): Flow> { - return dao.observeAllCompletedQuiz().map { it.toModels() }.flowOn(dispatcher) - } - - override suspend fun getCompletedQuizList(): List { - return callOrThrow(dispatcher) { dao.selectAllCompletedQuiz().toModels() } + return dao.observeAllCompletedQuiz().map { it.toModels() } } override suspend fun addCompleteData(title: String, completedTime: Long) { - callOrThrow(dispatcher) { - val data = CompletedQuizEntity(title = title, completedTime = completedTime) - if (dao.selectCompletedQuizByTitle(title).isEmpty()) { - dao.insertQuizData(data) - } + val data = CompletedQuizEntity(title = title, completedTime = completedTime) + if (dao.selectCompletedQuizByTitle(title).isEmpty()) { + dao.insertQuizData(data) } } } \ No newline at end of file diff --git a/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/ApiException.kt b/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/ApiException.kt new file mode 100644 index 0000000..e6919fe --- /dev/null +++ b/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/ApiException.kt @@ -0,0 +1,12 @@ +package com.leoleo.androidapptemplate.domain.exception + +sealed class ApiException : AppException() { + data class UnAuthorized(override val message: String?) : ApiException() + data class Forbidden(override val message: String?) : ApiException() + object Network : ApiException() + data class UnprocessableEntity(override val message: String?) : ApiException() + data class Unknown(override val message: String?) : ApiException() + data class NotFound(override val message: String?) : ApiException() + object Redirect : ApiException() + object Server : ApiException() +} \ No newline at end of file diff --git a/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/AppErrorType.kt b/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/AppErrorType.kt deleted file mode 100644 index 804eb15..0000000 --- a/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/AppErrorType.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.leoleo.androidapptemplate.domain.exception - -sealed class AppErrorType : Exception() { - data class UnAuthorized(override val message: String?) : AppErrorType() - data class Forbidden(override val message: String?) : AppErrorType() - object Network : AppErrorType() - data class UnprocessableEntity(override val message: String?) : AppErrorType() - data class Unknown(override val message: String?) : AppErrorType() - data class NotFound(override val message: String?) : AppErrorType() - object Redirect : AppErrorType() - object Server : AppErrorType() -} \ No newline at end of file diff --git a/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/AppException.kt b/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/AppException.kt new file mode 100644 index 0000000..8462ce8 --- /dev/null +++ b/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/AppException.kt @@ -0,0 +1,3 @@ +package com.leoleo.androidapptemplate.domain.exception + +open class AppException : Exception() \ No newline at end of file diff --git a/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/callOrThrow.kt b/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/callApiOrThrow.kt similarity index 79% rename from domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/callOrThrow.kt rename to domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/callApiOrThrow.kt index 9712b70..673a40a 100644 --- a/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/callOrThrow.kt +++ b/domain/src/main/java/com/leoleo/androidapptemplate/domain/exception/callApiOrThrow.kt @@ -4,8 +4,8 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext import kotlin.jvm.Throws -@Throws(AppErrorType::class) -suspend fun callOrThrow( +@Throws(ApiException::class) +suspend fun callApiOrThrow( dispatcher: CoroutineDispatcher, apiCall: suspend () -> T ): T { @@ -14,7 +14,7 @@ suspend fun callOrThrow( apiCall.invoke() } catch (e: Throwable) { // TODO: アプリ固有のExceptionをthrowする - throw AppErrorType.Unknown(e.message) + throw ApiException.Unknown(e.message) } } } \ No newline at end of file diff --git a/domain/src/main/java/com/leoleo/androidapptemplate/domain/repository/QuizRepository.kt b/domain/src/main/java/com/leoleo/androidapptemplate/domain/repository/QuizRepository.kt index 66b0565..d5d9ff0 100644 --- a/domain/src/main/java/com/leoleo/androidapptemplate/domain/repository/QuizRepository.kt +++ b/domain/src/main/java/com/leoleo/androidapptemplate/domain/repository/QuizRepository.kt @@ -5,6 +5,5 @@ import kotlinx.coroutines.flow.Flow interface QuizRepository { fun observeAllCompletedQuiz(): Flow> - suspend fun getCompletedQuizList(): List suspend fun addCompleteData(title: String, completedTime: Long) } \ No newline at end of file