Custom Endpoints
Defining a Route
// modules/l0/.../l0/Main.scala
override def routes(implicit context: L0NodeContext[IO]): HttpRoutes[IO] = HttpRoutes.of {
case GET -> Root / "addresses" =>
OptionT(context.getLastCurrencySnapshot)
.flatMap(_.dataApplication.toOptionT)
.flatMapF(da => deserializeState(da.onChainState).map(_.toOption))
.value
.flatMap {
case Some(value) => Ok(value.addresses)
case None => NotFound()
}
} // modules/l0/.../l0/Main.scala
override def routes(implicit context: L0NodeContext[IO]): HttpRoutes[IO] = CustomRoutes[IO](calculatedStateService).public
// modules/l0/.../l0/CustomRoutes.scala
case class CustomRoutes[F[_] : Async](calculatedStateService: CalculatedStateService[F]) extends Http4sDsl[F] with PublicRoutes[F] {
@derive(encoder, decoder)
case class CalculatedStateResponse(
ordinal : Long,
calculatedState: CheckInDataCalculatedState
)
private def getLatestCalculatedState: F[Response[F]] = {
calculatedStateService.getCalculatedState
.map(state => CalculatedStateResponse(state.ordinal.value.value, state.state))
.flatMap(Ok(_))
}
private val routes: HttpRoutes[F] = HttpRoutes.of[F] {
case GET -> Root / "calculated-state" / "latest" => getLatestCalculatedState
}
val public: HttpRoutes[F] =
CORS
.policy
.withAllowCredentials(false)
.httpRoutes(routes)
override protected def prefixPath: InternalUrlPrefix = "/"
}Custom Route Prefix
Examples
Last updated
Was this helpful?