Sin descripción

UtilitiesClass.scala 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package fr.natan.akkastreamfileprocessingapi.service
  2. import akka.NotUsed
  3. import akka.stream.scaladsl.{Flow, Sink, Source}
  4. import com.typesafe.scalalogging.slf4j.Logger
  5. import fr.natan.akkastreamfileprocessingapi.businessexceptions.TvSerieNotFoundException
  6. import fr.natan.akkastreamfileprocessingapi.models.ModelsAndJsonMap.Person
  7. import fr.natan.akkastreamfileprocessingapi.models.ModelsBuilder.buildPersonModel
  8. import fr.natan.akkastreamfileprocessingapi.service.AkkaStreamComponents.{actorSystem, buildAndValidateSource}
  9. import java.io.File
  10. import scala.concurrent.ExecutionContext.Implicits.global
  11. import scala.concurrent.Future
  12. import scala.util.{Failure, Success}
  13. object UtilitiesClass {
  14. def getTvSerieIdByPrimaryTitle(primaryTitle: String, inputFile: File): Future[Option[String]] = {
  15. val source: Source[Map[String, String], _] = buildAndValidateSource(inputFile = inputFile)
  16. val tvSerieIdFuture: Future[Option[String]] = source
  17. .filter((rowMap: Map[String, String]) => {
  18. rowMap.getOrElse(key = "primaryTitle", default = "") == primaryTitle
  19. })
  20. .map((rowMap: Map[String, String]) => rowMap.get("tconst"))
  21. .runWith(Sink.head)
  22. tvSerieIdFuture
  23. }
  24. def getListOfPersonsIDByTvSerieID(tvSerieIdFuture: Future[Option[String]], inputFile: File): Future[IndexedSeq[Option[String]]] = {
  25. val source: Source[Map[String, String], _] = buildAndValidateSource(inputFile = inputFile)
  26. val personsIDsFuture: Future[IndexedSeq[Option[String]]] = source
  27. .filter((rowMaps: Map[String, String]) => {
  28. rowMaps.getOrElse(key = "tconst", default = "") == tvSerieIdFuture.value.get.get.get
  29. })
  30. .map((rowMap: Map[String, String]) => {
  31. rowMap.get(key = "nconst")
  32. })
  33. .runWith(Sink.collection)
  34. personsIDsFuture
  35. }
  36. def getListOfPersonsForTvSerie(listPersonsIDsFuture: Future[IndexedSeq[Option[String]]], inputFile: File): Future[IndexedSeq[Person]] = {
  37. val source: Source[Map[String, String], _] = buildAndValidateSource(inputFile = inputFile)
  38. val personsFuture: Future[IndexedSeq[Person]] = source
  39. .filter((rowMaps: Map[String, String]) => {
  40. listPersonsIDsFuture.value.get.get.contains(rowMaps.get(key = "nconst"))
  41. })
  42. .map((rowMap: Map[String, String]) => {
  43. buildPersonModel(rowMap)
  44. })
  45. .runWith(Sink.collection)
  46. personsFuture
  47. }
  48. private def getTvSerieIdFlow(tvSerieID: String): Flow[Map[String, String], Option[String], NotUsed] = {
  49. val tvSerieIDFlow = Flow[Map[String, String]]
  50. .filter(rowMap => rowMap.getOrElse(key = "tconst", default = "") == tvSerieID)
  51. .map(row => row.get("tconst"))
  52. tvSerieIDFlow
  53. }
  54. def getTvSerieIDFuture(tvSerieID: String, logger: Logger, inputFile: File): Future[Option[String]] = {
  55. val source: Source[Map[String, String], _] = buildAndValidateSource(inputFile = inputFile)
  56. val tvSerieIdFuture: Future[Option[String]] = source
  57. .filter(rowMap => rowMap.getOrElse(key = "tconst", default = "") == tvSerieID)
  58. .map(row => row.get("tconst"))
  59. .runWith(Sink.head)
  60. tvSerieIdFuture.onComplete({
  61. case Failure(noSuchElementException: NoSuchElementException) => throw new TvSerieNotFoundException()
  62. case Failure(exception: Exception) => throw new RuntimeException()
  63. case Success(value) => logger.info(s"$value")
  64. })
  65. tvSerieIdFuture
  66. }
  67. }

Powered by TurnKey Linux.