World.scala 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 slick.jdbc.JdbcProfile
  8. import scala.concurrent.ExecutionContext
  9. @Singleton()
  10. class WorldDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) (implicit ec: ExecutionContext)
  11. extends HasDatabaseConfigProvider[JdbcProfile] {
  12. import profile.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. }