World.scala 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package models
  2. import play.api.libs.json._
  3. import scala.concurrent.Future
  4. import javax.inject.{Singleton, Inject}
  5. import play.api.db.slick.DatabaseConfigProvider
  6. import play.api.db.slick.HasDatabaseConfigProvider
  7. import play.api.libs.concurrent.Execution.Implicits.defaultContext
  8. import play.db.NamedDatabase
  9. import slick.driver.JdbcProfile
  10. @Singleton()
  11. class WorldDAO @Inject()(@NamedDatabase("hello_world") protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] {
  12. import driver.api._
  13. private val Worlds = TableQuery[WorldsTable]
  14. def all(): Future[Seq[World]] = db.run(Worlds.result)
  15. def insert(world: World): Future[Unit] = db.run(Worlds += world).map { _ => () }
  16. private class WorldsTable(tag: Tag) extends Table[World](tag, Some("hello_world"), "World") {
  17. def id = column[Int]("id", O.PrimaryKey)
  18. def randomNumber = column[Long]("randomNumber")
  19. def * = (id, randomNumber) <> (World.tupled, World.unapply)
  20. }
  21. def findById(id: Int): Future[World] = {
  22. db.run(Worlds.filter(_.id === id).result.head)
  23. }
  24. def updateRandom(world: World) = {
  25. db.run(Worlds.filter(_.id === world.id).map(_.randomNumber).update(world.randomNumber))
  26. }
  27. }
  28. case class World(id: Int, randomNumber: Long)
  29. object WorldJsonHelpers {
  30. implicit val toJson = new Writes[World] {
  31. def writes(w: World): JsValue = {
  32. Json.obj(
  33. "id" -> w.id,
  34. "randomNumber" -> w.randomNumber
  35. )
  36. }
  37. }
  38. }