Add initial application structure with HomeController and routing
This commit is contained in:
@@ -1,49 +0,0 @@
|
|||||||
package controllers
|
|
||||||
|
|
||||||
import javax.inject._
|
|
||||||
import play.api.mvc._
|
|
||||||
|
|
||||||
import play.api.data._
|
|
||||||
import play.api.data.Forms._
|
|
||||||
|
|
||||||
case class $model;format="Camel"$Data(name: String, age: Int)
|
|
||||||
object $model;format="Camel"$Data {
|
|
||||||
def unapply(data: $model;format="Camel"$Data): Option[(String, Int)] = Some((data.name, data.age))
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: Add the following to conf/routes to enable compilation of this class:
|
|
||||||
/*
|
|
||||||
GET /$model;format="camel"$ controllers.$model;format="Camel"$Controller.$model;format="camel"$Get()
|
|
||||||
POST /$model;format="camel"$ controllers.$model;format="Camel"$Controller.$model;format="camel"$Post()
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* $model;format="Camel"$ form controller for Play Scala
|
|
||||||
*/
|
|
||||||
class $model;format="Camel"$Controller @Inject()(mcc: MessagesControllerComponents) extends MessagesAbstractController(mcc) {
|
|
||||||
|
|
||||||
val $model;format="camel"$Form = Form(
|
|
||||||
mapping(
|
|
||||||
"name" -> text,
|
|
||||||
"age" -> number
|
|
||||||
)($model;format="Camel"$Data.apply)($model;format="Camel"$Data.unapply)
|
|
||||||
)
|
|
||||||
|
|
||||||
def $model;format="camel"$Get() = Action { implicit request: MessagesRequest[AnyContent] =>
|
|
||||||
Ok(views.html.$model;format="camel"$.form($model;format="camel"$Form))
|
|
||||||
}
|
|
||||||
|
|
||||||
def $model;format="camel"$Post() = Action { implicit request: MessagesRequest[AnyContent] =>
|
|
||||||
$model;format="camel"$Form.bindFromRequest().fold(
|
|
||||||
formWithErrors => {
|
|
||||||
// binding failure, you retrieve the form containing errors:
|
|
||||||
BadRequest(views.html.$model;format="camel"$.form(formWithErrors))
|
|
||||||
},
|
|
||||||
$model;format="camel"$Data => {
|
|
||||||
/* binding success, you get the actual value. */
|
|
||||||
/* flashing uses a short lived cookie */
|
|
||||||
Redirect(routes.$model;format="Camel"$Controller.$model;format="camel"$Get()).flashing("success" -> ("Successful " + $model;format="camel"$Data.toString))
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
@($model;format="camel"$Form: Form[$model;format="Camel"$Data])(implicit request: MessagesRequestHeader)
|
|
||||||
|
|
||||||
<h1>$model;format="camel"$ form</h1>
|
|
||||||
|
|
||||||
@request.flash.get("success").getOrElse("")
|
|
||||||
|
|
||||||
@helper.form(action = routes.$model;format="Camel"$Controller.$model;format="camel"$Post()) {
|
|
||||||
@helper.CSRF.formField
|
|
||||||
@helper.inputText($model;format="camel"$Form("name"))
|
|
||||||
@helper.inputText($model;format="camel"$Form("age"))
|
|
||||||
<input type="submit" value="submit"/>
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
# Routes
|
|
||||||
# This file defines all application routes (Higher priority routes first)
|
|
||||||
# https://www.playframework.com/documentation/latest/ScalaRouting
|
|
||||||
# ~~~~
|
|
||||||
|
|
||||||
# An example controller showing a sample home page
|
|
||||||
GET / controllers.HomeController.index()
|
|
||||||
GET /$model;format="camel"$ controllers.$model;format="Camel"$Controller.$model;format="camel"$Get()
|
|
||||||
POST /$model;format="camel"$ controllers.$model;format="Camel"$Controller.$model;format="camel"$Post()
|
|
||||||
|
|
||||||
# Map static resources from the /public folder to the /assets URL path
|
|
||||||
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
description = Generates a Controller with form handling
|
|
||||||
model = user
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
package controllers
|
|
||||||
|
|
||||||
import play.api.mvc._
|
|
||||||
import play.api.i18n._
|
|
||||||
import org.scalatestplus.play._
|
|
||||||
import org.scalatestplus.play.guice.GuiceOneAppPerTest
|
|
||||||
import play.api.http.FileMimeTypes
|
|
||||||
import play.api.test._
|
|
||||||
import play.api.test.Helpers._
|
|
||||||
import play.api.test.CSRFTokenHelper._
|
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext
|
|
||||||
|
|
||||||
/**
|
|
||||||
* $model;format="Camel"$ form controller specs
|
|
||||||
*/
|
|
||||||
class $model;format="Camel"$ControllerSpec extends PlaySpec with GuiceOneAppPerTest with Injecting {
|
|
||||||
|
|
||||||
// Provide stubs for components based off Helpers.stubControllerComponents()
|
|
||||||
class StubComponents(cc:ControllerComponents = stubControllerComponents()) extends MessagesControllerComponents {
|
|
||||||
override val parsers: PlayBodyParsers = cc.parsers
|
|
||||||
override val messagesApi: MessagesApi = cc.messagesApi
|
|
||||||
override val langs: Langs = cc.langs
|
|
||||||
override val fileMimeTypes: FileMimeTypes = cc.fileMimeTypes
|
|
||||||
override val executionContext: ExecutionContext = cc.executionContext
|
|
||||||
override val actionBuilder: ActionBuilder[Request, AnyContent] = cc.actionBuilder
|
|
||||||
override val messagesActionBuilder: MessagesActionBuilder = new DefaultMessagesActionBuilderImpl(parsers.default, messagesApi)(executionContext)
|
|
||||||
}
|
|
||||||
|
|
||||||
"$model;format="Camel"$Controller GET" should {
|
|
||||||
|
|
||||||
"render the index page from a new instance of controller" in {
|
|
||||||
val controller = new $model;format="Camel"$Controller(new StubComponents())
|
|
||||||
val request = FakeRequest().withCSRFToken
|
|
||||||
val home = controller.$model;format="camel"$Get().apply(request)
|
|
||||||
|
|
||||||
status(home) mustBe OK
|
|
||||||
contentType(home) mustBe Some("text/html")
|
|
||||||
}
|
|
||||||
|
|
||||||
"render the index page from the application" in {
|
|
||||||
val controller = inject[$model;format="Camel"$Controller]
|
|
||||||
val request = FakeRequest().withCSRFToken
|
|
||||||
val home = controller.$model;format="camel"$Get().apply(request)
|
|
||||||
|
|
||||||
status(home) mustBe OK
|
|
||||||
contentType(home) mustBe Some("text/html")
|
|
||||||
}
|
|
||||||
|
|
||||||
"render the index page from the router" in {
|
|
||||||
val request = CSRFTokenHelper.addCSRFToken(FakeRequest(GET, "/$model;format="camel"$"))
|
|
||||||
val home = route(app, request).get
|
|
||||||
|
|
||||||
status(home) mustBe OK
|
|
||||||
contentType(home) mustBe Some("text/html")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
"$model;format="Camel"$Controller POST" should {
|
|
||||||
"process form" in {
|
|
||||||
val request = {
|
|
||||||
FakeRequest(POST, "/$model;format="camel"$")
|
|
||||||
.withFormUrlEncodedBody("name" -> "play", "age" -> "4")
|
|
||||||
}
|
|
||||||
val home = route(app, request).get
|
|
||||||
|
|
||||||
status(home) mustBe SEE_OTHER
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -135,3 +135,5 @@ target
|
|||||||
/.settings
|
/.settings
|
||||||
/RUNNING_PID
|
/RUNNING_PID
|
||||||
/knockoutwhist/
|
/knockoutwhist/
|
||||||
|
/knockoutwhist-web/.g8/
|
||||||
|
/knockoutwhist-web/.bsp/
|
||||||
|
|||||||
70
build.sbt
70
build.sbt
@@ -1,33 +1,13 @@
|
|||||||
name := """KnockOutWhist-Web"""
|
ThisBuild / scalaVersion := "3.5.1"
|
||||||
organization := "com.example"
|
|
||||||
|
|
||||||
version := "1.0-SNAPSHOT"
|
lazy val commonSettings = Seq(
|
||||||
|
libraryDependencies += "org.scalactic" %% "scalactic" % "3.2.18",
|
||||||
lazy val root = (project in file(".")).enablePlugins(PlayScala).settings(
|
libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.18" % "test",
|
||||||
Compile / unmanagedSourceDirectories += baseDirectory.value / "knockoutwhist",
|
libraryDependencies += "io.github.mkpaz" % "atlantafx-base" % "2.0.1",
|
||||||
Test / unmanagedSourceDirectories += baseDirectory.value / "knockoutwhist"
|
libraryDependencies += "org.scalafx" %% "scalafx" % "22.0.0-R33",
|
||||||
)
|
libraryDependencies += "org.scala-lang.modules" %% "scala-xml" % "2.3.0",
|
||||||
|
libraryDependencies += "org.playframework" %% "play-json" % "3.1.0-M1",
|
||||||
|
libraryDependencies ++= {
|
||||||
scalaVersion := "3.5.1"
|
|
||||||
|
|
||||||
libraryDependencies += guice
|
|
||||||
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "7.0.2" % Test
|
|
||||||
|
|
||||||
libraryDependencies ++= Seq(
|
|
||||||
guice,
|
|
||||||
"org.scalatestplus.play" %% "scalatestplus-play" % "7.0.2" % Test,
|
|
||||||
)
|
|
||||||
|
|
||||||
libraryDependencies += "org.scalactic" %% "scalactic" % "3.2.18"
|
|
||||||
libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.18" % "test"
|
|
||||||
libraryDependencies +="io.github.mkpaz" % "atlantafx-base" % "2.0.1"
|
|
||||||
libraryDependencies += "org.scalafx" %% "scalafx" % "22.0.0-R33"
|
|
||||||
|
|
||||||
libraryDependencies += "org.scala-lang.modules" %% "scala-xml" % "2.3.0"
|
|
||||||
libraryDependencies += "org.playframework" %% "play-json" % "3.1.0-M1"
|
|
||||||
|
|
||||||
libraryDependencies ++= {
|
|
||||||
// Determine OS version of JavaFX binaries
|
// Determine OS version of JavaFX binaries
|
||||||
lazy val osName = System.getProperty("os.name") match {
|
lazy val osName = System.getProperty("os.name") match {
|
||||||
case n if n.startsWith("Linux") => "linux"
|
case n if n.startsWith("Linux") => "linux"
|
||||||
@@ -37,14 +17,30 @@ libraryDependencies ++= {
|
|||||||
}
|
}
|
||||||
Seq("base", "controls", "fxml", "graphics", "media", "swing", "web")
|
Seq("base", "controls", "fxml", "graphics", "media", "swing", "web")
|
||||||
.map(m => "org.openjfx" % s"javafx-$m" % "21" classifier osName)
|
.map(m => "org.openjfx" % s"javafx-$m" % "21" classifier osName)
|
||||||
}
|
},
|
||||||
|
libraryDependencies += guice,
|
||||||
|
Test / testOptions += Tests.Filter(_.equals("de.knockoutwhist.TestSequence")),
|
||||||
|
coverageEnabled := true,
|
||||||
|
coverageFailOnMinimum := true,
|
||||||
|
coverageMinimumStmtTotal := 85,
|
||||||
|
coverageMinimumBranchTotal := 100
|
||||||
|
)
|
||||||
|
|
||||||
libraryDependencies += "net.codingwell" %% "scala-guice" % "7.0.0"
|
lazy val knockoutwhist = project.in(file("knockoutwhist"))
|
||||||
|
.settings(
|
||||||
|
commonSettings
|
||||||
|
)
|
||||||
|
|
||||||
Test / testOptions += Tests.Filter(_.equals("de.knockoutwhist.TestSequence"))
|
lazy val knockoutwhistWeb = project.in(file("knockoutwhist-web"))
|
||||||
|
.enablePlugins(PlayScala)
|
||||||
coverageEnabled := true
|
.dependsOn(knockoutwhist % "compile->compile;test->test")
|
||||||
coverageFailOnMinimum := true
|
.settings(
|
||||||
coverageMinimumStmtTotal := 85
|
commonSettings,
|
||||||
coverageMinimumBranchTotal := 100
|
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "7.0.2" % Test
|
||||||
|
)
|
||||||
|
|
||||||
|
lazy val root = (project in file("."))
|
||||||
|
.aggregate(knockoutwhist, knockoutwhistWeb)
|
||||||
|
.settings(
|
||||||
|
name := "KnockOutWhistRoot"
|
||||||
|
)
|
||||||
|
|||||||
1
knockoutwhist
Symbolic link
1
knockoutwhist
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/home/janis/Workspaces/IntelliJ/knockoutwhist
|
||||||
@@ -3,6 +3,7 @@ package controllers
|
|||||||
import javax.inject._
|
import javax.inject._
|
||||||
import play.api._
|
import play.api._
|
||||||
import play.api.mvc._
|
import play.api.mvc._
|
||||||
|
import de.knockoutwhist.KnockOutWhist
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This controller creates an `Action` to handle HTTP requests to the
|
* This controller creates an `Action` to handle HTTP requests to the
|
||||||
@@ -11,8 +12,6 @@ import play.api.mvc._
|
|||||||
@Singleton
|
@Singleton
|
||||||
class HomeController @Inject()(val controllerComponents: ControllerComponents) extends BaseController {
|
class HomeController @Inject()(val controllerComponents: ControllerComponents) extends BaseController {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an Action to render an HTML page.
|
* Create an Action to render an HTML page.
|
||||||
*
|
*
|
||||||
@@ -21,6 +20,6 @@ class HomeController @Inject()(val controllerComponents: ControllerComponents) e
|
|||||||
* a path of `/`.
|
* a path of `/`.
|
||||||
*/
|
*/
|
||||||
def index() = Action { implicit request: Request[AnyContent] =>
|
def index() = Action { implicit request: Request[AnyContent] =>
|
||||||
Ok(views.html.index())
|
Ok(views.html.main.render("KnockoutWhist", views.html.index.render()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
@()
|
@()
|
||||||
|
|
||||||
@main("Welcome to Play") {
|
@main("Welcome to Play") {
|
||||||
|
|
||||||
<h1>Welcome to Play!</h1>
|
<h1>Welcome to Play!</h1>
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 687 B After Width: | Height: | Size: 687 B |
Reference in New Issue
Block a user