PageRenderTime 55ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/src/main/scala/SimpleWebapp.scala

https://github.com/JanxSpirit/mongosv_scalatra_casbah
Scala | 67 lines | 55 code | 12 blank | 0 comment | 0 complexity | 4a226e2f0266fd33408b226c93cecded MD5 | raw file
  1. import org.scalatra._
  2. import com.novus.casbah.mongodb.Imports._
  3. import scala.xml._
  4. import com.mongodb._
  5. class SimpleWebapp extends ScalatraServlet {
  6. val mongo = MongoConnection()
  7. val coll = mongo("msgs")("mongosv")
  8. get("/") {
  9. <h1>Hello MongoSV!</h1>
  10. }
  11. get("/msgs") {
  12. <body>
  13. <ul>
  14. {for (l <- coll) yield <li>
  15. ({l.getOrElse("vote", 0)})<a href={"/msgs/upvote/"+l("_id")}>+</a>/
  16. <a href={"/msgs/downvote/"+l("_id")}>-</a>
  17. From: <a href={"/msgs/"+l.getOrElse("author", "???")}>{l.getOrElse("author", "???")}</a> -
  18. {l("msg")}</li>}
  19. </ul>
  20. <form method="POST" action="/msgs">
  21. Author: <input type="text" name="author"/><br/>
  22. Message: <input type="text" name="msg"/><br/>
  23. <input type="submit"/>
  24. </form>
  25. </body>
  26. }
  27. post("/msgs") {
  28. val builder = MongoDBObject.newBuilder
  29. builder += "author" -> params("author")
  30. builder += "msg" -> params("msg")
  31. coll += builder.result.asDBObject
  32. redirect("/msgs")
  33. }
  34. get("/msgs/:author") {
  35. val builder = MongoDBObject.newBuilder
  36. builder += "author" -> params("author")
  37. val res = coll.find(builder.result.asDBObject)
  38. <html>
  39. <h1>Messages from {params("author")}</h1>
  40. <ul>
  41. {for (m <- res) yield <li>{m("msg")}</li>}
  42. </ul>
  43. </html>
  44. }
  45. get("/msgs/upvote/:id") {
  46. val inc = $inc("vote" -> 1)
  47. coll.update(MongoDBObject("_id" -> new ObjectId(params("id"))), inc)
  48. redirect("/msgs")
  49. }
  50. get("/msgs/downvote/:id") {
  51. val inc = $inc("vote" -> -1)
  52. coll.update(MongoDBObject("_id" -> new ObjectId(params("id"))), inc)
  53. redirect("/msgs")
  54. }
  55. }