Skip to content
916 changes: 916 additions & 0 deletions REFACTORING_ANALYSIS.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -10,5 +11,5 @@ interface HealthService {
suspend fun getDailyHealth(
@Path("elderId") elderId: Int,
@Query("date") date: String,
): HealthResponseDto
): Response<HealthResponseDto>
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ 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.handleResponse
import com.konkuk.medicarecall.ui.common.util.formatAsDate
import com.konkuk.medicarecall.ui.model.ElderData
import com.konkuk.medicarecall.ui.model.ElderHealthData
Expand All @@ -22,10 +22,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(),
Expand All @@ -34,16 +33,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,
Expand All @@ -52,14 +45,11 @@ class ElderRegisterRepositoryImpl(
HealthIssueType.entries.find { it.displayName == notes }!!
},
),
)
if (!response.isSuccessful) {
throw HttpException(response) // Exception Type?
}
).handleResponse()
}

override suspend fun postElderBulk(elderList: List<ElderData>): Result<ElderBulkRegisterResponseDto> = runCatching {
val response = elderRegisterService.postElderBulk(
elderRegisterService.postElderBulk(
ElderBulkRegisterRequestDto(
elders = elderList.map { elderData ->
ElderBulkRegisterRequestDto.ElderInfo(
Expand All @@ -72,16 +62,11 @@ class ElderRegisterRepositoryImpl(
)
},
),
)
if (response.isSuccessful) {
response.body() ?: error("Response body is null")
} else {
throw HttpException(response)
}
).handleResponse()
}

override suspend fun postElderHealthInfoBulk(elderHealthList: List<ElderHealthData>): Result<Unit> = runCatching {
val response = elderRegisterService.postElderHealthInfoBulk(
elderRegisterService.postElderHealthInfoBulk(
ElderBulkHealthInfoRequestDto(
healthInfos = elderHealthList.map { elderHealthData ->
ElderBulkHealthInfoRequestDto.HealthInfo(
Expand All @@ -99,9 +84,6 @@ class ElderRegisterRepositoryImpl(
)
},
),
)
if (!response.isSuccessful) {
throw HttpException(response)
}
).handleResponse()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ 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.handleResponse
import com.konkuk.medicarecall.ui.type.MedicationTimeType
import org.koin.core.annotation.Single

Expand All @@ -32,48 +32,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<Unit> =
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<Unit> = runCatching {
val medicationSchedule = elderInfo.medications.toMedicationSchedules()
val elder = ElderHealthRegisterRequestDto(
diseaseNames = elderInfo.diseases,
medicationSchedules = medicationSchedule,
notes = elderInfo.notes,
)
elderRegisterService.postElderHealthInfo(elderInfo.elderId, elder).handleResponse()
refresh()
}

fun Map<MedicationTimeType, List<String>>.toMedicationSchedules(): List<MedicationSchedule> {
val timesByMed = linkedMapOf<String, MutableSet<MedicationTimeType>>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,78 +6,48 @@ 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.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<List<EldersInfoResponseDto>> = 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<List<EldersSubscriptionResponseDto>> = 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<Unit> = 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,
phone = request.phoneNumber,
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<Unit> = 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).handleResponse()
}

override suspend fun getCareCallTimes(id: Int): Result<CallTimeResponseDto> = 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()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -13,14 +14,7 @@ class GlucoseRepositoryImpl(
elderId: Int,
counter: Int,
type: String,
): Result<GlucoseResponseDto> =
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<GlucoseResponseDto> = runCatching {
glucoseService.getGlucoseGraph(elderId, counter, type).handleResponse()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -12,7 +13,7 @@ class HealthRepositoryImpl(
) : HealthRepository {
override suspend fun getHealthUiState(elderId: Int, date: LocalDate): Result<HealthUiState> =
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(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,55 +1,25 @@
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.handleResponse
import org.koin.core.annotation.Single

@Single
class HomeRepositoryImpl(
private val homeService: HomeService,
) : HomeRepository {
override suspend fun requestImmediateCareCall(
elderId: Int, careCallOption: String,
elderId: Int,
careCallOption: String,
): Result<Unit> = 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}")
}
).handleResponse()
}

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): HomeResponseDto =
homeService.getHomeSummary(elderId).handleResponse()
}
Loading