99package application.presenter.serialization
1010
1111import application.presenter.api.report.SurgeryReportApiDto
12- import application.presenter.api.report.SurgeryReportEntry
1312import application.presenter.api.report.SurgicalProcessStepAggregateDataApiDto
1413import application.presenter.api.report.measurements.AggregateDataApiDto
1514import application.presenter.api.report.medicaldevice.MedicalTechnologyUsageApiDto
1615import application.presenter.serialization.HealthcareUserSerializer.toApiDto
16+ import application.presenter.serialization.HealthcareUserSerializer.toHealthcareUser
17+ import application.presenter.serialization.HealthcareUserSerializer.toPatientVitalSigns
1718import application.presenter.serialization.MedicalDeviceSerializer.toApiDto
19+ import application.presenter.serialization.MedicalDeviceSerializer.toImplantableMedicalDevice
20+ import application.presenter.serialization.MedicalDeviceSerializer.toMedicalTechnology
1821import application.presenter.serialization.RoomSerializer.toApiDto
1922import 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
2026import application.presenter.serialization.SurgicalProcessSerializer.toApiDto
27+ import application.presenter.serialization.SurgicalProcessSerializer.toSurgicalProcessStep
2128import 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
2235import entity.surgeryreport.report.SurgeryProcessStepAggregateData
2336import entity.surgeryreport.report.SurgeryReport
37+ import java.time.Instant
2438
2539/* *
2640 * Serializers for data to return to API.
2741 */
2842object 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}
0 commit comments