/invoicing/write-front/src/main/scala/ecommerce/invoicing/app/HttpService.scala

https://github.com/pawelkaczor/ddd-leaven-akka-v2 · Scala · 37 lines · 26 code · 11 blank · 0 comment · 0 complexity · 346bfa49cf8d0fce4f9bedf854cbdd46 MD5 · raw file

  1. package ecommerce.invoicing.app
  2. import akka.actor.{Actor, ActorLogging, Props}
  3. import akka.http.scaladsl.Http
  4. import akka.util.Timeout
  5. import ecommerce.invoicing.{Command => InvoicingCommand, InvoicingOfficeId}
  6. import org.json4s.Formats
  7. import pl.newicom.dddd.serialization.JsonSerHints.fromConfig
  8. import pl.newicom.dddd.writefront.HttpCommandHandler
  9. import scala.concurrent.duration.FiniteDuration
  10. object HttpService {
  11. def props(interface: String, port: Int, askTimeout: FiniteDuration): Props =
  12. Props(new HttpService(interface, port)(askTimeout))
  13. }
  14. class HttpService(interface: String, port: Int)(implicit val timeout: Timeout)
  15. extends Actor with InvoicingFrontConfiguration with HttpCommandHandler with ActorLogging {
  16. implicit val formats: Formats = fromConfig(config)
  17. Http(context.system).bindAndHandle(route, interface, port)
  18. log.info(s"Listening on $interface:$port")
  19. override def receive = Actor.emptyBehavior
  20. override def offices = Set(InvoicingOfficeId)
  21. private def route = pathPrefix("ecommerce") {
  22. path("invoicing") {
  23. handle[InvoicingCommand]
  24. }
  25. }
  26. }