Skip to content

Commit 167501c

Browse files
committed
feat: 진단서 검증 기능 구현
1 parent bd1f009 commit 167501c

File tree

3 files changed

+89
-8
lines changed

3 files changed

+89
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.ivory.ivory.domain;
2+
3+
public enum Disease {
4+
// 유행성 질병
5+
COLD("감기"),
6+
CONJUNCTIVITIS("눈병"),
7+
STOMATITIS("구내염"),
8+
TRANSMISSIBLE("전염"), // 전염 여부는 별도 로직으로 처리 가능
9+
10+
// 제1급 감염병
11+
EBOLA("에볼라"),
12+
MARBURG_FEVER("마버그열"),
13+
LASSA_FEVER("라싸열"),
14+
CRIMEAN_CONGO_HEMORRHAGIC_FEVER("크리미안콩고출혈열"),
15+
SOUTH_AMERICAN_HEMORRHAGIC_FEVER("남아메리카출혈열"),
16+
RIFT_VALLEY_FEVER("리프트밸리열"),
17+
SMALLPOX("두창"),
18+
PLAGUE("페스트"),
19+
ANTHRAX("탄저"),
20+
BOTULISM("보툴리눔독소증"),
21+
TULAREMIA("야토병"),
22+
SARS("SARS"),
23+
MERS("MERS"),
24+
H5N1("동물인플루엔자인체감염증"),
25+
H1N1("신종인플루엔자"),
26+
DIPHTHERIA("디프테리아"),
27+
28+
// 제2급 감염병
29+
TUBERCULOSIS("결핵"),
30+
CHICKENPOX("수두"),
31+
MEASLES("홍역"),
32+
CHOLERA("콜레라"),
33+
TYPHOID_FEVER("장티푸스"),
34+
PARATYPHOID_FEVER("파라티푸스"),
35+
SHIGELLOSIS("세균성이질"),
36+
EHEC("장출혈성대장균"),
37+
HEPATITIS_A("A형간염"),
38+
// 생략된 다른 제2급 감염병...
39+
40+
// 제3급 감염병
41+
TETANUS("파상풍"),
42+
HEPATITIS_B("B형간염"),
43+
HEPATITIS_C("C형간염"),
44+
JAPANESE_ENCEPHALITIS("일본뇌염"),
45+
MALARIA("말라리아"),
46+
// 생략된 다른 제3급 감염병...
47+
48+
// 제4급 감염병
49+
INFLUENZA("인플루엔자"),
50+
HAND_FOOT_MOUTH_DISEASE("수족구병"),
51+
PARASITIC_INFECTION("기생충 감염"),
52+
GONORRHEA("임질"),
53+
CHLAMYDIA("클라미디아"),
54+
COVID_19("코로나19");
55+
56+
private final String name;
57+
58+
Disease(String name) {
59+
this.name = name;
60+
}
61+
62+
public String getName() {
63+
return name;
64+
}
65+
66+
public static Disease findByDiagnosisName(String diagnosisName) {
67+
if (diagnosisName == null || diagnosisName.isEmpty()) {
68+
throw new IllegalArgumentException("진단명이 비어있습니다.");
69+
}
70+
71+
for (Disease disease : Disease.values()) {
72+
if (diagnosisName.contains(disease.getName())) {
73+
return disease;
74+
}
75+
}
76+
throw new IllegalArgumentException("적합하지 않은 질병명입니다: " + diagnosisName);
77+
}
78+
}

src/main/java/com/ivory/ivory/domain/MedicalCertificate.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.ivory.ivory.util.entity.BaseEntity;
44
import jakarta.persistence.Column;
55
import jakarta.persistence.Entity;
6+
import jakarta.persistence.EnumType;
7+
import jakarta.persistence.Enumerated;
68
import jakarta.persistence.FetchType;
79
import jakarta.persistence.GeneratedValue;
810
import jakarta.persistence.GenerationType;
@@ -36,8 +38,9 @@ public class MedicalCertificate extends BaseEntity {
3638
@Column(name = "diagnosis_date", nullable = true)
3739
private LocalDate diagnosisDate;
3840

39-
@Column(name = "diagnosis_name", nullable = true)
40-
private String diagnosisName;
41+
@Enumerated(EnumType.STRING)
42+
@Column(name = "disease", nullable = true)
43+
private Disease disease;
4144

4245
@Column(name = "diagnosis_content", nullable = true)
4346
private String diagnosisContent;
@@ -50,11 +53,11 @@ public class MedicalCertificate extends BaseEntity {
5053
private Child child;
5154

5255
@Builder
53-
public MedicalCertificate(String name, String address, LocalDate diagnosisDate, String diagnosisName, String diagnosisContent, String doctorName, Child child) {
56+
public MedicalCertificate(String name, String address, LocalDate diagnosisDate, Disease disease, String diagnosisContent, String doctorName, Child child) {
5457
this.name = name;
5558
this.address = address;
5659
this.diagnosisDate = diagnosisDate;
57-
this.diagnosisName = diagnosisName;
60+
this.disease = disease;
5861
this.diagnosisContent = diagnosisContent;
5962
this.doctorName = doctorName;
6063
this.child = child;

src/main/java/com/ivory/ivory/service/MedicalCertificateService.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.ivory.ivory.domain.AbsenceCertificate;
44
import com.ivory.ivory.domain.Child;
5+
import com.ivory.ivory.domain.Disease;
56
import com.ivory.ivory.domain.MedicalCertificate;
67
import com.ivory.ivory.dto.AbsenceCertificateRequestDto;
78
import com.ivory.ivory.dto.AbsenceCertificateResponseDto;
@@ -60,12 +61,11 @@ public MedicalCertificateResponseDto addMedicalCertificate(MedicalCertificateReq
6061
String diagnosisContent = parseData.get("의견");
6162
String doctorName = parseData.get("의사명");
6263

63-
6464
MedicalCertificate medicalCertificate = MedicalCertificate.builder()
6565
.name(name)
6666
.address(address)
6767
.diagnosisDate(diagnosisDate != null ? DateUtil.parseToLocalDate(diagnosisDate) : null)
68-
.diagnosisName(diagnosisName)
68+
.disease(Disease.findByDiagnosisName(diagnosisName))
6969
.diagnosisContent(diagnosisContent)
7070
.doctorName(doctorName)
7171
.child(child)
@@ -78,7 +78,7 @@ public MedicalCertificateResponseDto addMedicalCertificate(MedicalCertificateReq
7878
.name(medicalCertificate.getName())
7979
.address(medicalCertificate.getAddress())
8080
.diagnosisDate(medicalCertificate.getDiagnosisDate())
81-
.diagnosisName(medicalCertificate.getDiagnosisName())
81+
.diagnosisName(medicalCertificate.getDisease().getName())
8282
.diagnosisContent(medicalCertificate.getDiagnosisContent())
8383
.doctorName(medicalCertificate.getDoctorName())
8484
.build();
@@ -147,7 +147,7 @@ public MedicalCertificateResponseDto getMedicalCertificateDetail(Long medicalCer
147147
.name(medicalCertificate.getName())
148148
.address(medicalCertificate.getAddress())
149149
.diagnosisDate(medicalCertificate.getDiagnosisDate())
150-
.diagnosisName(medicalCertificate.getDiagnosisName())
150+
.diagnosisName(medicalCertificate.getDisease().getName())
151151
.diagnosisContent(medicalCertificate.getDiagnosisContent())
152152
.doctorName(medicalCertificate.getDoctorName())
153153
.build();

0 commit comments

Comments
 (0)