Skip to content

Commit 8d777f6

Browse files
committed
#188: moving the circe-related implicit conversions to a companion object of a given DTO
1 parent d6fe29d commit 8d777f6

File tree

3 files changed

+27
-28
lines changed

3 files changed

+27
-28
lines changed

model/src/main/scala/za/co/absa/atum/model/dto/MeasureResultDTO.scala

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package za.co.absa.atum.model.dto
1818

19+
import io.circe.{Decoder, Encoder}
20+
1921
case class MeasureResultDTO(
2022
mainValue: MeasureResultDTO.TypedValue,
2123
supportValues: Map[String, MeasureResultDTO.TypedValue] = Map.empty
@@ -36,4 +38,29 @@ object MeasureResultDTO {
3638
case object Double extends ResultValueType
3739
}
3840

41+
42+
implicit val encodeResultValueType: Encoder[MeasureResultDTO.ResultValueType] = Encoder.encodeString.contramap {
43+
case MeasureResultDTO.ResultValueType.String => "String"
44+
case MeasureResultDTO.ResultValueType.Long => "Long"
45+
case MeasureResultDTO.ResultValueType.BigDecimal => "BigDecimal"
46+
case MeasureResultDTO.ResultValueType.Double => "Double"
47+
}
48+
49+
implicit val decodeResultValueType: Decoder[MeasureResultDTO.ResultValueType] = Decoder.decodeString.emap {
50+
case "String" => Right(MeasureResultDTO.ResultValueType.String)
51+
case "Long" => Right(MeasureResultDTO.ResultValueType.Long)
52+
case "BigDecimal" => Right(MeasureResultDTO.ResultValueType.BigDecimal)
53+
case "Double" => Right(MeasureResultDTO.ResultValueType.Double)
54+
case other => Left(s"Cannot decode $other as ResultValueType")
55+
}
56+
57+
implicit val encodeTypedValue: Encoder[MeasureResultDTO.TypedValue] =
58+
Encoder.forProduct2("value", "valueType")(tv => (tv.value, tv.valueType))
59+
60+
implicit val decodeTypedValue: Decoder[MeasureResultDTO.TypedValue] =
61+
Decoder.forProduct2("value", "valueType")(MeasureResultDTO.TypedValue.apply)
62+
63+
implicit val decodeMeasureResultDTO: Decoder[MeasureResultDTO] =
64+
Decoder.forProduct2("mainValue", "supportValues")(MeasureResultDTO.apply)
65+
3966
}

server/src/main/scala/za/co/absa/atum/server/api/database/DoobieImplicits.scala

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@ import cats.Show
2020
import cats.data.NonEmptyList
2121
import doobie.{Get, Put}
2222
import doobie.postgres.implicits._
23-
import io.circe.{Decoder, Encoder}
2423
import org.postgresql.jdbc.PgArray
2524
import org.postgresql.util.PGobject
26-
import za.co.absa.atum.model.dto.MeasureResultDTO
2725

2826
import scala.util.{Failure, Success, Try}
2927

@@ -157,27 +155,4 @@ object DoobieImplicits {
157155
}
158156
}
159157

160-
implicit val encodeResultValueType: Encoder[MeasureResultDTO.ResultValueType] = Encoder.encodeString.contramap {
161-
case MeasureResultDTO.ResultValueType.String => "String"
162-
case MeasureResultDTO.ResultValueType.Long => "Long"
163-
case MeasureResultDTO.ResultValueType.BigDecimal => "BigDecimal"
164-
case MeasureResultDTO.ResultValueType.Double => "Double"
165-
}
166-
167-
implicit val decodeResultValueType: Decoder[MeasureResultDTO.ResultValueType] = Decoder.decodeString.emap {
168-
case "String" => Right(MeasureResultDTO.ResultValueType.String)
169-
case "Long" => Right(MeasureResultDTO.ResultValueType.Long)
170-
case "BigDecimal" => Right(MeasureResultDTO.ResultValueType.BigDecimal)
171-
case "Double" => Right(MeasureResultDTO.ResultValueType.Double)
172-
case other => Left(s"Cannot decode $other as ResultValueType")
173-
}
174-
175-
implicit val encodeTypedValue: Encoder[MeasureResultDTO.TypedValue] =
176-
Encoder.forProduct2("value", "valueType")(tv => (tv.value, tv.valueType))
177-
178-
implicit val decodeTypedValue: Decoder[MeasureResultDTO.TypedValue] =
179-
Decoder.forProduct2("value", "valueType")(MeasureResultDTO.TypedValue.apply)
180-
181-
implicit val decodeMeasureResultDTO: Decoder[MeasureResultDTO] =
182-
Decoder.forProduct2("mainValue", "supportValues")(MeasureResultDTO.apply)
183158
}

server/src/main/scala/za/co/absa/atum/server/model/CheckpointFromDB.scala

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,10 @@ package za.co.absa.atum.server.model
1818

1919
import za.co.absa.atum.model.dto.{CheckpointDTO, MeasureDTO, MeasureResultDTO, MeasurementDTO, PartitioningDTO}
2020
import io.circe.{DecodingFailure, Json}
21-
import io.circe.generic.auto._
2221

2322
import java.time.ZonedDateTime
2423
import java.util.UUID
2524

26-
import za.co.absa.atum.server.api.database.DoobieImplicits.decodeResultValueType
27-
2825
case class CheckpointFromDB(
2926
idCheckpoint: UUID,
3027
checkpointName: String,

0 commit comments

Comments
 (0)