| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package fr.natan.akkastreamfileprocessingapi.service
-
- import akka.actor.ActorSystem
- import akka.stream.scaladsl.{Flow, Sink, Source}
- import akka.{Done, NotUsed}
- import com.typesafe.scalalogging.slf4j.Logger
- import fr.natan.akkastreamfileprocessingapi.datasource.Datasource.titleBasics
- import fr.natan.akkastreamfileprocessingapi.models.TvSeries
- import fr.natan.akkastreamfileprocessingapi.service.AkkaStreamComponents.{buildAndValidateSource, buildTvSerieFlow, buildTvSeriesSink, buildfilterByMoviePrimaryTitleFlow}
- import org.slf4j.LoggerFactory
- import org.springframework.stereotype.Component
-
- import scala.concurrent.ExecutionContext.Implicits.global
- import scala.concurrent.Future
- import scala.util.{Failure, Success}
-
- @Component
- class AkkaStreamFileProcessingImpl extends AkkaStreamFileProcessing {
-
- implicit val actorSystem: ActorSystem = ActorSystem("AkkaStreamActor")
- implicit val logger: Logger = Logger(LoggerFactory.getLogger(this.getClass))
-
- override def getAllMovies(): Unit = {
-
- val source: Source[String, NotUsed] = buildAndValidateSource(inputFile = titleBasics)
- val sink: Sink[TvSeries, Future[Done]] = buildTvSeriesSink(logger = logger)
-
-
- val startingTime: Long = System.currentTimeMillis()
-
- //graph sink->flow->sink
- source
- .via(flow = buildTvSerieFlow(movieID = "tconst"))
- .runWith(sink = sink)
- .andThen {
- case Success(value) =>
- val elapsedTime: Long = (System.currentTimeMillis() - startingTime) / 1000
- logger.info(s"$value: successfully processing file, elapsed time $titleBasics: $elapsedTime sec")
- case Failure(error: Error) => logger.error(s"$error")
- }
-
- }
-
- override def getMoviesByTitle(moviePrimaryTitle: String): Unit = {
-
- val source: Source[String, NotUsed] = buildAndValidateSource(inputFile = titleBasics)
- val sink: Sink[TvSeries, Future[Done]] = buildTvSeriesSink(logger = logger)
-
- val filterByMovieTitleFlow: Flow[String, TvSeries, NotUsed] =
- buildfilterByMoviePrimaryTitleFlow(moviePrimaryTitle = moviePrimaryTitle)
-
- val startTime: Long = System.currentTimeMillis()
- val listTvSeries: Future[Done]= source.via(flow = filterByMovieTitleFlow)
- .runWith(sink = sink)
- .andThen {
- case Success(value) =>
- val elapsedTime: Long = (System.currentTimeMillis() - startTime) / 1000
- logger.info(s"$value: successfully processing file, elapsed time $titleBasics: $elapsedTime sec")
- case Failure(error: Error) => logger.error(s"$error")
- }
- }
-
- override def getAllPersons(): Unit = {
- ???
- }
- }
-
|