diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala new file mode 100644 index 0000000..fedcd48 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/Api.scala @@ -0,0 +1,18 @@ +package mdr.pdb.app + +import mdr.pdb.api.Endpoints +import sttp.client3.* +import sttp.tapir.DecodeResult +import org.scalajs.dom +import scala.concurrent.Future + +class Api(base: Option[String]) extends CustomTapir: + private val backend = FetchBackend( + FetchOptions( + Some(dom.RequestCredentials.`same-origin`), + Some(dom.RequestMode.`same-origin`) + ) + ) + private val baseUri = base.map(b => uri"${b}") + val alive: Unit => Future[DecodeResult[Either[Unit, String]]] = + toClient(Endpoints.alive, baseUri, backend) diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala new file mode 100644 index 0000000..fedcd48 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/Api.scala @@ -0,0 +1,18 @@ +package mdr.pdb.app + +import mdr.pdb.api.Endpoints +import sttp.client3.* +import sttp.tapir.DecodeResult +import org.scalajs.dom +import scala.concurrent.Future + +class Api(base: Option[String]) extends CustomTapir: + private val backend = FetchBackend( + FetchOptions( + Some(dom.RequestCredentials.`same-origin`), + Some(dom.RequestMode.`same-origin`) + ) + ) + private val baseUri = base.map(b => uri"${b}") + val alive: Unit => Future[DecodeResult[Either[Unit, String]]] = + toClient(Endpoints.alive, baseUri, backend) diff --git a/app/src/main/scala/mdr/pdb/app/CustomTapir.scala b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala new file mode 100644 index 0000000..9dc2de1 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala @@ -0,0 +1,7 @@ +package mdr.pdb.app + +import sttp.tapir.client.sttp.SttpClientInterpreter + +trait CustomTapir extends mdr.pdb.api.CustomTapir with SttpClientInterpreter + +object CustomTapir extends CustomTapir diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala new file mode 100644 index 0000000..fedcd48 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/Api.scala @@ -0,0 +1,18 @@ +package mdr.pdb.app + +import mdr.pdb.api.Endpoints +import sttp.client3.* +import sttp.tapir.DecodeResult +import org.scalajs.dom +import scala.concurrent.Future + +class Api(base: Option[String]) extends CustomTapir: + private val backend = FetchBackend( + FetchOptions( + Some(dom.RequestCredentials.`same-origin`), + Some(dom.RequestMode.`same-origin`) + ) + ) + private val baseUri = base.map(b => uri"${b}") + val alive: Unit => Future[DecodeResult[Either[Unit, String]]] = + toClient(Endpoints.alive, baseUri, backend) diff --git a/app/src/main/scala/mdr/pdb/app/CustomTapir.scala b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala new file mode 100644 index 0000000..9dc2de1 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala @@ -0,0 +1,7 @@ +package mdr.pdb.app + +import sttp.tapir.client.sttp.SttpClientInterpreter + +trait CustomTapir extends mdr.pdb.api.CustomTapir with SttpClientInterpreter + +object CustomTapir extends CustomTapir diff --git a/app/src/main/scala/mdr/pdb/app/Main.scala b/app/src/main/scala/mdr/pdb/app/Main.scala index b9f4fe1..8c9960c 100644 --- a/app/src/main/scala/mdr/pdb/app/Main.scala +++ b/app/src/main/scala/mdr/pdb/app/Main.scala @@ -34,6 +34,11 @@ def main(args: Array[String]): Unit = import Routes.given onLoad { + Api(Some("/mdr/pdb/api")) + .alive(()) + .foreach(org.scalajs.dom.console.log(_))(using + scala.concurrent.ExecutionContext.global + ) setupAirstream() val appContainer = dom.document.querySelector("#app") val _ = diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala new file mode 100644 index 0000000..fedcd48 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/Api.scala @@ -0,0 +1,18 @@ +package mdr.pdb.app + +import mdr.pdb.api.Endpoints +import sttp.client3.* +import sttp.tapir.DecodeResult +import org.scalajs.dom +import scala.concurrent.Future + +class Api(base: Option[String]) extends CustomTapir: + private val backend = FetchBackend( + FetchOptions( + Some(dom.RequestCredentials.`same-origin`), + Some(dom.RequestMode.`same-origin`) + ) + ) + private val baseUri = base.map(b => uri"${b}") + val alive: Unit => Future[DecodeResult[Either[Unit, String]]] = + toClient(Endpoints.alive, baseUri, backend) diff --git a/app/src/main/scala/mdr/pdb/app/CustomTapir.scala b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala new file mode 100644 index 0000000..9dc2de1 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala @@ -0,0 +1,7 @@ +package mdr.pdb.app + +import sttp.tapir.client.sttp.SttpClientInterpreter + +trait CustomTapir extends mdr.pdb.api.CustomTapir with SttpClientInterpreter + +object CustomTapir extends CustomTapir diff --git a/app/src/main/scala/mdr/pdb/app/Main.scala b/app/src/main/scala/mdr/pdb/app/Main.scala index b9f4fe1..8c9960c 100644 --- a/app/src/main/scala/mdr/pdb/app/Main.scala +++ b/app/src/main/scala/mdr/pdb/app/Main.scala @@ -34,6 +34,11 @@ def main(args: Array[String]): Unit = import Routes.given onLoad { + Api(Some("/mdr/pdb/api")) + .alive(()) + .foreach(org.scalajs.dom.console.log(_))(using + scala.concurrent.ExecutionContext.global + ) setupAirstream() val appContainer = dom.document.querySelector("#app") val _ = diff --git a/app/src/main/scala/mdr/pdb/app/state/AppState.scala b/app/src/main/scala/mdr/pdb/app/state/AppState.scala index fee56f4..945a313 100644 --- a/app/src/main/scala/mdr/pdb/app/state/AppState.scala +++ b/app/src/main/scala/mdr/pdb/app/state/AppState.scala @@ -55,11 +55,7 @@ .asInstanceOf[js.Dictionary[js.Object]] .values // TODO: is there a more efficient way to parse from JS object directly? - .map { o => - val parsed = JSON.stringify(o).fromJson[UserInfo] - parsed.left.foreach(org.scalajs.dom.console.log(_)) - parsed - } + .map(JSON.stringify(_).fromJson[UserInfo]) .collect { case Right(u) => u } diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala new file mode 100644 index 0000000..fedcd48 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/Api.scala @@ -0,0 +1,18 @@ +package mdr.pdb.app + +import mdr.pdb.api.Endpoints +import sttp.client3.* +import sttp.tapir.DecodeResult +import org.scalajs.dom +import scala.concurrent.Future + +class Api(base: Option[String]) extends CustomTapir: + private val backend = FetchBackend( + FetchOptions( + Some(dom.RequestCredentials.`same-origin`), + Some(dom.RequestMode.`same-origin`) + ) + ) + private val baseUri = base.map(b => uri"${b}") + val alive: Unit => Future[DecodeResult[Either[Unit, String]]] = + toClient(Endpoints.alive, baseUri, backend) diff --git a/app/src/main/scala/mdr/pdb/app/CustomTapir.scala b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala new file mode 100644 index 0000000..9dc2de1 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala @@ -0,0 +1,7 @@ +package mdr.pdb.app + +import sttp.tapir.client.sttp.SttpClientInterpreter + +trait CustomTapir extends mdr.pdb.api.CustomTapir with SttpClientInterpreter + +object CustomTapir extends CustomTapir diff --git a/app/src/main/scala/mdr/pdb/app/Main.scala b/app/src/main/scala/mdr/pdb/app/Main.scala index b9f4fe1..8c9960c 100644 --- a/app/src/main/scala/mdr/pdb/app/Main.scala +++ b/app/src/main/scala/mdr/pdb/app/Main.scala @@ -34,6 +34,11 @@ def main(args: Array[String]): Unit = import Routes.given onLoad { + Api(Some("/mdr/pdb/api")) + .alive(()) + .foreach(org.scalajs.dom.console.log(_))(using + scala.concurrent.ExecutionContext.global + ) setupAirstream() val appContainer = dom.document.querySelector("#app") val _ = diff --git a/app/src/main/scala/mdr/pdb/app/state/AppState.scala b/app/src/main/scala/mdr/pdb/app/state/AppState.scala index fee56f4..945a313 100644 --- a/app/src/main/scala/mdr/pdb/app/state/AppState.scala +++ b/app/src/main/scala/mdr/pdb/app/state/AppState.scala @@ -55,11 +55,7 @@ .asInstanceOf[js.Dictionary[js.Object]] .values // TODO: is there a more efficient way to parse from JS object directly? - .map { o => - val parsed = JSON.stringify(o).fromJson[UserInfo] - parsed.left.foreach(org.scalajs.dom.console.log(_)) - parsed - } + .map(JSON.stringify(_).fromJson[UserInfo]) .collect { case Right(u) => u } diff --git a/app/vite.config.js b/app/vite.config.js index 3dc484b..aa57b89 100644 --- a/app/vite.config.js +++ b/app/vite.config.js @@ -6,7 +6,7 @@ //const __dirname = path.dirname(moduleUrl.pathname) // https://vitejs.dev/config/ -export default ({mode}) => { +export default ({ mode }) => { const mainJS = `./${appInfo.bundleMain(mode)}` console.log('mainJS', mainJS) const script = `` @@ -37,6 +37,11 @@ } }, base: '/mdr/pdb/', + server: { + proxy: { + '/mdr/pdb/api': 'http://localhost:8080' + } + }, build: { outDir: 'target/vite' } diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala new file mode 100644 index 0000000..fedcd48 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/Api.scala @@ -0,0 +1,18 @@ +package mdr.pdb.app + +import mdr.pdb.api.Endpoints +import sttp.client3.* +import sttp.tapir.DecodeResult +import org.scalajs.dom +import scala.concurrent.Future + +class Api(base: Option[String]) extends CustomTapir: + private val backend = FetchBackend( + FetchOptions( + Some(dom.RequestCredentials.`same-origin`), + Some(dom.RequestMode.`same-origin`) + ) + ) + private val baseUri = base.map(b => uri"${b}") + val alive: Unit => Future[DecodeResult[Either[Unit, String]]] = + toClient(Endpoints.alive, baseUri, backend) diff --git a/app/src/main/scala/mdr/pdb/app/CustomTapir.scala b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala new file mode 100644 index 0000000..9dc2de1 --- /dev/null +++ b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala @@ -0,0 +1,7 @@ +package mdr.pdb.app + +import sttp.tapir.client.sttp.SttpClientInterpreter + +trait CustomTapir extends mdr.pdb.api.CustomTapir with SttpClientInterpreter + +object CustomTapir extends CustomTapir diff --git a/app/src/main/scala/mdr/pdb/app/Main.scala b/app/src/main/scala/mdr/pdb/app/Main.scala index b9f4fe1..8c9960c 100644 --- a/app/src/main/scala/mdr/pdb/app/Main.scala +++ b/app/src/main/scala/mdr/pdb/app/Main.scala @@ -34,6 +34,11 @@ def main(args: Array[String]): Unit = import Routes.given onLoad { + Api(Some("/mdr/pdb/api")) + .alive(()) + .foreach(org.scalajs.dom.console.log(_))(using + scala.concurrent.ExecutionContext.global + ) setupAirstream() val appContainer = dom.document.querySelector("#app") val _ = diff --git a/app/src/main/scala/mdr/pdb/app/state/AppState.scala b/app/src/main/scala/mdr/pdb/app/state/AppState.scala index fee56f4..945a313 100644 --- a/app/src/main/scala/mdr/pdb/app/state/AppState.scala +++ b/app/src/main/scala/mdr/pdb/app/state/AppState.scala @@ -55,11 +55,7 @@ .asInstanceOf[js.Dictionary[js.Object]] .values // TODO: is there a more efficient way to parse from JS object directly? - .map { o => - val parsed = JSON.stringify(o).fromJson[UserInfo] - parsed.left.foreach(org.scalajs.dom.console.log(_)) - parsed - } + .map(JSON.stringify(_).fromJson[UserInfo]) .collect { case Right(u) => u } diff --git a/app/vite.config.js b/app/vite.config.js index 3dc484b..aa57b89 100644 --- a/app/vite.config.js +++ b/app/vite.config.js @@ -6,7 +6,7 @@ //const __dirname = path.dirname(moduleUrl.pathname) // https://vitejs.dev/config/ -export default ({mode}) => { +export default ({ mode }) => { const mainJS = `./${appInfo.bundleMain(mode)}` console.log('mainJS', mainJS) const script = `` @@ -37,6 +37,11 @@ } }, base: '/mdr/pdb/', + server: { + proxy: { + '/mdr/pdb/api': 'http://localhost:8080' + } + }, build: { outDir: 'target/vite' } diff --git a/build.sbt b/build.sbt index 7f91099..c9cb595 100644 --- a/build.sbt +++ b/build.sbt @@ -43,7 +43,8 @@ IWDeps.laminextUI, IWDeps.laminextTailwind, IWDeps.laminextValidationCore, - IWDeps.tapirSttpClient + IWDeps.tapirSttpClient, + IWDeps.sttpClientCore ) .settings( scalaJSLinkerConfig ~= { _.withModuleKind(ModuleKind.ESModule) },