Skip to content

Commit 79df74c

Browse files
giacomoaccursiandrea-acampora
authored andcommitted
chore: add method to get the surgery report from the dto
1 parent 167fedb commit 79df74c

File tree

3 files changed

+93
-14
lines changed

3 files changed

+93
-14
lines changed

src/main/kotlin/application/presenter/serialization/SurgeryReportSerializer.kt

Lines changed: 64 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,36 +9,37 @@
99
package application.presenter.serialization
1010

1111
import application.presenter.api.report.SurgeryReportApiDto
12-
import application.presenter.api.report.SurgeryReportEntry
1312
import application.presenter.api.report.SurgicalProcessStepAggregateDataApiDto
1413
import application.presenter.api.report.measurements.AggregateDataApiDto
1514
import application.presenter.api.report.medicaldevice.MedicalTechnologyUsageApiDto
1615
import application.presenter.serialization.HealthcareUserSerializer.toApiDto
16+
import application.presenter.serialization.HealthcareUserSerializer.toHealthcareUser
17+
import application.presenter.serialization.HealthcareUserSerializer.toPatientVitalSigns
1718
import application.presenter.serialization.MedicalDeviceSerializer.toApiDto
19+
import application.presenter.serialization.MedicalDeviceSerializer.toImplantableMedicalDevice
20+
import application.presenter.serialization.MedicalDeviceSerializer.toMedicalTechnology
1821
import application.presenter.serialization.RoomSerializer.toApiDto
1922
import application.presenter.serialization.RoomSerializer.toApiDtoType
23+
import application.presenter.serialization.RoomSerializer.toRoom
24+
import application.presenter.serialization.RoomSerializer.toRoomEnvironmentalData
25+
import application.presenter.serialization.RoomSerializer.toRoomType
2026
import application.presenter.serialization.SurgicalProcessSerializer.toApiDto
27+
import application.presenter.serialization.SurgicalProcessSerializer.toSurgicalProcessStep
2128
import application.presenter.serialization.TrackingInformationSerializer.toApiDto
29+
import application.presenter.serialization.TrackingInformationSerializer.toTrackingInfo
30+
import entity.surgeryreport.healthcareuser.PatientID
31+
import entity.surgeryreport.healthprofessional.HealthProfessionalID
32+
import entity.surgeryreport.measurements.AggregateData
33+
import entity.surgeryreport.medicaldevice.MedicalTechnologyUsage
34+
import entity.surgeryreport.process.SurgicalProcessID
2235
import entity.surgeryreport.report.SurgeryProcessStepAggregateData
2336
import entity.surgeryreport.report.SurgeryReport
37+
import java.time.Instant
2438

2539
/**
2640
* Serializers for data to return to API.
2741
*/
2842
object SurgeryReportSerializer {
29-
/**
30-
* Extension method to obtain the surgery report entry information.
31-
* @return the surgery report entry.
32-
*/
33-
fun SurgeryReport.toSurgeryReportEntry(): SurgeryReportEntry = SurgeryReportEntry(
34-
surgicalProcessID = this.surgicalProcessID.value,
35-
patientId = this.patientID.value,
36-
patientName = this.healthcareUser?.name,
37-
patientSurname = this.healthcareUser?.surname,
38-
surgicalProcessDescription = this.surgicalProcessDescription,
39-
surgeryDate = this.surgeryDate.toString(),
40-
)
41-
4243
/**
4344
* Extension method to obtain the surgery report api dto.
4445
* @return the surgery report dto for api.
@@ -62,6 +63,33 @@ object SurgeryReportSerializer {
6263
additionalData = this.additionalData,
6364
)
6465

66+
/**
67+
* Extension method to obtain the dto of a surgery report.
68+
* @return the surgery report dto for api.
69+
*/
70+
fun SurgeryReportApiDto.toSurgeryReport(): SurgeryReport = SurgeryReport(
71+
surgicalProcessID = SurgicalProcessID(this.surgicalProcessID),
72+
surgeryDate = Instant.parse(this.surgeryDate),
73+
surgicalProcessDescription = this.surgicalProcessDescription,
74+
patientID = PatientID(this.patientID),
75+
roomsInvolved = this.roomsInvolved.map { it.toRoom() }.toSet(),
76+
inChargeHealthProfessional = this.inChargeHealthProfessionalID?.let { HealthProfessionalID(it) },
77+
healthcareUser = this.healthcareUser?.toHealthcareUser(),
78+
stepData = stepData
79+
.mapKeys { (step, _) -> step.toSurgicalProcessStep() }
80+
.mapValues { (_, data) -> data.toSurgicalProcessStepAggregateData() },
81+
consumedImplantableMedicalDevices = this.consumedImplantableMedicalDevice
82+
.map {
83+
it.toImplantableMedicalDevice()
84+
}.toSet(),
85+
medicalTechnologyUsageData = this.medicalTechnologyUsageData
86+
.map {
87+
MedicalTechnologyUsage(Instant.parse(it.dateTime), it.medicalTechnology.toMedicalTechnology())
88+
}.toSet(),
89+
healthProfessionalTrackingInformation = this.healthProfessionalTrackingInformation.map { it.toTrackingInfo() },
90+
additionalData = this.additionalData,
91+
)
92+
6593
private fun SurgeryProcessStepAggregateData.toApiDto(): SurgicalProcessStepAggregateDataApiDto =
6694
SurgicalProcessStepAggregateDataApiDto(
6795
startDateTime = this.startDateTime.toString(),
@@ -83,4 +111,26 @@ object SurgeryReportSerializer {
83111
)
84112
},
85113
)
114+
115+
private fun SurgicalProcessStepAggregateDataApiDto.toSurgicalProcessStepAggregateData() =
116+
SurgeryProcessStepAggregateData(
117+
startDateTime = Instant.parse(this.startDateTime),
118+
stopDateTime = Instant.parse(this.stopDateTime),
119+
patientVitalSignsAggregateData = AggregateData(
120+
average = this.patientVitalSignAggregateData.average.toPatientVitalSigns(),
121+
std = this.patientVitalSignAggregateData.std.toPatientVitalSigns(),
122+
maximum = this.patientVitalSignAggregateData.maximum.toPatientVitalSigns(),
123+
minimum = this.patientVitalSignAggregateData.minimum.toPatientVitalSigns(),
124+
),
125+
environmentalAggregateData = this.environmentalAggregateData
126+
.mapKeys { (type, _) -> type.toRoomType() }
127+
.mapValues { (_, data) ->
128+
AggregateData(
129+
average = data.average.toRoomEnvironmentalData(),
130+
std = data.std.toRoomEnvironmentalData(),
131+
maximum = data.maximum.toRoomEnvironmentalData(),
132+
minimum = data.minimum.toRoomEnvironmentalData(),
133+
)
134+
},
135+
)
86136
}

