Skip to content

Commit

Permalink
Fixes #120 - refactored the controller added computation method in th…
Browse files Browse the repository at this point in the history
…e service
  • Loading branch information
TebaleloS committed Mar 25, 2024
1 parent 1896eba commit ac6aa3a
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package za.co.absa.atum.server.api.controller

import za.co.absa.atum.model.dto._
import za.co.absa.atum.server.api.exception.ServiceError
import za.co.absa.atum.server.api.service.PartitioningService
import za.co.absa.atum.server.model.ErrorResponse
import zio._
Expand All @@ -25,14 +26,7 @@ class PartitioningControllerImpl(partitioningService: PartitioningService)
extends PartitioningController with BaseController {

override def createPartitioningIfNotExists(partitioning: PartitioningSubmitDTO): IO[ErrorResponse, AtumContextDTO] = {
serviceCallWithStatus[Unit, AtumContextDTO](
partitioningService.createPartitioningIfNotExists(partitioning),
_ => {
val measures: Set[MeasureDTO] = Set(partitioningService.getPartitioningMeasures(partitioning))
val additionalData: AdditionalDataDTO = partitioningService.getPartioningAdditionalData(partitioning)
AtumContextDTO(partitioning.partitioning, measures, additionalData)
}
)
partitioningService.returnAtumContext(partitioning)
}

override def createOrUpdateAdditionalData(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ trait PartitioningRepository {

def getPartitioningAdditionalData(
partitioning: PartitioningSubmitDTO
): IO[DatabaseError, Either[StatusException, Seq[AdditionalDataDTO]]]
): IO[DatabaseError, Either[StatusException, AdditionalDataDTO]]

def createOrUpdateAdditionalData(additionalData: AdditionalDataSubmitDTO):
IO[DatabaseError, Either[StatusException, Unit]]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package za.co.absa.atum.server.api.service

import za.co.absa.atum.model.dto.{AdditionalDataSubmitDTO, AdditionalDataDTO, PartitioningSubmitDTO, MeasureDTO}
import za.co.absa.atum.model.dto.{AdditionalDataDTO, AdditionalDataSubmitDTO, AtumContextDTO, MeasureDTO, PartitioningSubmitDTO}
import za.co.absa.atum.server.api.exception.ServiceError
import za.co.absa.fadb.exceptions.StatusException
import zio.IO
Expand All @@ -30,9 +30,12 @@ trait PartitioningService {
def getPartitioningMeasures(partitioning: PartitioningSubmitDTO):
IO[ServiceError, Either[StatusException, Seq[MeasureDTO]]]

def getPartioningAdditionalData(partitioning: PartitioningSubmitDTO):
IO[ServiceError, Either[StatusException, Seq[AdditionalDataDTO]]]
def getPartitioningAdditionalData(partitioning: PartitioningSubmitDTO):
IO[ServiceError, Either[StatusException, AdditionalDataDTO]]

def createOrUpdateAdditionalData(additionalData: AdditionalDataSubmitDTO):
IO[ServiceError, Either[StatusException, Unit]]

def returnAtumContext(partitioning: PartitioningSubmitDTO):
IO[ServiceError, AtumContextDTO]
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package za.co.absa.atum.server.api.service

import za.co.absa.atum.model.dto.{AdditionalDataSubmitDTO, PartitioningSubmitDTO}
import za.co.absa.atum.model.dto.{AdditionalDataDTO, AdditionalDataSubmitDTO, AtumContextDTO, MeasureDTO, PartitioningSubmitDTO}
import za.co.absa.atum.server.api.exception.ServiceError
import za.co.absa.atum.server.api.repository.PartitioningRepository
import za.co.absa.fadb.exceptions.StatusException
Expand All @@ -41,6 +41,42 @@ class PartitioningServiceImpl(partitioningRepository: PartitioningRepository)
)
}

override def getPartitioningMeasures(partitioning: PartitioningSubmitDTO): IO[ServiceError, Either[StatusException, Seq[MeasureDTO]]] = {
repositoryCallWithStatus(
partitioningRepository.getPartitioningMeasures(partitioning), "getPartitioningMeasures"
)
}

override def getPartitioningAdditionalData(partitioning: PartitioningSubmitDTO): IO[ServiceError, Either[StatusException, AdditionalDataDTO]] = {
repositoryCallWithStatus(
partitioningRepository.getPartitioningAdditionalData(partitioning), "getPartitioningAdditionalData"
)
}

def returnAtumContext(partitioning: PartitioningSubmitDTO): IO[ServiceError, AtumContextDTO] = {
for {
partitioning <- createPartitioningIfNotExists(partitioning)
.flatMap {
case Left(_) => ZIO.fail(ServiceError("Failed to create or retrieve partitioning"))
case Right(_) => ZIO.succeed(partitioning)
}
.mapError(error => ServiceError(error.message))

additionalData <- getPartitioningAdditionalData(partitioning)
.flatMap {
case Left(_) => ZIO.succeed(Map[String, Option[String]])
case Right(value) => ZIO.succeed(value)
}
.mapError(error => ServiceError(error.message))

measures <- getPartitioningMeasures(partitioning)
.flatMap {
case Left(_) => ZIO.succeed(Set.empty[MeasureDTO])
case Right(value) => ZIO.succeed(value.toSet)
}
.mapError(error => ServiceError(error.message))
} yield AtumContextDTO(partitioning.partitioning, measures, additionalData)
}
}

object PartitioningServiceImpl {
Expand Down

0 comments on commit ac6aa3a

Please sign in to comment.