package lu.foyer import lu.foyer.clients.* import zio.* import zio.Console.* import zio.http.* import zio.http.codec.* import zio.http.codec.PathCodec.path import zio.http.endpoint.* import zio.http.endpoint.openapi.OpenAPIGen import zio.http.endpoint.openapi.SwaggerUI import zio.schema.* import java.net.URI import java.time.LocalDate import java.util.UUID object HttpServer: def routes = for client <- ZIO.service[ClientController] openAPI = OpenAPIGen.fromEndpoints(client.endpoints) yield client.routes @@ Middleware.debug ++ SwaggerUI.routes("docs" / "openapi", openAPI) object App extends ZIOAppDefault: val app = for routes <- HttpServer.routes server <- Server.serve(routes).provide(Server.default) yield server override def run = app.provide( CommandEngine.layer[ClientCommand, ClientEvent, ClientState], ClientHandlers.layer, ClientReducer.layer, ClientEventRepositoryInMemory.layer, ClientStateRepositoryInMemory.layer, ClientController.layer )