StatelessDb.scala 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package code.lib
  2. import _root_.net.liftweb._
  3. import http._
  4. import js._
  5. import JsCmds._
  6. import common._
  7. import json._
  8. import java.util.concurrent.ThreadLocalRandom
  9. import code.model._
  10. import mapper.{By, By_<}
  11. object StatelessDb {
  12. private val DB_ROWS = 10000
  13. private implicit val formats = net.liftweb.json.DefaultFormats
  14. case class JsonWorld(id: Long, randomNumber: Long) {
  15. def toJson = Extraction.decompose(this)
  16. }
  17. implicit def world2jsonWorld(w: World) = JsonWorld(w.id.get, w.randomNumber.get)
  18. def init() {
  19. LiftRules.statelessDispatch.append{
  20. case r @ Req("db" :: Nil, _, _) => () => singleDBQuery()
  21. case r @ Req("db" :: queries :: Nil, _ , _) => () => dbQuery(queries.toInt)
  22. }
  23. }
  24. def dbQuery(count: Int) : Box[LiftResponse] = {
  25. val random = ThreadLocalRandom.current()
  26. val rows = for(i <- (1 to count)) yield World.find(By(World.id, random.nextInt(DB_ROWS))).get
  27. Full(JsonResponse(JArray(rows.map(_.toJson).toList)))
  28. }
  29. def singleDBQuery() : Box[LiftResponse] = {
  30. val random = ThreadLocalRandom.current()
  31. val row = World.find(By(World.id, random.nextInt(DB_ROWS)))
  32. println("" + row)
  33. row match {
  34. case Full(r) => Full(JsonResponse(r.toJson))
  35. case _ => Empty
  36. }
  37. }
  38. }