src/main/kotlin/application/presenter/serialization/SurgicalProcessSerializer.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,16 @@ object SurgicalProcessSerializer {
2626
SurgicalProcessStep.END_OF_SURGERY -> SurgicalProcessStepApiDto.END_OF_SURGERY
2727
SurgicalProcessStep.PATIENT_UNDER_OBSERVATION -> SurgicalProcessStepApiDto.PATIENT_UNDER_OBSERVATION
2828
}
29+
30+
/**
31+
* Extension method to obtain the api dto of the surgical process step.
32+
*/
33+
fun SurgicalProcessStepApiDto.toSurgicalProcessStep(): SurgicalProcessStep = when (this) {
34+
SurgicalProcessStepApiDto.PATIENT_IN_PREPARATION -> SurgicalProcessStep.PATIENT_IN_PREPARATION
35+
SurgicalProcessStepApiDto.PATIENT_ON_OPERATING_TABLE -> SurgicalProcessStep.PATIENT_ON_OPERATING_TABLE
36+
SurgicalProcessStepApiDto.ANESTHESIA -> SurgicalProcessStep.ANESTHESIA
37+
SurgicalProcessStepApiDto.SURGERY_IN_PROGRESS -> SurgicalProcessStep.SURGERY_IN_PROGRESS
38+
SurgicalProcessStepApiDto.END_OF_SURGERY -> SurgicalProcessStep.END_OF_SURGERY
39+
SurgicalProcessStepApiDto.PATIENT_UNDER_OBSERVATION -> SurgicalProcessStep.PATIENT_UNDER_OBSERVATION
40+
}
2941
}

src/main/kotlin/application/presenter/serialization/TrackingInformationSerializer.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ package application.presenter.serialization
1111
import application.presenter.api.report.tracking.TrackApiDtoType
1212
import application.presenter.api.report.tracking.TrackingInformationApiDto
1313
import entity.surgeryreport.healthprofessional.HealthProfessionalID
14+
import entity.surgeryreport.room.RoomID
1415
import entity.surgeryreport.tracking.TrackType
1516
import entity.surgeryreport.tracking.TrackingInfo
17+
import java.time.Instant
1618

1719
/**
1820
* Serializers for data to return to API.
@@ -32,4 +34,19 @@ object TrackingInformationSerializer {
3234
TrackType.ENTER -> TrackApiDtoType.ENTER
3335
TrackType.EXIT -> TrackApiDtoType.EXIT
3436
}
37+
38+
/**
39+
* Extension method to obtain tracking information about an health professional from dto.
40+
*/
41+
fun TrackingInformationApiDto.toTrackingInfo(): TrackingInfo<HealthProfessionalID> = TrackingInfo(
42+
dateTime = Instant.parse(this.dateTime),
43+
individual = HealthProfessionalID(this.healthProfessionalId),
44+
roomID = RoomID(this.roomID),
45+
trackType = this.trackType.toTrackType(),
46+
)
47+
48+
private fun TrackApiDtoType.toTrackType(): TrackType = when (this) {
49+
TrackApiDtoType.ENTER -> TrackType.ENTER
50+
TrackApiDtoType.EXIT -> TrackType.EXIT
51+
}
3552
}

0 commit comments

Comments
 (0)