diff --git a/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt b/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt
index 2b34a8a88..dac34297f 100644
--- a/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt
+++ b/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt
@@ -11,7 +11,7 @@ import androidx.core.view.isVisible
import androidx.core.widget.TextViewCompat
import androidx.databinding.BindingAdapter
import com.android.mediproject.core.common.R
-import com.android.mediproject.core.model.constants.MedicationType
+import com.android.mediproject.core.model.medicine.common.producttype.MedicationProductType
import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.module.AppGlideModule
@@ -21,7 +21,7 @@ class GlideAppModule : AppGlideModule()
object BindingAdapter {
@JvmStatic
@BindingAdapter("medicationTypeText")
- fun setMedicationTypeText(textView: TextView, type: MedicationType) {
+ fun setMedicationTypeText(textView: TextView, type: MedicationProductType) {
val arr = textView.context.resources.getStringArray(R.array.medicationTypes)
textView.text = arr[type.ordinal]
}
diff --git a/core/common/src/main/java/com/android/mediproject/core/common/mapper/MedicineInfoMapper.kt b/core/common/src/main/java/com/android/mediproject/core/common/mapper/MedicineInfoMapper.kt
index 29e702f5e..36d045421 100644
--- a/core/common/src/main/java/com/android/mediproject/core/common/mapper/MedicineInfoMapper.kt
+++ b/core/common/src/main/java/com/android/mediproject/core/common/mapper/MedicineInfoMapper.kt
@@ -13,8 +13,8 @@ import android.text.style.UnderlineSpan
import androidx.core.content.ContextCompat
import androidx.core.text.toSpanned
import com.android.mediproject.core.common.R
-import com.android.mediproject.core.model.medicine.medicinedetailinfo.MedicineDetail
import com.android.mediproject.core.model.granule.GranuleIdentificationInfo
+import com.android.mediproject.core.model.medicine.medicinedetailinfo.MedicineDetail
import com.android.mediproject.core.model.util.XMLParsedResult
import java.lang.ref.WeakReference
import javax.inject.Inject
@@ -76,7 +76,7 @@ class MedicineInfoMapper @Inject constructor() {
return WeakReference(StringBuilder()).get()?.let { builder ->
with(medicineDetail) {
builder.append("
의약품 이름: $itemName
").append("의약품 영문 이름: $itemEnglishName
")
- .append("의약품 시퀀스 번호: $itemSequence
").append("의약품 허가 날짜: $itemPermitDate
")
+ .append("의약품 시퀀스 번호: $itemSequence
").append("의약품 허가 날짜: ${itemPermitDate.value}
")
.append("제조사 이름: $entpName
").append("제조사 영문 이름: $entpEnglishName
")
.append("제조및수입사: $consignmentManufacturer
").append("성분 이름: $ingredientName
")
.append("주성분의 영문 이름: $mainIngredientEnglish
").append("총 함량: $totalContent
")
diff --git a/core/domain/src/main/java/com/android/mediproject/core/domain/GetMedicineApprovalListUseCase.kt b/core/domain/src/main/java/com/android/mediproject/core/domain/GetMedicineApprovalListUseCase.kt
index fd81a8858..5ef0329b8 100644
--- a/core/domain/src/main/java/com/android/mediproject/core/domain/GetMedicineApprovalListUseCase.kt
+++ b/core/domain/src/main/java/com/android/mediproject/core/domain/GetMedicineApprovalListUseCase.kt
@@ -2,7 +2,7 @@ package com.android.mediproject.core.domain
import androidx.paging.map
import com.android.mediproject.core.data.medicineapproval.MedicineApprovalRepository
-import com.android.mediproject.core.model.constants.MedicationType
+import com.android.mediproject.core.model.medicine.common.producttype.FilterMedicationProductType
import com.android.mediproject.core.model.medicine.medicineapproval.toApprovedMedicine
import com.android.mediproject.core.model.requestparameters.ApprovalListSearchParameter
import kotlinx.coroutines.flow.map
@@ -20,9 +20,9 @@ class GetMedicineApprovalListUseCase @Inject constructor(
) = medicineApprovalRepository.getMedicineApprovalList(
itemName = parameter.itemName,
entpName = parameter.entpName,
- medicationType = when (parameter.medicationType) {
- MedicationType.ALL -> null
- else -> parameter.medicationType.description
+ medicationType = when (parameter.medicationProductType) {
+ FilterMedicationProductType.ALL -> null
+ else -> parameter.medicationProductType.text
},
).map { pagingData ->
pagingData.map { item ->
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/DateTime.kt b/core/model/src/main/java/com/android/mediproject/core/model/DateTime.kt
index 226f17556..f852f5366 100644
--- a/core/model/src/main/java/com/android/mediproject/core/model/DateTime.kt
+++ b/core/model/src/main/java/com/android/mediproject/core/model/DateTime.kt
@@ -1,9 +1,15 @@
package com.android.mediproject.core.model
+import com.android.mediproject.core.model.common.UiValue
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
-fun String.toLocalDate(format: String): LocalDate? = if (isEmpty()) null else LocalDate.parse(this, DateTimeFormatter.ofPattern(format))
+fun String?.toLocalDate(format: String): DateTimeValue = DateTimeValue(this, format)
fun String.toLocalDateTime(format: String): LocalDateTime = LocalDateTime.parse(this, DateTimeFormatter.ofPattern(format))
+
+class DateTimeValue(dateTime: String?, format: String) : UiValue {
+ override val value: LocalDate = dateTime?.run { LocalDate.parse(this, DateTimeFormatter.ofPattern(format)) } ?: LocalDate.MIN
+ override val isEmpty: Boolean = value.isEqual(LocalDate.MIN)
+}
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/common/UiValue.kt b/core/model/src/main/java/com/android/mediproject/core/model/common/UiValue.kt
new file mode 100644
index 000000000..0a2339656
--- /dev/null
+++ b/core/model/src/main/java/com/android/mediproject/core/model/common/UiValue.kt
@@ -0,0 +1,15 @@
+package com.android.mediproject.core.model.common
+
+/**
+ * UI에서 사용하는 값을 나타내기 위한 자료형
+ *
+ * @param T UI에서 사용하는 값의 자료형
+ * @property value UI에서 사용하는 값
+ * @property isEmpty UI에서 사용하는 값이 비어있는지 여부
+ *
+ * LocalDate와 같이 Date값의 존재 여부를 Null대신 구분짓기 위해 사용한다.
+ */
+interface UiValue {
+ val value: T
+ val isEmpty: Boolean
+}
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/constants/MedicationType.kt b/core/model/src/main/java/com/android/mediproject/core/model/constants/MedicationType.kt
deleted file mode 100644
index f73f3ef13..000000000
--- a/core/model/src/main/java/com/android/mediproject/core/model/constants/MedicationType.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.android.mediproject.core.model.constants
-
-/**
- * 약품 타입
- *
- * @property SPECIALTY 전문의약품
- * @property GENERAL 일반의약품
- * @property ALL 전체
- */
-enum class MedicationType(val description: String) {
- ALL(""),
- SPECIALTY("전문"),
- GENERAL("일반"),
-}
\ No newline at end of file
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/granule/GranuleIdentificationInfo.kt b/core/model/src/main/java/com/android/mediproject/core/model/granule/GranuleIdentificationInfo.kt
index 93502babc..690738a8f 100644
--- a/core/model/src/main/java/com/android/mediproject/core/model/granule/GranuleIdentificationInfo.kt
+++ b/core/model/src/main/java/com/android/mediproject/core/model/granule/GranuleIdentificationInfo.kt
@@ -1,7 +1,7 @@
package com.android.mediproject.core.model.granule
+import com.android.mediproject.core.model.DateTimeValue
import com.android.mediproject.core.model.toLocalDate
-import java.time.LocalDate
/**
@@ -43,7 +43,7 @@ import java.time.LocalDate
*/
data class GranuleIdentificationInfo(
val bizrNo: String, // 3038117108
- val changeDate: LocalDate?, // 20230419
+ val changeDate: DateTimeValue, // 20230419
val chart: String, // 무색 내지 연보라색의 내용물이 든 보라색의 투명한 타원형 연질캡슐
val className: String, // 항히스타민제
val classNo: String, // 01410
@@ -55,11 +55,11 @@ data class GranuleIdentificationInfo(
val entpSeq: String, // 19910005
val etcOtcName: String, // 일반의약품
val formCodeName: String, // 연질캡슐제, 액상
- val imgRegistTs: LocalDate?, // 20100305
+ val imgRegistTs: DateTimeValue, // 20100305
val itemEngName: String, // Allershot Soft Cap.
val itemImage: String, // https://nedrug.mfds.go.kr/pbp/cmn/itemImageDownload/154661648918800015
val itemName: String, // 알러샷연질캡슐(세티리진염산염)
- val itemPermitDate: LocalDate?, // 20090812
+ val itemPermitDate: DateTimeValue, // 20090812
val itemSeq: String, // 200906254
val lengLong: String, // 12.50
val lengShort: String, // 7.58
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/cancel/MedicineCancelStatusMapper.kt b/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/cancel/MedicineCancelStatusMapper.kt
new file mode 100644
index 000000000..98a637b92
--- /dev/null
+++ b/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/cancel/MedicineCancelStatusMapper.kt
@@ -0,0 +1,16 @@
+package com.android.mediproject.core.model.medicine.common.cancel
+
+import com.android.mediproject.core.model.toLocalDate
+
+class MedicineCancelStatusMapper {
+ companion object {
+ private const val cancelDateFormat = "yyyyMMdd"
+ fun map(cancelName: String, cancelDate: String? = null): MedicineCancelStatus {
+ return when (MedicineCancelStatusType.statusOf(cancelName)) {
+ MedicineCancelStatusType.CANCELED -> Canceled(cancelDate.toLocalDate(cancelDateFormat))
+ MedicineCancelStatusType.EXPIRED -> Expired(cancelDate.toLocalDate(cancelDateFormat))
+ MedicineCancelStatusType.NORMAL -> Normal()
+ }
+ }
+ }
+}
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/cancel/MedicineCancelStatusType.kt b/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/cancel/MedicineCancelStatusType.kt
new file mode 100644
index 000000000..40902604a
--- /dev/null
+++ b/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/cancel/MedicineCancelStatusType.kt
@@ -0,0 +1,33 @@
+package com.android.mediproject.core.model.medicine.common.cancel
+
+import androidx.annotation.StringRes
+import com.android.mediproject.core.model.DateTimeValue
+import com.android.mediproject.core.model.R
+
+enum class MedicineCancelStatusType(val status: String, @StringRes val statusStringResId: Int) {
+ CANCELED("취하", R.string.medicineCancelStatus_canceled), EXPIRED(
+ "유효기간만료",
+ R.string.medicineCancelStatus_expired,
+ ),
+ NORMAL("정상", R.string.medicineCancelStatus_normal);
+
+ companion object {
+ fun statusOf(status: String) = values().find { it.status == status } ?: throw IllegalArgumentException()
+ }
+}
+
+interface MedicineCancelStatus {
+ @get:StringRes val statusStringId: Int
+}
+
+data class Canceled(val cancelDate: DateTimeValue) : MedicineCancelStatus {
+ override val statusStringId: Int = MedicineCancelStatusType.CANCELED.statusStringResId
+}
+
+class Expired(val cancelDate: DateTimeValue) : MedicineCancelStatus {
+ override val statusStringId: Int = MedicineCancelStatusType.EXPIRED.statusStringResId
+}
+
+class Normal : MedicineCancelStatus {
+ override val statusStringId: Int = MedicineCancelStatusType.NORMAL.statusStringResId
+}
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/producttype/FilterMedicationProductType.kt b/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/producttype/FilterMedicationProductType.kt
new file mode 100644
index 000000000..e6353e5ec
--- /dev/null
+++ b/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/producttype/FilterMedicationProductType.kt
@@ -0,0 +1,27 @@
+package com.android.mediproject.core.model.medicine.common.producttype
+
+import androidx.annotation.StringRes
+import com.android.mediproject.core.model.R
+import com.android.mediproject.core.model.medicine.common.producttype.FilterMedicationProductType.ALL
+import com.android.mediproject.core.model.medicine.common.producttype.FilterMedicationProductType.GENERAL
+import com.android.mediproject.core.model.medicine.common.producttype.FilterMedicationProductType.SPECIALTY
+
+/**
+ * 표시할 의약품 타입
+ *
+ * @property SPECIALTY 전문의약품
+ * @property GENERAL 일반의약품
+ * @property ALL 전체
+ */
+enum class FilterMedicationProductType(val text: String, @StringRes val stringResId: Int) {
+ ALL("", R.string.medicineProductType_all), SPECIALTY("전문", R.string.medicineProductType_specialty), GENERAL(
+ "일반",
+ R.string.medicineProductType_general,
+ );
+
+ companion object {
+
+ fun FilterMedicationProductType.text() = text
+ fun FilterMedicationProductType.stringResId() = stringResId
+ }
+}
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/producttype/MedicationProductType.kt b/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/producttype/MedicationProductType.kt
new file mode 100644
index 000000000..8aa0dac4e
--- /dev/null
+++ b/core/model/src/main/java/com/android/mediproject/core/model/medicine/common/producttype/MedicationProductType.kt
@@ -0,0 +1,21 @@
+package com.android.mediproject.core.model.medicine.common.producttype
+
+import androidx.annotation.StringRes
+import com.android.mediproject.core.model.R
+import com.android.mediproject.core.model.medicine.common.producttype.MedicationProductType.GENERAL
+import com.android.mediproject.core.model.medicine.common.producttype.MedicationProductType.SPECIALTY
+
+/**
+ * 의약품 타입
+ *
+ * @property SPECIALTY 전문의약품
+ * @property GENERAL 일반의약품
+ */
+enum class MedicationProductType(val description: String, @StringRes val stringResId: Int) {
+ SPECIALTY("전문", R.string.medicineProductType_specialty),
+ GENERAL("일반", R.string.medicineProductType_general);
+
+ companion object {
+ fun valueOf(description: String) = values().find { description.contains(it.name) } ?: throw IllegalArgumentException()
+ }
+}
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/medicine/medicinedetailinfo/MedicineDetail.kt b/core/model/src/main/java/com/android/mediproject/core/model/medicine/medicinedetailinfo/MedicineDetail.kt
index a1f8186a0..4de7d16d4 100644
--- a/core/model/src/main/java/com/android/mediproject/core/model/medicine/medicinedetailinfo/MedicineDetail.kt
+++ b/core/model/src/main/java/com/android/mediproject/core/model/medicine/medicinedetailinfo/MedicineDetail.kt
@@ -1,9 +1,12 @@
package com.android.mediproject.core.model.medicine.medicinedetailinfo
+import com.android.mediproject.core.model.DateTimeValue
+import com.android.mediproject.core.model.medicine.common.cancel.MedicineCancelStatus
+import com.android.mediproject.core.model.medicine.common.cancel.MedicineCancelStatusMapper
+import com.android.mediproject.core.model.medicine.common.producttype.MedicationProductType
+import com.android.mediproject.core.model.toLocalDate
import com.android.mediproject.core.model.util.XMLParsedResult
import com.android.mediproject.core.model.util.parseXmlString
-import com.android.mediproject.core.model.toLocalDate
-import java.time.LocalDate
/**
* 의약품 상세 허가 정보
@@ -11,8 +14,7 @@ import java.time.LocalDate
* @param atcCode ATC 코드
* @param barCode 바코드
* @param businessRegistrationNumber 사업자등록번호
- * @param cancelDate 취소일자
- * @param cancelName 취소명
+ * @param cancelStatus 취소 상태
* @param changeDate 변경일자
* @param chart 성상
* @param consignmentManufacturer 제조및수입사
@@ -22,7 +24,7 @@ import java.time.LocalDate
* @param entpEnglishName 제조사의 영문 이름입니다.
* @param entpName 제조사의 이름입니다.
* @param entpNumber 제조사의 번호입니다.
- * @param etcOtcCode 전문의약품 코드입니다.
+ * @param medicationProductType 전문의약품 코드입니다.
* @param gbnName GBN(General Batch Number)의 이름입니다.
* @param industryType 산업 유형입니다. 이 경우에는 '의약품'이라고 명시되어 있습니다.
* @param ingredientName 성분 이름입니다.
@@ -42,12 +44,10 @@ import java.time.LocalDate
* @param packUnit 패키지 단위입니다.
* @param permitKindName 허가 종류 이름입니다.
* @param pnDocData PN 문서 데이터입니다.
- * @param reexamDate 재심사 날짜입니다.
* @param reexamTarget 재심사 대상입니다.
* @param storageMethod 저장 방법입니다.
* @param totalContent 총 함량입니다.
* @param udDocData 용법 용량
- * @param uDocUid UD 문서의 식별자(ID)입니다.
* @param validTerm 유효 기간입니다. 제조일로부터의 개월 수를 나타냅니다.
* @param medicineIdInServer AWS에 저장된 의약품 ID
* @param existsMedicineIdInServer AWS에 저장된 의약품 ID가 있는지 여부
@@ -56,9 +56,8 @@ data class MedicineDetail(
val atcCode: String,
val barCode: String,
val businessRegistrationNumber: String,
- val cancelDate: LocalDate,
- val cancelName: String,
- val changeDate: LocalDate,
+ val cancelStatus: MedicineCancelStatus,
+ val changeDate: DateTimeValue,
val chart: String,
val consignmentManufacturer: String,
val docText: String,
@@ -67,14 +66,14 @@ data class MedicineDetail(
val entpEnglishName: String,
val entpName: String,
val entpNumber: String,
- val etcOtcCode: String,
+ val medicationProductType: MedicationProductType,
val gbnName: String,
val industryType: String,
val ingredientName: String,
val insertFileUrl: String,
val itemEnglishName: String,
val itemName: String,
- val itemPermitDate: LocalDate,
+ val itemPermitDate: DateTimeValue,
val itemSequence: String,
val mainIngredientEnglish: String,
val mainItemIngredient: String,
@@ -87,12 +86,10 @@ data class MedicineDetail(
val packUnit: String,
val permitKindName: String,
val pnDocData: XMLParsedResult,
- val reexamDate: LocalDate,
val reexamTarget: String,
val storageMethod: String,
val totalContent: String,
val udDocData: XMLParsedResult,
- val uDocUid: String,
val validTerm: String,
val medicineIdInServer: Long,
val existsMedicineIdInServer: Boolean,
@@ -102,44 +99,41 @@ fun MedicineDetailInfoResponse.Item.toMedicineDetail(medicineIdInServer: Long =
atcCode = atcCode,
barCode = barCode,
businessRegistrationNumber = businessRegistrationNumber,
- cancelDate = cancelDate.toLocalDate("yyyyMMdd") ?: LocalDate.MIN,
- cancelName = cancelName,
- changeDate = changeDate.toLocalDate("yyyyMMdd") ?: LocalDate.MIN,
chart = chart,
consignmentManufacturer = consignmentManufacturer,
docText = docText,
ediCode = ediCode,
- eeDocData = if (eeDocData.isNotEmpty()) eeDocData.parseXmlString() else XMLParsedResult("", emptyList()),
+ eeDocData = eeDocData.parseXmlString(),
entpEnglishName = entpEnglishName,
entpName = entpName,
entpNumber = entpNumber,
- etcOtcCode = etcOtcCode,
+ medicationProductType = MedicationProductType.valueOf(etcOtcCode),
gbnName = gbnName,
industryType = industryType,
ingredientName = ingredientName,
insertFileUrl = insertFileUrl,
itemEnglishName = itemEnglishName,
itemName = itemName,
- itemPermitDate = itemPermitDate.toLocalDate("yyyyMMdd") ?: LocalDate.MIN,
+ itemPermitDate = itemPermitDate.toLocalDate("yyyyMMdd"),
itemSequence = itemSequence,
mainIngredientEnglish = mainIngredientEnglish,
mainItemIngredient = mainItemIngredient,
makeMaterialFlag = makeMaterialFlag,
materialName = materialName,
narcoticKindCode = narcoticKindCode,
- nbDocData = if (nbDocData.isNotEmpty()) nbDocData.parseXmlString() else XMLParsedResult("", emptyList()),
+ nbDocData = nbDocData.parseXmlString(),
nbDocId = nbDocId,
newDrugClassName = newDrugClassName,
packUnit = packUnit,
permitKindName = permitKindName,
- pnDocData = if (pnDocData.isNotEmpty()) pnDocData.parseXmlString() else XMLParsedResult("", emptyList()),
- reexamDate = reexamDate.toLocalDate("yyyyMMdd") ?: LocalDate.MIN,
+ pnDocData = pnDocData.parseXmlString(),
reexamTarget = reexamTarget,
storageMethod = storageMethod,
totalContent = totalContent,
udDocData = udDocData.parseXmlString(),
- uDocUid = uDDOCID,
validTerm = validTerm,
medicineIdInServer = medicineIdInServer,
existsMedicineIdInServer = medicineIdInServer != 0L,
+ cancelStatus = MedicineCancelStatusMapper.map(cancelName, cancelDate),
+ changeDate = changeDate.toLocalDate("yyyyMMdd"),
)
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/recall/RecallSuspension.kt b/core/model/src/main/java/com/android/mediproject/core/model/recall/RecallSuspension.kt
index db5a2d142..53c0cd96b 100644
--- a/core/model/src/main/java/com/android/mediproject/core/model/recall/RecallSuspension.kt
+++ b/core/model/src/main/java/com/android/mediproject/core/model/recall/RecallSuspension.kt
@@ -1,8 +1,8 @@
package com.android.mediproject.core.model.recall
+import com.android.mediproject.core.model.DateTimeValue
import com.android.mediproject.core.model.toLocalDate
-import java.time.LocalDate
/**
@@ -22,8 +22,8 @@ data class RecallSuspension(
val entrps: String, // 동국제약(주)
val itemSeq: String, // 201208461
val product: String, // 니자틴캡슐(니자티딘)
- val recallCommandDate: LocalDate?, // 20230504
- val destructionOrderDate: LocalDate?, // 20230503000000
+ val recallCommandDate: DateTimeValue, // 20230504
+ val destructionOrderDate: DateTimeValue, // 20230503000000
val reason: String, // 안정성 시험결과 NDMA 기준 초과에 따른 사전예방적 조치로 시중 유통품에 대해 영업자회수
var onClick: ((RecallSuspension) -> Unit)? = null,
)
@@ -33,7 +33,7 @@ fun RecallSuspensionListResponse.Item.Item.toRecallSuspension() = RecallSuspensi
entrps = entrps ?: "",
itemSeq = itemSeq ?: "",
product = product ?: "",
- recallCommandDate = recallCommandDate?.toLocalDate("yyyyMMdd"),
- destructionOrderDate = rtrlCommandDt?.toLocalDate("yyyyMMddHHmmss"),
+ recallCommandDate = recallCommandDate.toLocalDate("yyyyMMdd"),
+ destructionOrderDate = rtrlCommandDt.toLocalDate("yyyyMMddHHmmss"),
reason = rtrvlResn ?: "",
)
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/requestparameters/ApprovalListSearchParameter.kt b/core/model/src/main/java/com/android/mediproject/core/model/requestparameters/ApprovalListSearchParameter.kt
index 5060b1da7..97017f480 100644
--- a/core/model/src/main/java/com/android/mediproject/core/model/requestparameters/ApprovalListSearchParameter.kt
+++ b/core/model/src/main/java/com/android/mediproject/core/model/requestparameters/ApprovalListSearchParameter.kt
@@ -1,10 +1,10 @@
package com.android.mediproject.core.model.requestparameters
-import com.android.mediproject.core.model.constants.MedicationType
+import com.android.mediproject.core.model.medicine.common.producttype.FilterMedicationProductType
import java.io.Serializable
data class ApprovalListSearchParameter(
val itemName: String?,
val entpName: String?,
- val medicationType: MedicationType,
-) : Serializable
\ No newline at end of file
+ val medicationProductType: FilterMedicationProductType,
+) : Serializable
diff --git a/core/model/src/main/java/com/android/mediproject/core/model/util/XMLParser.kt b/core/model/src/main/java/com/android/mediproject/core/model/util/XMLParser.kt
index 4618c05cf..d37548342 100644
--- a/core/model/src/main/java/com/android/mediproject/core/model/util/XMLParser.kt
+++ b/core/model/src/main/java/com/android/mediproject/core/model/util/XMLParser.kt
@@ -19,8 +19,8 @@ private val factory = DocumentBuilderFactory.newInstance()
* @return XML 파싱 결과
*
*/
-fun String?.parseXmlString(): XMLParsedResult {
- if (this == null) return XMLParsedResult("", emptyList())
+fun String.parseXmlString(): XMLParsedResult {
+ if (isEmpty()) return XMLParsedResult()
val doc = WeakReference(factory.newDocumentBuilder().parse(InputSource(StringReader(this)))).get()!!
doc.documentElement.normalize()
@@ -59,10 +59,11 @@ private fun getElementsByTagName(element: Element, tagName: String): List,
+ val title: String = "",
+ val articleList: List = emptyList(),
) {
+
fun isEmpty(): Boolean = articleList.isEmpty()
data class Article(
diff --git a/core/model/src/main/res/values/strings.xml b/core/model/src/main/res/values/strings.xml
new file mode 100644
index 000000000..6590e3014
--- /dev/null
+++ b/core/model/src/main/res/values/strings.xml
@@ -0,0 +1,9 @@
+
+
+ 취하
+ 유효기간만료
+ 정상
+ 일반 의약품
+ 전문 의약품
+ 모두
+
diff --git a/feature/search/src/main/java/com/android/mediproject/feature/search/result/ai/AiSearchResultViewModel.kt b/feature/search/src/main/java/com/android/mediproject/feature/search/result/ai/AiSearchResultViewModel.kt
index 0f3c3ae88..87e8423e1 100644
--- a/feature/search/src/main/java/com/android/mediproject/feature/search/result/ai/AiSearchResultViewModel.kt
+++ b/feature/search/src/main/java/com/android/mediproject/feature/search/result/ai/AiSearchResultViewModel.kt
@@ -80,7 +80,7 @@ class AiSearchResultViewModel @Inject constructor(
itemEngName = e.itemEnglishName,
itemSeq = e.itemSequence.toLong(),
productType = e.industryType,
- medicineType = e.etcOtcCode,
+ medicineType = e.medicationProductType,
imgUrl = e.insertFileUrl,
),
),
diff --git a/feature/search/src/main/java/com/android/mediproject/feature/search/result/manual/ManualSearchResultFragment.kt b/feature/search/src/main/java/com/android/mediproject/feature/search/result/manual/ManualSearchResultFragment.kt
index 4a4f33784..11060a18d 100644
--- a/feature/search/src/main/java/com/android/mediproject/feature/search/result/manual/ManualSearchResultFragment.kt
+++ b/feature/search/src/main/java/com/android/mediproject/feature/search/result/manual/ManualSearchResultFragment.kt
@@ -9,7 +9,8 @@ import androidx.navigation.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import com.android.mediproject.core.common.paging.setOnStateChangedListener
import com.android.mediproject.core.common.util.deepNavigate
-import com.android.mediproject.core.model.constants.MedicationType
+import com.android.mediproject.core.common.viewmodel.repeatOnStarted
+import com.android.mediproject.core.model.medicine.common.producttype.FilterMedicationProductType
import com.android.mediproject.core.model.navargs.MedicineInfoArgs
import com.android.mediproject.core.ui.base.BaseFragment
import com.android.mediproject.core.ui.base.view.listfilter.MediPopupMenu
@@ -20,7 +21,6 @@ import com.android.mediproject.feature.search.result.EventState
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
-import com.android.mediproject.core.common.viewmodel.repeatOnStarted
@AndroidEntryPoint
class ManualSearchResultFragment :
@@ -65,11 +65,11 @@ class ManualSearchResultFragment :
MediPopupMenu.showMenu(it, R.menu.search_result_list_filter_menu) { menuItem ->
when (menuItem.itemId) {
- R.id.listOnlySpecialtyMedicines -> fragmentViewModel.searchMedicinesByMedicationType(MedicationType.SPECIALTY)
+ R.id.listOnlySpecialtyMedicines -> fragmentViewModel.searchMedicinesByMedicationType(FilterMedicationProductType.SPECIALTY)
- R.id.listOnlyGenericMedicines -> fragmentViewModel.searchMedicinesByMedicationType(MedicationType.GENERAL)
+ R.id.listOnlyGenericMedicines -> fragmentViewModel.searchMedicinesByMedicationType(FilterMedicationProductType.GENERAL)
- R.id.listAllMedicines -> fragmentViewModel.searchMedicinesByMedicationType(MedicationType.ALL)
+ R.id.listAllMedicines -> fragmentViewModel.searchMedicinesByMedicationType(FilterMedicationProductType.ALL)
}
true
}
diff --git a/feature/search/src/main/java/com/android/mediproject/feature/search/result/manual/ManualSearchResultViewModel.kt b/feature/search/src/main/java/com/android/mediproject/feature/search/result/manual/ManualSearchResultViewModel.kt
index 7acedb371..f88719cf9 100644
--- a/feature/search/src/main/java/com/android/mediproject/feature/search/result/manual/ManualSearchResultViewModel.kt
+++ b/feature/search/src/main/java/com/android/mediproject/feature/search/result/manual/ManualSearchResultViewModel.kt
@@ -9,9 +9,9 @@ import com.android.mediproject.core.common.network.MediDispatchers
import com.android.mediproject.core.common.viewmodel.MutableEventFlow
import com.android.mediproject.core.common.viewmodel.asEventFlow
import com.android.mediproject.core.domain.GetMedicineApprovalListUseCase
-import com.android.mediproject.core.model.constants.MedicationType
-import com.android.mediproject.core.model.navargs.MedicineInfoArgs
+import com.android.mediproject.core.model.medicine.common.producttype.FilterMedicationProductType
import com.android.mediproject.core.model.medicine.medicineapproval.ApprovedMedicine
+import com.android.mediproject.core.model.navargs.MedicineInfoArgs
import com.android.mediproject.core.model.requestparameters.ApprovalListSearchParameter
import com.android.mediproject.core.ui.base.BaseViewModel
import com.android.mediproject.feature.search.result.EventState
@@ -40,7 +40,7 @@ class ManualSearchResultViewModel @Inject constructor(
) : BaseViewModel(), ISendEvent {
private val _searchParameter =
- MutableStateFlow(ApprovalListSearchParameter(itemName = null, entpName = null, medicationType = MedicationType.ALL))
+ MutableStateFlow(ApprovalListSearchParameter(itemName = null, entpName = null, medicationProductType = FilterMedicationProductType.ALL))
val searchParameter = _searchParameter.asStateFlow()
val searchResultFlow = searchParameter.flatMapLatest {
@@ -83,10 +83,10 @@ class ManualSearchResultViewModel @Inject constructor(
/**
* 의약품 유형으로 검색
*/
- fun searchMedicinesByMedicationType(medicationType: MedicationType) {
+ fun searchMedicinesByMedicationType(medicationProductType: FilterMedicationProductType) {
viewModelScope.launch {
_searchParameter.update {
- it.copy(medicationType = medicationType)
+ it.copy(medicationProductType = medicationProductType)
}
}
}
diff --git a/feature/search/src/main/res/layout/ai_medicine_item.xml b/feature/search/src/main/res/layout/ai_medicine_item.xml
index dc69b808f..365ecc666 100644
--- a/feature/search/src/main/res/layout/ai_medicine_item.xml
+++ b/feature/search/src/main/res/layout/ai_medicine_item.xml
@@ -113,7 +113,7 @@
android:layout_height="wrap_content"
android:background="@drawable/medicine_type_background"
android:maxLines="1"
- android:text="@{item.medicineDetail.etcOtcCode}"
+ android:text="@{item.medicineDetail.medicationProductType}"
android:textColor="@color/medicineType"
android:textSize="11sp"
app:layout_constraintLeft_toRightOf="@id/medicineNameTextView"
diff --git a/feature/search/src/main/res/layout/fragment_manual_search_result.xml b/feature/search/src/main/res/layout/fragment_manual_search_result.xml
index 82cf6ed05..f84557973 100644
--- a/feature/search/src/main/res/layout/fragment_manual_search_result.xml
+++ b/feature/search/src/main/res/layout/fragment_manual_search_result.xml
@@ -1,22 +1,19 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto">
-
+
+ type="com.android.mediproject.feature.search.result.manual.ManualSearchResultViewModel" />
+ android:layout_height="match_parent">
+ app:medicationTypeText="@{viewModel.searchParameter.medicationProductType}" />
+ app:layout_constraintTop_toBottomOf="@id/filterBtn" />
-
\ No newline at end of file
+