From d90e6b057b0caf2209683f0ec70654ed146bed0f Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sun, 18 Jun 2023 23:39:46 +0900 Subject: [PATCH] [refactor] : #83 BaseResult, AutoApiResponse Complete --- .../myongsikandroid/base/ApiResponse.kt | 13 ----------- .../myongsikandroid/base/BaseResult.kt | 8 +++++++ .../myongsikandroid/base/FlowResponse.kt | 23 +++++++++++-------- 3 files changed, 22 insertions(+), 22 deletions(-) delete mode 100644 app/src/main/java/com/myongsik/myongsikandroid/base/ApiResponse.kt create mode 100644 app/src/main/java/com/myongsik/myongsikandroid/base/BaseResult.kt diff --git a/app/src/main/java/com/myongsik/myongsikandroid/base/ApiResponse.kt b/app/src/main/java/com/myongsik/myongsikandroid/base/ApiResponse.kt deleted file mode 100644 index 2e96808b..00000000 --- a/app/src/main/java/com/myongsik/myongsikandroid/base/ApiResponse.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.myongsik.myongsikandroid.base - -sealed class ApiResponse { - object Loading: ApiResponse() - - data class Success( - val data: T - ): ApiResponse() - - data class Failure( - val code: String, - ): ApiResponse() -} diff --git a/app/src/main/java/com/myongsik/myongsikandroid/base/BaseResult.kt b/app/src/main/java/com/myongsik/myongsikandroid/base/BaseResult.kt new file mode 100644 index 00000000..d55be529 --- /dev/null +++ b/app/src/main/java/com/myongsik/myongsikandroid/base/BaseResult.kt @@ -0,0 +1,8 @@ +package com.myongsik.myongsikandroid.base + +sealed class BaseResult { + + data class Success(val data: T) : BaseResult() + + data class Error(val errorCode: Int) : BaseResult() +} diff --git a/app/src/main/java/com/myongsik/myongsikandroid/base/FlowResponse.kt b/app/src/main/java/com/myongsik/myongsikandroid/base/FlowResponse.kt index 5470a9a3..98014261 100644 --- a/app/src/main/java/com/myongsik/myongsikandroid/base/FlowResponse.kt +++ b/app/src/main/java/com/myongsik/myongsikandroid/base/FlowResponse.kt @@ -1,21 +1,26 @@ package com.myongsik.myongsikandroid.base +import com.myongsik.myongsikandroid.util.ErrorConstant import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow +import retrofit2.HttpException import retrofit2.Response +import java.net.SocketException -fun safeApiCall(call: suspend () -> Response): Flow> = flow { - emit(ApiResponse.Loading) - +fun safeApiCall(call: suspend () -> Response): Flow> = flow { try { val response = call() - if (response.isSuccessful) { - emit(ApiResponse.Success(response.body()!!)) + val body = response.body() + if (response.isSuccessful && body != null) { + emit(BaseResult.Success(body)) } else { - emit(ApiResponse.Failure(response.code().toString())) + emit(BaseResult.Error(response.code())) + } + } catch (e: Exception) { + when (e) { + is SocketException -> emit(BaseResult.Error(ErrorConstant.EVENT_SOCKET_EXCEPTION)) + is HttpException -> emit(BaseResult.Error(ErrorConstant.EVENT_HTTP_EXCEPTION)) + else -> emit(BaseResult.Error(ErrorConstant.EVENT_UNKNOWN_HOST_EXCEPTION)) } - } catch (e: Exception) { - e.printStackTrace() - emit(ApiResponse.Failure(e.message ?: e.toString())) } } \ No newline at end of file