From f3622e1064282554336ca1b860674811434e9337 Mon Sep 17 00:00:00 2001 From: "andrea.giulianelli" Date: Wed, 22 Feb 2023 17:14:00 +0100 Subject: [PATCH] chore: add serializer for api --- .../presenter/api/serializer/ApiSerializer.kt | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/main/kotlin/application/presenter/api/serializer/ApiSerializer.kt diff --git a/src/main/kotlin/application/presenter/api/serializer/ApiSerializer.kt b/src/main/kotlin/application/presenter/api/serializer/ApiSerializer.kt new file mode 100644 index 00000000..650f9782 --- /dev/null +++ b/src/main/kotlin/application/presenter/api/serializer/ApiSerializer.kt @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023. Smart Operating Block + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + */ + +package application.presenter.api.serializer + +import application.presenter.api.model.EnvironmentalDataApiDto +import application.presenter.api.model.RoomApiDto +import application.presenter.api.model.RoomApiDtoType +import application.presenter.api.model.ValueWithUnit +import entity.zone.Room +import entity.zone.RoomEnvironmentalData +import entity.zone.RoomType + +/** + * Serializer for data to return in API. + */ +object ApiSerializer { + /** + * Extension method to convert [Room] API DTO to [application.presenter.api.model.RoomApiDto] class. + */ + fun Room.toRoomApiDto(): RoomApiDto = RoomApiDto( + id = this.id.value, + name = this.name.orEmpty(), + zoneId = this.zoneId.value, + type = this.type.toRoomApiDtoType(), + environmentalData = this.environmentalData.toEnvironmentDataApiDto() + ) + + private fun RoomEnvironmentalData.toEnvironmentDataApiDto() = EnvironmentalDataApiDto( + temperature = this.temperature?.let { ValueWithUnit(it.value, it.unit.toString()) }, + humidity = this.humidity?.percentage, + luminosity = this.luminosity?.let { ValueWithUnit(it.value, it.unit.toString()) }, + presence = this.presence?.presenceDetected + ) + + private fun RoomType.toRoomApiDtoType() = when (this) { + RoomType.OPERATING_ROOM -> RoomApiDtoType.OPERATING_ROOM + RoomType.PRE_OPERATING_ROOM -> RoomApiDtoType.PRE_OPERATING_ROOM + } +}