Newer
Older
support / app / src / main / scala / mdr / pdb / app / Api.scala
package mdr.pdb.app

import zio.*
import mdr.pdb.api.Endpoints
import sttp.client3.*
import sttp.tapir.DecodeResult
import org.scalajs.dom
import scala.concurrent.Future

trait Api:
  def alive(): Future[DecodeResult[Either[Unit, String]]]

object ApiLive:
  def layer(base: Option[String]): ULayer[Api] = ZLayer.succeed(ApiLive(base))

class ApiLive(base: Option[String]) extends Api with CustomTapir:
  private val backend = FetchBackend(
    FetchOptions(
      Some(dom.RequestCredentials.`same-origin`),
      Some(dom.RequestMode.`same-origin`)
    )
  )
  private val baseUri = base.map(b => uri"${b}")
  private val aliveClient = toClient(Endpoints.alive, baseUri, backend)
  override def alive(): Future[DecodeResult[Either[Unit, String]]] =
    aliveClient(())