Skip to content

Commit 93a64f0

Browse files
committed
refactor fromItemsToCheckpointWithPartitioningDTO
1 parent 30c0766 commit 93a64f0

File tree

1 file changed

+36
-34
lines changed

1 file changed

+36
-34
lines changed

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

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

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

19-
import io.circe.{DecodingFailure, Json}
19+
import io.circe.Json
2020
import za.co.absa.atum.model.dto.{
2121
CheckpointWithPartitioningDTO,
2222
MeasureDTO,
@@ -50,6 +50,26 @@ object CheckpointItemWithPartitioningFromDB {
5050
private def fromItemsToCheckpointWithPartitioningDTO(
5151
checkpointItems: Seq[CheckpointItemWithPartitioningFromDB]
5252
): Either[Throwable, CheckpointWithPartitioningDTO] = {
53+
for {
54+
measurements <- extractMeasurements(checkpointItems)
55+
partitioning <- extractPartitioning(checkpointItems)
56+
} yield {
57+
CheckpointWithPartitioningDTO(
58+
id = checkpointItems.head.idCheckpoint,
59+
name = checkpointItems.head.checkpointName,
60+
author = checkpointItems.head.author,
61+
measuredByAtumAgent = checkpointItems.head.measuredByAtumAgent,
62+
processStartTime = checkpointItems.head.checkpointStartTime,
63+
processEndTime = checkpointItems.head.checkpointEndTime,
64+
measurements = measurements.toSet,
65+
partitioning
66+
)
67+
}
68+
}
69+
70+
private def extractMeasurements(
71+
checkpointItems: Seq[CheckpointItemWithPartitioningFromDB]
72+
): Either[Throwable, Seq[MeasurementDTO]] = {
5373
val measurementsOrErr = checkpointItems.map { checkpointItem =>
5474
checkpointItem.measurementValue.as[MeasureResultDTO].map { measureResult =>
5575
MeasurementDTO(
@@ -61,40 +81,22 @@ object CheckpointItemWithPartitioningFromDB {
6181
)
6282
}
6383
}
64-
val partitioningOrErr: Either[DecodingFailure, PartitioningWithIdDTO] = {
65-
val decodingResult = checkpointItems.head.partitioning.as[PartitioningForDB]
66-
decodingResult.map{ partitioningForDB =>
67-
val partitioningDTO = partitioningForDB.keys.map { key =>
68-
PartitionDTO(key, partitioningForDB.keysToValuesMap(key))
69-
}
70-
PartitioningWithIdDTO(
71-
id = checkpointItems.head.idPartitioning,
72-
partitioning = partitioningDTO,
73-
author = checkpointItems.head.partitioningAuthor
74-
)
75-
}
76-
}
77-
78-
}
79-
80-
val measurementsErrors = measurementsOrErr.collect { case Left(err) => err }
81-
val errors = measurementsErrors ++ partitioningOrErr.left.toSeq
84+
measurementsOrErr
85+
.collectFirst { case Left(err) => Left(err) }
86+
.getOrElse(Right(measurementsOrErr.collect { case Right(measurement) => measurement }))
87+
}
8288

83-
if (errors.nonEmpty) {
84-
Left(measurementsErrors.head)
85-
} else {
86-
val measurements = measurementsOrErr.collect { case Right(measurement) => measurement }.toSet
87-
Right(
88-
CheckpointWithPartitioningDTO(
89-
id = checkpointItems.head.idCheckpoint,
90-
name = checkpointItems.head.checkpointName,
91-
author = checkpointItems.head.author,
92-
measuredByAtumAgent = checkpointItems.head.measuredByAtumAgent,
93-
processStartTime = checkpointItems.head.checkpointStartTime,
94-
processEndTime = checkpointItems.head.checkpointEndTime,
95-
measurements = measurements,
96-
partitioningOrErr.toOption.get
97-
)
89+
private def extractPartitioning(
90+
checkpointItems: Seq[CheckpointItemWithPartitioningFromDB]
91+
): Either[Throwable, PartitioningWithIdDTO] = {
92+
checkpointItems.head.partitioning.as[PartitioningForDB].map { partitioningForDB =>
93+
val partitioningDTO = partitioningForDB.keys.map { key =>
94+
PartitionDTO(key, partitioningForDB.keysToValuesMap(key))
95+
}
96+
PartitioningWithIdDTO(
97+
id = checkpointItems.head.idPartitioning,
98+
partitioning = partitioningDTO,
99+
author = checkpointItems.head.partitioningAuthor
98100
)
99101
}
100102
}

0 commit comments

Comments
 (0)