PageRenderTime 41ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/src/main/scala/checklist/controllers/PrototypeController.scala

https://gitlab.com/williamhogman/checklist
Scala | 82 lines | 65 code | 17 blank | 0 comment | 0 complexity | fce7a2e558e32c6750ae1bcc7f5e48db MD5 | raw file
Possible License(s): Apache-2.0
  1. package checklist
  2. package controllers
  3. import checklist.Database.db
  4. import com.twitter.finatra.Controller
  5. import com.twitter.util.Future
  6. import com.codahale.jerkson.Json
  7. import com.mongodb.util.JSON
  8. import com.mongodb.{BasicDBObject, BasicDBList}
  9. import com.mongodb.casbah.Imports.{DBObject, DBList}
  10. import com.mongodb.casbah.commons.{MongoDBObject, MongoDBList}
  11. import java.nio.charset.Charset
  12. class PrototypeController extends Controller {
  13. get("/users/:username/prototypes") { request =>
  14. val username = request.routeParams("username")
  15. Template.getUserTemplates(username) match {
  16. case Some(template) => render.json(template).toFuture
  17. case None => render.notFound.plain("user not found").toFuture
  18. }
  19. }
  20. post("/users/:username/prototypes") { request =>
  21. val username = request.routeParams("username")
  22. val prototype = JSON.parse(
  23. request.content.toString(Charset.forName("UTF-8")))
  24. var user = db("users").findOne(DBObject("name" -> username)).get
  25. db("users").update(
  26. user, DBObject("$push" -> DBObject("prototypes" -> prototype)))
  27. render.plain("Success").toFuture
  28. }
  29. get("/users/:username/prototypes/:id") {
  30. request =>
  31. val username = request.routeParams("username")
  32. val id = request.routeParams("id")
  33. Template.byId(id) match {
  34. case Some(value) => render.json(value).toFuture
  35. case None => render.plain("not found").toFuture
  36. }
  37. }
  38. post("/users/:username/prototypes/:id") {
  39. request =>
  40. val username = request.routeParams("username")
  41. val id = request.routeParams("id")
  42. val item = request.withReader(Json.parse[TemplateItem])
  43. Template.addItem(id, item) match {
  44. case Some(x) => render.json(item).toFuture
  45. case None => render.notFound.plain("not found").toFuture
  46. }
  47. }
  48. delete("/users/:username/prototypes/:id") {
  49. request =>
  50. val username = request.routeParams("username")
  51. val id = request.routeParams("id")
  52. Template.delete(id) match {
  53. case Some(x) => render.plain("deleted").toFuture
  54. case None => render.notFound.plain("template not found").toFuture
  55. }
  56. }
  57. delete("/users/:username/prototypes/:templateid/:itemid") {
  58. request =>
  59. val username = request.routeParams("username")
  60. val template = request.routeParams("templateid")
  61. val itemid = request.routeParams("itemid").toInt
  62. Template.deleteItem(template, itemid)
  63. render.plain("deleted").status(204).toFuture
  64. }
  65. }