From 8351e5dca5832b780c3b640399175dde398e253a Mon Sep 17 00:00:00 2001 From: chanho0908 Date: Tue, 20 Jan 2026 18:31:13 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20JSON=20=EC=A7=81=EB=A0=AC=ED=99=94?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=9C=A0=ED=8B=B8=EB=A6=AC=ED=8B=B0?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remote/DefaultRemoteAnswerDataSource.kt | 14 +++++++------- .../exam/remote/DefaultRemoteExamDataSource.kt | 14 +++++++------- .../remote/DefaultRemoteQuestionDataSource.kt | 16 ++++++++-------- .../com/peto/droidmorning/data/util/JsonUtil.kt | 13 +++++++++++++ 4 files changed, 35 insertions(+), 22 deletions(-) create mode 100644 data/src/commonMain/kotlin/com/peto/droidmorning/data/util/JsonUtil.kt diff --git a/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/answer/remote/DefaultRemoteAnswerDataSource.kt b/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/answer/remote/DefaultRemoteAnswerDataSource.kt index 6c48786..1ec0a78 100644 --- a/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/answer/remote/DefaultRemoteAnswerDataSource.kt +++ b/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/answer/remote/DefaultRemoteAnswerDataSource.kt @@ -9,8 +9,8 @@ import com.peto.droidmorning.data.model.request.RpcDefaultRequest import com.peto.droidmorning.data.model.request.UpdateAnswerRequest import com.peto.droidmorning.data.model.response.AnswerHistoryResponse import com.peto.droidmorning.data.model.response.CurrentAnswerResponse +import com.peto.droidmorning.data.util.JsonUtil import kotlinx.serialization.builtins.ListSerializer -import kotlinx.serialization.json.Json import kotlinx.serialization.json.encodeToJsonElement import kotlinx.serialization.json.jsonObject @@ -18,7 +18,7 @@ class DefaultRemoteAnswerDataSource( private val postgrest: PostgrestClient, private val authClient: AuthClient, ) : RemoteAnswerDataSource { - private val json = Json { ignoreUnknownKeys = true } + private val json = JsonUtil.defaultJson override suspend fun fetchCurrentAnswer(questionId: Long): CurrentAnswerResponse? = postgrest @@ -30,10 +30,10 @@ class DefaultRemoteAnswerDataSource( PostgrestFilter(QUESTION_ID_COLUMN, questionId), ), ).let { data -> - json - .decodeFromString( - ListSerializer(CurrentAnswerResponse.serializer()), + JsonUtil + .decode( data, + ListSerializer(CurrentAnswerResponse.serializer()), ).firstOrNull() } @@ -48,9 +48,9 @@ class DefaultRemoteAnswerDataSource( ), order = PostgrestOrder(CREATED_AT_COLUMN, descending = true), ).let { data -> - json.decodeFromString( - ListSerializer(AnswerHistoryResponse.serializer()), + JsonUtil.decode( data, + ListSerializer(AnswerHistoryResponse.serializer()), ) } diff --git a/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/exam/remote/DefaultRemoteExamDataSource.kt b/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/exam/remote/DefaultRemoteExamDataSource.kt index 8bc294a..aff0406 100644 --- a/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/exam/remote/DefaultRemoteExamDataSource.kt +++ b/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/exam/remote/DefaultRemoteExamDataSource.kt @@ -7,11 +7,11 @@ import com.peto.droidmorning.core.network.PostgrestOrder import com.peto.droidmorning.data.model.request.toRequest import com.peto.droidmorning.data.model.response.ExamDetailResponse import com.peto.droidmorning.data.model.response.ExamHistoryResponse +import com.peto.droidmorning.data.util.JsonUtil import com.peto.droidmorning.domain.model.category.Category import com.peto.droidmorning.domain.model.exam.Exams import kotlinx.serialization.builtins.ListSerializer import kotlinx.serialization.builtins.serializer -import kotlinx.serialization.json.Json import kotlinx.serialization.json.encodeToJsonElement import kotlinx.serialization.json.jsonObject @@ -19,7 +19,7 @@ class DefaultRemoteExamDataSource( private val postgrest: PostgrestClient, private val authClient: AuthClient, ) : RemoteExamDataSource { - private val json = Json { ignoreUnknownKeys = true } + private val json = JsonUtil.defaultJson override suspend fun submitExam( exam: Exams, @@ -33,7 +33,7 @@ class DefaultRemoteExamDataSource( .encodeToJsonElement(exam.toRequest(uid(), categories)) .jsonObject, ).let { data -> - json.decodeFromString(Long.serializer(), data) + JsonUtil.decode(data, Long.serializer()) } override suspend fun fetchExamHistory(): List = @@ -43,9 +43,9 @@ class DefaultRemoteExamDataSource( filters = listOf(PostgrestFilter(USER_ID_COLUMN, uid())), order = PostgrestOrder(UPDATED_AT_COLUMN, descending = true), ).let { data -> - json.decodeFromString( - ListSerializer(ExamHistoryResponse.serializer()), + JsonUtil.decode( data, + ListSerializer(ExamHistoryResponse.serializer()), ) } @@ -58,9 +58,9 @@ class DefaultRemoteExamDataSource( .encodeToJsonElement(mapOf(RPC_PARAM_EXAM_ID to examId)) .jsonObject, ).let { data -> - json.decodeFromString( - ListSerializer(ExamDetailResponse.serializer()), + JsonUtil.decode( data, + ListSerializer(ExamDetailResponse.serializer()), ) } diff --git a/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/question/remote/DefaultRemoteQuestionDataSource.kt b/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/question/remote/DefaultRemoteQuestionDataSource.kt index 62a0202..ce66a21 100644 --- a/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/question/remote/DefaultRemoteQuestionDataSource.kt +++ b/data/src/commonMain/kotlin/com/peto/droidmorning/data/datasource/question/remote/DefaultRemoteQuestionDataSource.kt @@ -8,8 +8,8 @@ import com.peto.droidmorning.data.model.request.LikeRequest import com.peto.droidmorning.data.model.response.CategoryCountResponse import com.peto.droidmorning.data.model.response.ExamQuestionResponse import com.peto.droidmorning.data.model.response.QuestionResponse +import com.peto.droidmorning.data.util.JsonUtil import kotlinx.serialization.builtins.ListSerializer -import kotlinx.serialization.json.Json import kotlinx.serialization.json.encodeToJsonElement import kotlinx.serialization.json.jsonObject @@ -17,7 +17,7 @@ class DefaultRemoteQuestionDataSource( private val postgrest: PostgrestClient, private val authClient: AuthClient, ) : RemoteQuestionDataSource { - private val json = Json { ignoreUnknownKeys = true } + private val json = JsonUtil.defaultJson override suspend fun fetchExamQuestions(): List = postgrest @@ -28,9 +28,9 @@ class DefaultRemoteQuestionDataSource( .encodeToJsonElement(mapOf(RPC_FETCH_QUESTIONS_PARAM_NAME to uid())) .jsonObject, ).let { data -> - json.decodeFromString( - ListSerializer(QuestionResponse.serializer()), + JsonUtil.decode( data, + ListSerializer(QuestionResponse.serializer()), ) } @@ -46,9 +46,9 @@ class DefaultRemoteQuestionDataSource( .encodeToJsonElement(ExamQuestionRequest(category, count)) .jsonObject, ).let { data -> - json.decodeFromString( - ListSerializer(ExamQuestionResponse.serializer()), + JsonUtil.decode( data, + ListSerializer(ExamQuestionResponse.serializer()), ) } @@ -77,9 +77,9 @@ class DefaultRemoteQuestionDataSource( postgrest .rpc(RPC_CATEGORY_COUNT) .let { data -> - json.decodeFromString( - ListSerializer(CategoryCountResponse.serializer()), + JsonUtil.decode( data, + ListSerializer(CategoryCountResponse.serializer()), ) } diff --git a/data/src/commonMain/kotlin/com/peto/droidmorning/data/util/JsonUtil.kt b/data/src/commonMain/kotlin/com/peto/droidmorning/data/util/JsonUtil.kt new file mode 100644 index 0000000..52b4c02 --- /dev/null +++ b/data/src/commonMain/kotlin/com/peto/droidmorning/data/util/JsonUtil.kt @@ -0,0 +1,13 @@ +package com.peto.droidmorning.data.util + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.json.Json + +object JsonUtil { + val defaultJson: Json = Json { ignoreUnknownKeys = true } + + fun decode( + data: String, + serializer: KSerializer, + ): T = defaultJson.decodeFromString(serializer, data) +}