From d8af92787df668bf8924030d55e744c86cd2bff2 Mon Sep 17 00:00:00 2001 From: efim Date: Sun, 23 Apr 2023 11:12:08 +0400 Subject: [PATCH] adding backend project will try to do rest & websocket api with http4s --- .../sunshine/planningpoker/App.scala | 32 +++++++++++++++++ build.sbt | 34 +++++++++++++++++-- .../sunshine/planningpoker/Models.scala | 5 ++- .../planningpoker/PlanningPokerUrgh.scala | 1 + .../sunshine/planningpoker/RoomView.scala | 1 + .../sunshine/planningpoker/TableView.scala | 1 + 6 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 backend/src/main/scala/industries/sunshine/planningpoker/App.scala rename {src => common/src}/main/scala/industries/sunshine/planningpoker/Models.scala (96%) rename {src => frontend/src}/main/scala/industries/sunshine/planningpoker/PlanningPokerUrgh.scala (94%) rename {src => frontend/src}/main/scala/industries/sunshine/planningpoker/RoomView.scala (96%) rename {src => frontend/src}/main/scala/industries/sunshine/planningpoker/TableView.scala (97%) diff --git a/backend/src/main/scala/industries/sunshine/planningpoker/App.scala b/backend/src/main/scala/industries/sunshine/planningpoker/App.scala new file mode 100644 index 0000000..c7772f4 --- /dev/null +++ b/backend/src/main/scala/industries/sunshine/planningpoker/App.scala @@ -0,0 +1,32 @@ +package industries.sunshine.planningpoker + +import cats.effect._ +import cats.syntax.all._ +import org.http4s._, org.http4s.dsl.io._, org.http4s.implicits._ +import com.comcast.ip4s._ +import org.http4s.HttpRoutes +import org.http4s.dsl.io._ +import org.http4s.implicits._ +import org.http4s.ember.server._ + +object App extends IOApp.Simple { + + val service = HttpRoutes + .of[IO] { case _ => + Ok("hello") + } + .orNotFound + + override def run: IO[Unit] = { + val a = 1 + IO.println(s"Hello, World! $a") >> + EmberServerBuilder + .default[IO] + .withHost(ipv4"0.0.0.0") + .withPort(port"8080") + .withHttpApp(service) + .build + .use(_ => IO.never) + .as(ExitCode.Success) + } +} diff --git a/build.sbt b/build.sbt index 37e9db3..ece00d9 100644 --- a/build.sbt +++ b/build.sbt @@ -1,10 +1,14 @@ import org.scalajs.linker.interface.ModuleSplitStyle -lazy val planningPokerGrargh = project - .in(file(".")) +lazy val commonSettings = Seq( + scalaVersion := "3.2.0" +) + +lazy val frontend = project + .in(file("frontend")) .enablePlugins(ScalaJSPlugin) // Enable the Scala.js plugin in this project .settings( - scalaVersion := "3.2.0", + commonSettings, // Tell Scala.js that this is an application with a main method scalaJSUseMainModuleInitializer := true, @@ -29,3 +33,27 @@ lazy val planningPokerGrargh = project libraryDependencies += "org.scala-js" %%% "scalajs-dom" % "2.4.0", libraryDependencies += "com.raquo" %%% "laminar" % "15.0.1" ) + .dependsOn(common) + +lazy val backend = project + .in(file("backend")) + .settings( + commonSettings, + libraryDependencies ++= Seq( + "org.http4s" %% "http4s-ember-client" % http4sVersion, + "org.http4s" %% "http4s-ember-server" % http4sVersion, + "org.http4s" %% "http4s-dsl" % http4sVersion + ), + // available for 2.12, 2.13, 3.2 + libraryDependencies += "co.fs2" %% "fs2-core" % "3.6.1", + libraryDependencies += "org.typelevel" %% "cats-core" % "2.9.0", + libraryDependencies += "org.typelevel" %% "cats-effect" % "3.4.9" + ) + .dependsOn(common) + +val http4sVersion = "1.0.0-M39" +lazy val common = project + .in(file("common")) + .settings( + commonSettings + ) diff --git a/src/main/scala/industries/sunshine/planningpoker/Models.scala b/common/src/main/scala/industries/sunshine/planningpoker/Models.scala similarity index 96% rename from src/main/scala/industries/sunshine/planningpoker/Models.scala rename to common/src/main/scala/industries/sunshine/planningpoker/Models.scala index d063552..95d5f20 100644 --- a/src/main/scala/industries/sunshine/planningpoker/Models.scala +++ b/common/src/main/scala/industries/sunshine/planningpoker/Models.scala @@ -1,7 +1,8 @@ -package industries.sunshine.planningpoker +package industries.sunshine.planningpoker.common import java.util.UUID +object Models { /** view of the single planning poker round * @param players * \- people who are currently playing @@ -67,3 +68,5 @@ final case class ViewingRound( final class PlayerID final case class Player(name: String, id: PlayerID) + +} diff --git a/src/main/scala/industries/sunshine/planningpoker/PlanningPokerUrgh.scala b/frontend/src/main/scala/industries/sunshine/planningpoker/PlanningPokerUrgh.scala similarity index 94% rename from src/main/scala/industries/sunshine/planningpoker/PlanningPokerUrgh.scala rename to frontend/src/main/scala/industries/sunshine/planningpoker/PlanningPokerUrgh.scala index 800d1d5..69108ab 100644 --- a/src/main/scala/industries/sunshine/planningpoker/PlanningPokerUrgh.scala +++ b/frontend/src/main/scala/industries/sunshine/planningpoker/PlanningPokerUrgh.scala @@ -3,6 +3,7 @@ package industries.sunshine.planningpoker import scala.scalajs.js import scala.scalajs.js.annotation.* import com.raquo.laminar.api.L.{*, given} +import industries.sunshine.planningpoker.common.Models.* import org.scalajs.dom diff --git a/src/main/scala/industries/sunshine/planningpoker/RoomView.scala b/frontend/src/main/scala/industries/sunshine/planningpoker/RoomView.scala similarity index 96% rename from src/main/scala/industries/sunshine/planningpoker/RoomView.scala rename to frontend/src/main/scala/industries/sunshine/planningpoker/RoomView.scala index 11268cd..594528f 100644 --- a/src/main/scala/industries/sunshine/planningpoker/RoomView.scala +++ b/frontend/src/main/scala/industries/sunshine/planningpoker/RoomView.scala @@ -2,6 +2,7 @@ package industries.sunshine.planningpoker import scala.scalajs.js import com.raquo.laminar.api.L.{*, given} +import industries.sunshine.planningpoker.common.Models.* /** Rendering of the Room state */ diff --git a/src/main/scala/industries/sunshine/planningpoker/TableView.scala b/frontend/src/main/scala/industries/sunshine/planningpoker/TableView.scala similarity index 97% rename from src/main/scala/industries/sunshine/planningpoker/TableView.scala rename to frontend/src/main/scala/industries/sunshine/planningpoker/TableView.scala index b5d0b92..db6f3fd 100644 --- a/src/main/scala/industries/sunshine/planningpoker/TableView.scala +++ b/frontend/src/main/scala/industries/sunshine/planningpoker/TableView.scala @@ -3,6 +3,7 @@ package industries.sunshine.planningpoker import scala.scalajs.js import com.raquo.laminar.api.L.{*, given} import scala.scalajs.js.Dynamic.{global => g} +import industries.sunshine.planningpoker.common.Models.* object TableView { // new plan. map to players, split by playerId, map into specific card