/sales/read-front/src/main/scala/ecommerce/sales/HttpService.scala

https://github.com/pawelkaczor/ddd-leaven-akka-v2 · Scala · 45 lines · 33 code · 12 blank · 0 comment · 0 complexity · 2808c70a690b78857254894d02f0f95a MD5 · raw file

  1. package ecommerce.sales
  2. import akka.actor.{Actor, ActorLogging, Props}
  3. import akka.http.scaladsl.Http
  4. import akka.http.scaladsl.server.Directives
  5. import pl.newicom.dddd.streams.ImplicitMaterializer
  6. import akka.util.Timeout
  7. import com.typesafe.config.Config
  8. import ecommerce.sales.app.ReservationViewEndpoint
  9. import io.github.lhotari.akka.http.health.HealthEndpoint.createDefaultHealthRoute
  10. import org.json4s.Formats
  11. import pl.newicom.dddd.serialization.JsonSerHints._
  12. import pl.newicom.dddd.view.sql.SqlViewStore
  13. import scala.concurrent.duration.FiniteDuration
  14. import slick.jdbc.{JdbcProfile, PostgresProfile}
  15. object HttpService {
  16. def props(interface: String, port: Int, askTimeout: FiniteDuration): Props =
  17. Props(new HttpService(interface, port)(askTimeout))
  18. }
  19. class HttpService(interface: String, port: Int)(implicit askTimeout: Timeout) extends Actor with ActorLogging
  20. with SalesReadFrontConfiguration with ImplicitMaterializer with Directives {
  21. import context.dispatcher
  22. implicit val formats: Formats = fromConfig(config)
  23. implicit val profile: JdbcProfile = PostgresProfile
  24. Http(context.system).bindAndHandle(route, interface, port)
  25. log.info(s"Listening on $interface:$port")
  26. override def receive: Receive = Actor.emptyBehavior
  27. override def config: Config = context.system.settings.config
  28. lazy val endpoints: ReservationViewEndpoint = new ReservationViewEndpoint
  29. private def route = pathPrefix("ecommerce" / "sales") {
  30. createDefaultHealthRoute() ~
  31. provide(new SqlViewStore(config))(endpoints)
  32. }
  33. }