diff --git a/app/src/main/java/com/konkuk/medicarecall/data/api/elders/HealthService.kt b/app/src/main/java/com/konkuk/medicarecall/data/api/elders/HealthService.kt index e77f8962..256f92d3 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/api/elders/HealthService.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/api/elders/HealthService.kt @@ -1,6 +1,7 @@ package com.konkuk.medicarecall.data.api.elders import com.konkuk.medicarecall.data.dto.response.HealthResponseDto +import de.jensklingenberg.ktorfit.Response import de.jensklingenberg.ktorfit.http.GET import de.jensklingenberg.ktorfit.http.Path import de.jensklingenberg.ktorfit.http.Query @@ -10,5 +11,5 @@ interface HealthService { suspend fun getDailyHealth( @Path("elderId") elderId: Int, @Query("date") date: String, - ): HealthResponseDto + ): Response } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repository/HomeRepository.kt b/app/src/main/java/com/konkuk/medicarecall/data/repository/HomeRepository.kt index 6c794d22..6df16209 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repository/HomeRepository.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repository/HomeRepository.kt @@ -4,5 +4,5 @@ import com.konkuk.medicarecall.data.dto.response.HomeResponseDto interface HomeRepository { suspend fun requestImmediateCareCall(elderId: Int, careCallOption: String): Result - suspend fun getHomeSummary(elderId: Int): HomeResponseDto + suspend fun getHomeSummary(elderId: Int): Result } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderRegisterRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderRegisterRepositoryImpl.kt index 44df25d8..d9ef1f00 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderRegisterRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderRegisterRepositoryImpl.kt @@ -7,9 +7,10 @@ import com.konkuk.medicarecall.data.dto.request.ElderHealthRegisterRequestDto import com.konkuk.medicarecall.data.dto.request.ElderRegisterRequestDto import com.konkuk.medicarecall.data.dto.response.ElderBulkRegisterResponseDto import com.konkuk.medicarecall.data.dto.response.ElderRegisterResponseDto -import com.konkuk.medicarecall.data.exception.HttpException import com.konkuk.medicarecall.data.mapper.ElderHealthMapper import com.konkuk.medicarecall.data.repository.ElderRegisterRepository +import com.konkuk.medicarecall.data.util.handleNullableResponse +import com.konkuk.medicarecall.data.util.handleResponse import com.konkuk.medicarecall.ui.common.util.formatAsDate import com.konkuk.medicarecall.ui.model.ElderData import com.konkuk.medicarecall.ui.model.ElderHealthData @@ -22,10 +23,9 @@ import org.koin.core.annotation.Single @Single class ElderRegisterRepositoryImpl( private val elderRegisterService: ElderRegisterService, -// private val elderIdRepository: ElderIdRepository, ) : ElderRegisterRepository { - private suspend fun postElder(elderData: ElderData): ElderRegisterResponseDto { - val response = elderRegisterService.postElder( + private suspend fun postElder(elderData: ElderData): ElderRegisterResponseDto = + elderRegisterService.postElder( ElderRegisterRequestDto( name = elderData.name, birthDate = elderData.birthDate.formatAsDate(), @@ -34,16 +34,10 @@ class ElderRegisterRepositoryImpl( relationship = RelationshipType.entries.find { it.displayName == elderData.relationship }!!, residenceType = ElderResidenceType.entries.find { it.displayName == elderData.livingType }!!, ), - ) - if (response.isSuccessful) { - return response.body() ?: error("Response body is null") - } else { - throw HttpException(response) // Exception Type? - } - } + ).handleResponse() override suspend fun postElderHealthInfo(id: Int, elderHealthData: ElderHealthData) { - val response = elderRegisterService.postElderHealthInfo( + elderRegisterService.postElderHealthInfo( id, ElderHealthRegisterRequestDto( diseaseNames = elderHealthData.diseaseNames, @@ -52,14 +46,11 @@ class ElderRegisterRepositoryImpl( HealthIssueType.entries.find { it.displayName == notes }!! }, ), - ) - if (!response.isSuccessful) { - throw HttpException(response) // Exception Type? - } + ).handleNullableResponse() } override suspend fun postElderBulk(elderList: List): Result = runCatching { - val response = elderRegisterService.postElderBulk( + elderRegisterService.postElderBulk( ElderBulkRegisterRequestDto( elders = elderList.map { elderData -> ElderBulkRegisterRequestDto.ElderInfo( @@ -72,16 +63,11 @@ class ElderRegisterRepositoryImpl( ) }, ), - ) - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - throw HttpException(response) - } + ).handleResponse() } override suspend fun postElderHealthInfoBulk(elderHealthList: List): Result = runCatching { - val response = elderRegisterService.postElderHealthInfoBulk( + elderRegisterService.postElderHealthInfoBulk( ElderBulkHealthInfoRequestDto( healthInfos = elderHealthList.map { elderHealthData -> ElderBulkHealthInfoRequestDto.HealthInfo( @@ -99,9 +85,6 @@ class ElderRegisterRepositoryImpl( ) }, ), - ) - if (!response.isSuccessful) { - throw HttpException(response) - } + ).handleNullableResponse() } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersHealthInfoRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersHealthInfoRepositoryImpl.kt index c6c984c2..7424945d 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersHealthInfoRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersHealthInfoRepositoryImpl.kt @@ -6,8 +6,9 @@ import com.konkuk.medicarecall.data.api.elders.EldersInfoService import com.konkuk.medicarecall.data.dto.request.ElderHealthRegisterRequestDto import com.konkuk.medicarecall.data.dto.request.MedicationSchedule import com.konkuk.medicarecall.data.dto.response.EldersHealthResponseDto -import com.konkuk.medicarecall.data.exception.HttpException import com.konkuk.medicarecall.data.repository.EldersHealthInfoRepository +import com.konkuk.medicarecall.data.util.handleNullableResponse +import com.konkuk.medicarecall.data.util.handleResponse import com.konkuk.medicarecall.ui.type.MedicationTimeType import org.koin.core.annotation.Single @@ -32,48 +33,24 @@ class EldersHealthInfoRepositoryImpl( return runCatching { Log.d("Cache", "Fetching new health info from server") - val response = elderInfoService.getElderHealthInfo() - if (response.isSuccessful) { - val body = response.body() - ?: error("Response body is null(eldersHealthInfo)") - cachedHealthInfo = body // 캐시에 저장 - body - } else { - throw HttpException(response) - } + val body = elderInfoService.getElderHealthInfo().handleResponse() + cachedHealthInfo = body // 캐시에 저장 + body } } override suspend fun updateHealthInfo( elderInfo: EldersHealthResponseDto, - ): Result = - runCatching { - val medicationSchedule = elderInfo.medications.toMedicationSchedules() - val elder = ElderHealthRegisterRequestDto( - diseaseNames = elderInfo.diseases, - medicationSchedules = medicationSchedule, - notes = elderInfo.notes, - ) - val response = elderRegisterService.postElderHealthInfo( - elderInfo.elderId, - elder, - ) - if (response.isSuccessful) { - refresh() - Log.d( - "EldersHealthInfoRepository", - "Health info updated successfully for elderId: ${elderInfo.elderId}", - ) - } else { - val errorBody = - response.errorBody()?.toString() ?: "Unknown error(updating health info)" - Log.e( - "EldersHealthInfoRepository", - "Failed to update health info: ${response.code} - $errorBody", - ) - throw HttpException(response) - } - } + ): Result = runCatching { + val medicationSchedule = elderInfo.medications.toMedicationSchedules() + val elder = ElderHealthRegisterRequestDto( + diseaseNames = elderInfo.diseases, + medicationSchedules = medicationSchedule, + notes = elderInfo.notes, + ) + elderRegisterService.postElderHealthInfo(elderInfo.elderId, elder).handleNullableResponse() + refresh() + } fun Map>.toMedicationSchedules(): List { val timesByMed = linkedMapOf>() diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersInfoRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersInfoRepositoryImpl.kt index 2966fd57..1774caba 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersInfoRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersInfoRepositoryImpl.kt @@ -6,46 +6,34 @@ import com.konkuk.medicarecall.data.dto.response.CallTimeResponseDto import com.konkuk.medicarecall.data.dto.response.EldersInfoResponseDto import com.konkuk.medicarecall.data.dto.response.EldersSubscriptionResponseDto import com.konkuk.medicarecall.data.repository.EldersInfoRepository +import com.konkuk.medicarecall.data.util.handleNullableResponse +import com.konkuk.medicarecall.data.util.handleResponse import com.konkuk.medicarecall.ui.common.util.formatAsDate import com.konkuk.medicarecall.ui.model.ElderData import com.konkuk.medicarecall.ui.type.ElderResidenceType import com.konkuk.medicarecall.ui.type.GenderType import com.konkuk.medicarecall.ui.type.RelationshipType import org.koin.core.annotation.Single -import com.konkuk.medicarecall.data.exception.HttpException @Single class EldersInfoRepositoryImpl( private val eldersInfoService: EldersInfoService, ) : EldersInfoRepository { override suspend fun getElders(): Result> = runCatching { - val response = eldersInfoService.getElders() - if (response.isSuccessful) { - response.body() - ?: error("Response body is null(eldersPersonalInfo)") - } else { - val errorBody = response.errorBody()?.toString() ?: "Unknown error(eldersPersonalInfo)" - throw HttpException(response) - } + eldersInfoService.getElders().handleResponse() } override suspend fun getSubscriptions(): Result> = runCatching { - val response = eldersInfoService.getSubscriptions() - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - val errorBody = response.errorBody()?.toString() ?: "Unknown error" - throw HttpException(response) - } + eldersInfoService.getSubscriptions().handleResponse() } override suspend fun updateElder( id: Int, request: ElderData, ): Result = runCatching { - val response = eldersInfoService.updateElder( - id, - ElderRegisterRequestDto( + eldersInfoService.updateElder( + elderId = id, + request = ElderRegisterRequestDto( request.name, birthDate = request.birthDate.formatAsDate(), gender = if (request.gender) GenderType.MALE else GenderType.FEMALE, @@ -53,31 +41,14 @@ class EldersInfoRepositoryImpl( relationship = RelationshipType.entries.find { it.displayName == request.relationship }!!, residenceType = ElderResidenceType.entries.find { it.displayName == request.livingType }!!, ), - ) - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - throw HttpException(response) - } + ).handleResponse() } override suspend fun deleteElder(id: Int): Result = runCatching { - val response = eldersInfoService.deleteElderSettings(id) - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - val errorBody = response.errorBody()?.toString() ?: "Unknown error" - throw HttpException(response) - } + eldersInfoService.deleteElderSettings(id).handleNullableResponse() } override suspend fun getCareCallTimes(id: Int): Result = runCatching { - val response = eldersInfoService.getCallTimes(id) - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - val errorBody = response.errorBody()?.toString() ?: "Unknown error" - throw HttpException(response) - } + eldersInfoService.getCallTimes(id).handleResponse() } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/GlucoseRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/GlucoseRepositoryImpl.kt index 36c17534..7400678e 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/GlucoseRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/GlucoseRepositoryImpl.kt @@ -3,6 +3,7 @@ package com.konkuk.medicarecall.data.repositoryimpl import com.konkuk.medicarecall.data.api.elders.GlucoseService import com.konkuk.medicarecall.data.dto.response.GlucoseResponseDto import com.konkuk.medicarecall.data.repository.GlucoseRepository +import com.konkuk.medicarecall.data.util.handleResponse import org.koin.core.annotation.Single @Single @@ -13,14 +14,7 @@ class GlucoseRepositoryImpl( elderId: Int, counter: Int, type: String, - ): Result = - runCatching { - val response = glucoseService.getGlucoseGraph(elderId, counter, type) - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { -// val errorBody = response.errorBody()?.toString() ?: "Unknown error" - error("Failed to fetch glucose graph: ${response.code}") - } - } + ): Result = runCatching { + glucoseService.getGlucoseGraph(elderId, counter, type).handleResponse() + } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HealthRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HealthRepositoryImpl.kt index 6a44e76d..8e69707e 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HealthRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HealthRepositoryImpl.kt @@ -2,6 +2,7 @@ package com.konkuk.medicarecall.data.repositoryimpl import com.konkuk.medicarecall.data.api.elders.HealthService import com.konkuk.medicarecall.data.repository.HealthRepository +import com.konkuk.medicarecall.data.util.handleResponse import com.konkuk.medicarecall.ui.feature.homedetail.statehealth.viewmodel.HealthUiState import org.koin.core.annotation.Single import java.time.LocalDate @@ -12,7 +13,7 @@ class HealthRepositoryImpl( ) : HealthRepository { override suspend fun getHealthUiState(elderId: Int, date: LocalDate): Result = runCatching { - val response = healthService.getDailyHealth(elderId, date.toString()) + val response = healthService.getDailyHealth(elderId, date.toString()).handleResponse() HealthUiState( symptoms = response.symptomList.orEmpty(), symptomAnalysis = response.analysisComment.orEmpty(), diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HomeRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HomeRepositoryImpl.kt index c7a1de9a..aaa2f026 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HomeRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/HomeRepositoryImpl.kt @@ -1,10 +1,11 @@ package com.konkuk.medicarecall.data.repositoryimpl -import android.util.Log import com.konkuk.medicarecall.data.api.elders.HomeService import com.konkuk.medicarecall.data.dto.request.ImmediateCallRequestDto import com.konkuk.medicarecall.data.dto.response.HomeResponseDto import com.konkuk.medicarecall.data.repository.HomeRepository +import com.konkuk.medicarecall.data.util.handleNullableResponse +import com.konkuk.medicarecall.data.util.handleResponse import org.koin.core.annotation.Single @Single @@ -12,44 +13,15 @@ class HomeRepositoryImpl( private val homeService: HomeService, ) : HomeRepository { override suspend fun requestImmediateCareCall( - elderId: Int, careCallOption: String, + elderId: Int, + careCallOption: String, ): Result = runCatching { - val response = homeService.requestImmediateCareCall( + homeService.requestImmediateCareCall( ImmediateCallRequestDto(elderId, careCallOption), - ) - if (response.isSuccessful) { - Log.d( - "httplog", - "전화 걸림, 어르신: $Int, 시간: $careCallOption", - ) - } else { - Log.e( - "httplog", - "전화 걸기 실패: ${response.code}", - ) - error("Immediate care call failed with code=${response.code}") - } + ).handleNullableResponse() } - override suspend fun getHomeSummary(elderId: Int): HomeResponseDto { - // DTO만 반환 - Log.d("HomeRepo", "[REQ] elderId=$elderId") - val response = homeService.getHomeSummary(elderId) - - if (!response.isSuccessful) { - error("Home summary fetch failed with code=${response.code}") - } - - val res = response.body() - ?: error("Home summary response body is null") - - val medicationStatus = res.medicationStatus - val meds = medicationStatus?.medicationList.orEmpty() - Log.d( - "HomeRepo", - "[RES] elderName=${res.elderName}, medsCount=${meds.size}, " + - "totalTaken=${medicationStatus?.totalTaken}, totalGoal=${medicationStatus?.totalGoal}", - ) - return res + override suspend fun getHomeSummary(elderId: Int): Result = runCatching { + homeService.getHomeSummary(elderId).handleResponse() } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/MemberRegisterRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/MemberRegisterRepositoryImpl.kt index cbd57225..9e0c5039 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/MemberRegisterRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/MemberRegisterRepositoryImpl.kt @@ -4,7 +4,7 @@ import com.konkuk.medicarecall.data.api.member.MemberRegisterService import com.konkuk.medicarecall.data.dto.request.MemberRegisterRequestDto import com.konkuk.medicarecall.data.dto.response.MemberTokenResponseDto import com.konkuk.medicarecall.data.repository.MemberRegisterRepository -import com.konkuk.medicarecall.data.exception.HttpException +import com.konkuk.medicarecall.data.util.handleResponse import com.konkuk.medicarecall.ui.type.GenderType import org.koin.core.annotation.Single @@ -19,22 +19,10 @@ class MemberRegisterRepositoryImpl( birthDate: String, gender: GenderType, fcmToken: String, - ): Result = - runCatching { - val response = memberRegisterService.postMemberRegister( - "Bearer $token", - MemberRegisterRequestDto( - name, - birthDate, - gender, - fcmToken, - ), - ) - - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - throw HttpException(response) - } - } + ): Result = runCatching { + memberRegisterService.postMemberRegister( + "Bearer $token", + MemberRegisterRequestDto(name, birthDate, gender, fcmToken), + ).handleResponse() + } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NaverPayRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NaverPayRepositoryImpl.kt index a647c1e1..8873aec3 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NaverPayRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NaverPayRepositoryImpl.kt @@ -3,8 +3,8 @@ package com.konkuk.medicarecall.data.repositoryimpl import com.konkuk.medicarecall.data.api.payments.NaverPayService import com.konkuk.medicarecall.data.dto.request.ReservePayRequestDto import com.konkuk.medicarecall.data.dto.response.ReservePayResponseDto -import com.konkuk.medicarecall.data.exception.HttpException import com.konkuk.medicarecall.data.repository.NaverPayRepository +import com.konkuk.medicarecall.data.util.handleResponse import org.koin.core.annotation.Single @Single @@ -15,11 +15,6 @@ class NaverPayRepositoryImpl( override suspend fun postReserveInfo( request: ReservePayRequestDto, ): Result = runCatching { - val response = naverPayService.postReservePay(request) - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - throw HttpException(response) - } + naverPayService.postReservePay(request).handleResponse() } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NoticeRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NoticeRepositoryImpl.kt index 23ebb225..75d27590 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NoticeRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NoticeRepositoryImpl.kt @@ -1,33 +1,16 @@ package com.konkuk.medicarecall.data.repositoryimpl -import android.util.Log import com.konkuk.medicarecall.data.api.notice.NoticeService import com.konkuk.medicarecall.data.dto.response.NoticesResponseDto import com.konkuk.medicarecall.data.repository.NoticeRepository +import com.konkuk.medicarecall.data.util.handleResponse import org.koin.core.annotation.Single @Single class NoticeRepositoryImpl( private val noticeService: NoticeService, ) : NoticeRepository { - override suspend fun getNotices(): Result> { - Log.d("NoticeRepository", "공지사항 불러오기 시작(getNotices() 호출됨)") - return runCatching { - val response = noticeService.getNotices() - Log.d("NoticeRepository", "응답 수신됨: isSuccessful = ${response.isSuccessful}") - Log.d("NoticeRepository", "공지사항 응답 코드: ${response.code}") - - if (response.isSuccessful) { - val body = response.body() ?: error("Response body is null") - Log.d("NoticeRepository", "응답 바디: ${body.size}개") - body - } else { - val error = response.errorBody()?.toString() - Log.e("NoticeRepository", "응답 실패: $error") - error("Error fetching notices: $error") - } - }.onFailure { - Log.e("NoticeRepository", "공지사항 불러오기 실패", it) - } + override suspend fun getNotices(): Result> = runCatching { + noticeService.getNotices().handleResponse() } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SetCallRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SetCallRepositoryImpl.kt index 60a5ee13..0d4ef438 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SetCallRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SetCallRepositoryImpl.kt @@ -3,8 +3,8 @@ package com.konkuk.medicarecall.data.repositoryimpl import android.util.Log import com.konkuk.medicarecall.data.api.elders.SetCallService import com.konkuk.medicarecall.data.dto.request.SetCallTimeRequestDto -import com.konkuk.medicarecall.data.exception.HttpException import com.konkuk.medicarecall.data.repository.SetCallRepository +import com.konkuk.medicarecall.data.util.handleNullableResponse import com.konkuk.medicarecall.ui.model.CallTimes import org.koin.core.annotation.Single @@ -15,15 +15,9 @@ class SetCallRepositoryImpl( override suspend fun saveForElder( elderId: Int, body: SetCallTimeRequestDto, - ): Result = - runCatching { - val response = service.saveCareCallTimes(elderId, body) - if (!response.isSuccessful) { - Log.e("SetCallRepository", "HTTP ${response.code} ${response.message}") - Log.e("SetCallRepository", "ErrorBody=${response.errorBody()?.toString()}") - throw HttpException(response) - } - } + ): Result = runCatching { + service.saveCareCallTimes(elderId, body).handleNullableResponse() + } // 오버로드: UI에서 CallTimes만 넘기면 레포가 변환까지 처리 override suspend fun saveForElder( diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SubscribeRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SubscribeRepositoryImpl.kt index 3356bab3..2aef9178 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SubscribeRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SubscribeRepositoryImpl.kt @@ -1,33 +1,16 @@ package com.konkuk.medicarecall.data.repositoryimpl -import android.util.Log import com.konkuk.medicarecall.data.api.elders.SubscribeService import com.konkuk.medicarecall.data.dto.response.EldersSubscriptionResponseDto -import com.konkuk.medicarecall.data.exception.HttpException import com.konkuk.medicarecall.data.repository.SubscribeRepository +import com.konkuk.medicarecall.data.util.handleResponse import org.koin.core.annotation.Single @Single class SubscribeRepositoryImpl( private val subscribeService: SubscribeService, ) : SubscribeRepository { - override suspend fun getSubscriptions(): Result> { - Log.d("SubscribeRepository", "구독 정보 불러오기 시작(getSubscriptions() 호출됨)") - return runCatching { - val response = subscribeService.getElderSubscriptions() - Log.d("SubscribeRepository", "응답 수신됨: isSuccessful = ${response.isSuccessful}") - Log.d("SubscribeRepository", "구독 정보 응답 코드: ${response.code}") - if (response.isSuccessful) { - val body = response.body() ?: throw NullPointerException("Response body is null") - Log.d("SubscribeRepository", "응답 바디: ${body.size}개") - body - } else { - val error = response.errorBody()?.toString() - Log.e("SubscribeRepository", "응답 실패: $error") - throw HttpException(response) - } - }.onFailure { - Log.e("SubscribeRepository", "구독 정보 불러오기 실패", it) - } + override suspend fun getSubscriptions(): Result> = runCatching { + subscribeService.getElderSubscriptions().handleResponse() } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UpdateElderInfoRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UpdateElderInfoRepositoryImpl.kt index 64c4bad8..bc2e9238 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UpdateElderInfoRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UpdateElderInfoRepositoryImpl.kt @@ -1,11 +1,11 @@ package com.konkuk.medicarecall.data.repositoryimpl -import android.util.Log import com.konkuk.medicarecall.data.api.elders.EldersInfoService import com.konkuk.medicarecall.data.dto.request.ElderRegisterRequestDto import com.konkuk.medicarecall.data.repository.UpdateElderInfoRepository +import com.konkuk.medicarecall.data.util.handleNullableResponse +import com.konkuk.medicarecall.data.util.handleResponse import org.koin.core.annotation.Single -import com.konkuk.medicarecall.data.exception.HttpException @Single class UpdateElderInfoRepositoryImpl( @@ -13,22 +13,10 @@ class UpdateElderInfoRepositoryImpl( ) : UpdateElderInfoRepository { override suspend fun updateElderInfo(id: Int, request: ElderRegisterRequestDto): Result = runCatching { - val response = eldersInfoService.updateElder(id, request) - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - throw HttpException(response) - } + eldersInfoService.updateElder(id, request).handleResponse() } override suspend fun deleteElder(id: Int): Result = runCatching { - val response = eldersInfoService.deleteElderSettings(id) - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - val body = response.errorBody()?.toString().orEmpty() - Log.e("DeleteElder", "HTTP ${response.code} body=$body") - throw HttpException(response) - } + eldersInfoService.deleteElderSettings(id).handleNullableResponse() } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UserRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UserRepositoryImpl.kt index 1e399ccc..626abe42 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UserRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UserRepositoryImpl.kt @@ -1,13 +1,13 @@ package com.konkuk.medicarecall.data.repositoryimpl -import android.util.Log import com.konkuk.medicarecall.data.api.auth.AuthService import com.konkuk.medicarecall.data.api.member.SettingService import com.konkuk.medicarecall.data.dto.response.MyInfoResponseDto import com.konkuk.medicarecall.data.repository.DataStoreRepository import com.konkuk.medicarecall.data.repository.UserRepository +import com.konkuk.medicarecall.data.util.handleNullableResponse +import com.konkuk.medicarecall.data.util.handleResponse import org.koin.core.annotation.Single -import com.konkuk.medicarecall.data.exception.HttpException @Single class UserRepositoryImpl( @@ -16,37 +16,17 @@ class UserRepositoryImpl( private val tokenStore: DataStoreRepository, ) : UserRepository { override suspend fun getMyInfo() = runCatching { - val response = settingService.getMyInfo() - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - val errorBody = response.errorBody()?.toString() ?: "Unknown error" - throw HttpException(response) - } + settingService.getMyInfo().handleResponse() } override suspend fun updateMyInfo(userUpdateRequestDto: MyInfoResponseDto) = runCatching { - Log.d("UserRepository", "updateMyInfo() 진입: $userUpdateRequestDto") - val response = settingService.updateMyInfo(userUpdateRequestDto) - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - throw HttpException(response) - } + settingService.updateMyInfo(userUpdateRequestDto).handleResponse() } - override suspend fun logout(): Result { - val result = runCatching { - val refresh = tokenStore.getRefreshToken() ?: error("Refresh token is null") - val response = authService.logout("Bearer $refresh") - if (!response.isSuccessful) { - val errorBody = response.errorBody()?.toString() ?: "Unknown error" - throw HttpException(response) - } - Unit - } + override suspend fun logout(): Result = runCatching { + val refresh = tokenStore.getRefreshToken() ?: error("Refresh token is null") + authService.logout("Bearer $refresh").handleNullableResponse() // 성공/실패와 무관하게 로컬 토큰 제거(보안/UX 측면에서 권장) tokenStore.clearTokens() - return result } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/VerificationRepositoryImpl.kt b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/VerificationRepositoryImpl.kt index 3f801cb6..98404c1b 100644 --- a/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/VerificationRepositoryImpl.kt +++ b/app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/VerificationRepositoryImpl.kt @@ -4,8 +4,8 @@ import com.konkuk.medicarecall.data.api.auth.AuthService import com.konkuk.medicarecall.data.dto.request.CertificationCodeRequestDto import com.konkuk.medicarecall.data.dto.request.PhoneNumberConfirmRequestDto import com.konkuk.medicarecall.data.dto.response.VerificationResponseDto -import com.konkuk.medicarecall.data.exception.HttpException import com.konkuk.medicarecall.data.repository.VerificationRepository +import com.konkuk.medicarecall.data.util.handleResponse import org.koin.core.annotation.Single @Single @@ -17,14 +17,6 @@ class VerificationRepositoryImpl( override suspend fun confirmPhoneNumber(phone: String, code: String): Result = runCatching { - val response = authService.confirmPhoneNumber( - PhoneNumberConfirmRequestDto(phone, code), - ) - - if (response.isSuccessful) { - response.body() ?: error("Response body is null") - } else { - throw HttpException(response) - } + authService.confirmPhoneNumber(PhoneNumberConfirmRequestDto(phone, code)).handleResponse() } } diff --git a/app/src/main/java/com/konkuk/medicarecall/data/util/ResponseHandler.kt b/app/src/main/java/com/konkuk/medicarecall/data/util/ResponseHandler.kt new file mode 100644 index 00000000..ac8562b2 --- /dev/null +++ b/app/src/main/java/com/konkuk/medicarecall/data/util/ResponseHandler.kt @@ -0,0 +1,21 @@ +package com.konkuk.medicarecall.data.util + +import com.konkuk.medicarecall.data.exception.HttpException +import de.jensklingenberg.ktorfit.Response + +fun Response.handleResponse(): T { + if (isSuccessful) { + return body() ?: error("응답값이 null 입니다.") + } else { + throw HttpException(this) + } +} + +// Nullable 응답용 +fun Response.handleNullableResponse(): T? { + if (isSuccessful) { + return body() + } else { + throw HttpException(this) + } +} diff --git a/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt b/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt index d7a5e6fe..7ac92db7 100644 --- a/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt +++ b/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.setValue import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.konkuk.medicarecall.data.exception.HttpException import com.konkuk.medicarecall.data.repository.EldersHealthInfoRepository import com.konkuk.medicarecall.data.repository.EldersInfoRepository import com.konkuk.medicarecall.data.repository.HomeRepository @@ -20,7 +21,6 @@ import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import org.koin.android.annotation.KoinViewModel -import com.konkuk.medicarecall.data.exception.HttpException data class ElderInfo(val id: Int, val name: String, val phone: String?) @@ -143,7 +143,7 @@ class HomeViewModel( // val today = LocalDate.now() try { // ① 요약 API 호출 (DTO를 받음) - val dto = homeRepository.getHomeSummary(elderId) + val dto = homeRepository.getHomeSummary(elderId).getOrThrow() // ② DTO를 UiState로 변환 (ViewModel이 직접 함) val uiFromServer = HomeUiState.from(dto)