Как вы подключаете свои бизнес-сервисы к маршрутам zio-http (ZIO 2.x)?
Мне не удается подключить zio-http к моим внутренним службам, определенным как ZLayers. Примеры, которые я нашел, просто показывают, как выставлять конечные точки HTTP, такие как:
import zio._
import zhttp.http._
import zhttp.service.Server
object HelloWorld extends App {
val app = Http.collect[Request] {
case Method.GET -> !! / "text" => Response.text("Hello World!")
}
override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] =
Server.start(8090, app).exitCode
}
Теперь предположим, что у меня есть следующая служба ZIO с соответствующим ZLayer в сопутствующем объекте:
case class GetDepartmentUseCaseImpl(getDepartmentByCodeDrivenPort: GetDepartmentByCodeDrivenPort) extends GetDepartmentUseCase {
override def execute(param: String): ZIO[Any, Throwable, Option[Department]] = {
for {
dep: Option[Department] <- getDepartmentByCodeDrivenPort.get(param)
} yield dep
}
}
object GetDepartmentUseCaseImpl {
val layer = ZLayer.fromFunction(GetDepartmentUseCaseImpl.apply _)
}
Как вы раскрываете конечную точку
/departments/{id}
который вызывает предыдущую службу и возвращает 200 + json для некоторого (отдела) и 404 для ничего?
Используемые версии:
val zioVersion = "2.0.0-RC5"
val zioHttpVersion = "2.0.0-RC7"