1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package controllers
- import play.api.Play.current
- import play.api.db.DB
- import play.api.mvc._
- import play.api.libs.json.Json
- import java.util.concurrent._
- import scala.concurrent._
- import models.{World, Fortune}
- import utils._
- import utils.DbOperation._
- import scala.concurrent.Future
- import play.api.libs.concurrent.Execution.Implicits._
- import play.core.NamedThreadFactory
- object Application extends Controller {
- // Anorm code
- def getRandomWorlds(n: Int): Future[Seq[World]] = asyncDbOp { implicit connection =>
- val random = ThreadLocalRandom.current()
- for (_ <- 1 to n) yield {
- val randomId: Long = random.nextInt(TestDatabaseRows) + 1
- World.findById(randomId)
- }
- }
- def getFortunes(): Future[Seq[Fortune]] = asyncDbOp { implicit connection =>
- Fortune.getAll()
- }
- def updateWorlds(n: Int): Future[Seq[World]] = asyncDbOp { implicit connection =>
- val random = ThreadLocalRandom.current()
- for(_ <- 1 to n) yield {
- val randomId: Long = random.nextInt(TestDatabaseRows) + 1
- val world = World.findById(random.nextInt(TestDatabaseRows) + 1)
- val randomNumber: Long = random.nextInt(10000) + 1
- val updatedWorld = world.copy(randomNumber = randomNumber)
- World.updateRandom(updatedWorld)
- updatedWorld
- }
- }
- // Common code between Scala database code
- protected val TestDatabaseRows = 10000
- def db = Action.async {
- getRandomWorlds(1).map { worlds =>
- Ok(Json.toJson(worlds.head))
- }
- }
- def queries(countString: String) = Action.async {
- val n = parseCount(countString)
- getRandomWorlds(n).map { worlds =>
- Ok(Json.toJson(worlds))
- }
- }
- def fortunes() = Action.async {
- getFortunes().map { dbFortunes =>
- val appendedFortunes = Fortune(0, "Additional fortune added at request time.") :: (dbFortunes.to[List])
- Ok(views.html.fortune(appendedFortunes))
- }
- }
- def update(queries: String) = Action.async {
- val n = parseCount(queries)
- updateWorlds(n).map { worlds =>
- Ok(Json.toJson(worlds))
- }
- }
- private def parseCount(s: String): Int = {
- try {
- val parsed = java.lang.Integer.parseInt(s, 10)
- parsed match {
- case i if i < 1 => 1
- case i if i > 500 => 500
- case i => i
- }
- } catch {
- case _: NumberFormatException => 1
- }
- }
- }
|