foyer-dsi-assure-2035/api/src/lu/foyer/App.scala

58 lines
1.6 KiB
Scala
Raw Normal View History

2025-02-27 18:45:46 +01:00
package lu.foyer
2025-02-28 05:40:32 +01:00
import lu.foyer.clients.*
2025-10-06 18:30:22 +02:00
import lu.foyer.contracts.*
2025-02-27 18:45:46 +01:00
import zio.*
import zio.Console.*
import zio.http.*
import zio.http.codec.*
2025-02-28 05:40:32 +01:00
import zio.http.codec.PathCodec.path
import zio.http.endpoint.*
2025-02-27 18:45:46 +01:00
import zio.http.endpoint.openapi.OpenAPIGen
import zio.http.endpoint.openapi.SwaggerUI
2025-02-28 05:40:32 +01:00
import zio.schema.*
2025-10-06 18:30:22 +02:00
import zio.http.Middleware.cors
import zio.http.Middleware.CorsConfig
import zio.http.Header.AccessControlAllowOrigin
2025-02-27 18:45:46 +01:00
2025-02-28 05:40:32 +01:00
import java.net.URI
import java.time.LocalDate
import java.util.UUID
2025-02-27 18:45:46 +01:00
2025-03-03 00:24:13 +01:00
object HttpServer:
2025-10-06 18:30:22 +02:00
val corsConfig = CorsConfig(_ => Some(AccessControlAllowOrigin.All))
2025-03-03 00:24:13 +01:00
def routes =
for
2025-10-06 18:30:22 +02:00
client <- ZIO.service[ClientController]
contract <- ZIO.service[ContractController]
openAPI = OpenAPIGen.fromEndpoints(client.endpoints ++ contract.endpoints)
yield (client.routes ++ contract.routes)
@@ cors(corsConfig) @@ Middleware.debug
++ SwaggerUI.routes("docs" / "openapi", openAPI)
2025-03-03 00:24:13 +01:00
2025-02-27 18:45:46 +01:00
object App extends ZIOAppDefault:
2025-03-03 00:24:13 +01:00
val app =
for
routes <- HttpServer.routes
server <- Server.serve(routes).provide(Server.default)
yield server
2025-02-27 18:45:46 +01:00
2025-03-03 00:24:13 +01:00
override def run = app.provide(
CommandEngine.layer[ClientCommand, ClientEvent, ClientState],
2025-10-06 18:30:22 +02:00
CommandEngine.layer[ContractCommand, ContractEvent, ContractState],
2025-03-03 00:24:13 +01:00
ClientHandlers.layer,
2025-10-06 18:30:22 +02:00
ContractHandlers.layer,
2025-03-03 00:24:13 +01:00
ClientReducer.layer,
2025-10-06 18:30:22 +02:00
ContractReducer.layer,
2025-03-03 00:24:13 +01:00
ClientEventRepositoryInMemory.layer,
2025-10-06 18:30:22 +02:00
ContractEventRepositoryInMemory.layer,
2025-03-03 00:24:13 +01:00
ClientStateRepositoryInMemory.layer,
2025-10-06 18:30:22 +02:00
ContractStateRepositoryInMemory.layer,
ClientController.layer,
ContractController.layer,
PremiumServiceImpl.layer,
EmployeeServiceImpl.layer
2025-03-03 00:24:13 +01:00
)