diff options
author | Jakob Odersky <jakob@odersky.com> | 2017-03-11 16:35:38 -0800 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2017-03-11 16:35:38 -0800 |
commit | 3f00b87a022e92e3bf341d40d05d81b5538e4974 (patch) | |
tree | 7f1df3653c9555679c3c3d3c4632125ae2a3bec4 /crashbox-server/src/main/scala/io/crashbox/ci/Storage.scala | |
parent | 5b57a310aec9a6f8bf7d3b42786fe0d758d40083 (diff) | |
download | crashbox-ci-3f00b87a022e92e3bf341d40d05d81b5538e4974.tar.gz crashbox-ci-3f00b87a022e92e3bf341d40d05d81b5538e4974.tar.bz2 crashbox-ci-3f00b87a022e92e3bf341d40d05d81b5538e4974.zip |
Add slick bindings
Diffstat (limited to 'crashbox-server/src/main/scala/io/crashbox/ci/Storage.scala')
-rw-r--r-- | crashbox-server/src/main/scala/io/crashbox/ci/Storage.scala | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/crashbox-server/src/main/scala/io/crashbox/ci/Storage.scala b/crashbox-server/src/main/scala/io/crashbox/ci/Storage.scala index 1035940..0f095eb 100644 --- a/crashbox-server/src/main/scala/io/crashbox/ci/Storage.scala +++ b/crashbox-server/src/main/scala/io/crashbox/ci/Storage.scala @@ -8,18 +8,51 @@ import java.io.{ InputStream, OutputStream } +import scala.concurrent.Future import java.util.UUID - -import slick.driver.H2Driver.api._ +import slick.jdbc.H2Profile.api._ trait Storage { self: Core with Parsers with Schedulers => type BuildId = UUID + case class Build( + id: BuildId, + url: String, + rebuild: Int, + state: Int + ) + + class Builds(tag: Tag) extends Table[Build](tag, "builds") { + def id = column[BuildId]("id", O.PrimaryKey) + def url = column[String]("url") + def rebuild = column[Int]("rebuild") + def state = column[Int]("state") + def * = (id, url, rebuild, state) <> (Build.tupled, Build.unapply) + } + val builds = TableQuery[Builds] + + val database = Database.forConfig("crashbox.db") - - def newBuildId() = UUID.randomUUID() + def setupDatabase(): Future[Unit] = { + log.info("Preparing build database") + val setup = DBIO.seq( + builds.schema.create + ) + database.run(setup) + } + def newBuildId(): BuildId = UUID.randomUUID() + + def nextBuild(url: String): Future[Build] = database.run{ + builds.filter(_.url === url).map(_.rebuild).take(1).result.headOption + }.map{ no => + Build(newBuildId(), url, no.getOrElse(0), 0) + } + + def updateBuildState(buildId: BuildId, state: BuildState) = { + log.info(s"Build $buildId: state update $state") + } private val streamsDirectory: File = new File( @@ -55,8 +88,4 @@ trait Storage { self: Core with Parsers with Schedulers => new FileInputStream(logFile(buildId, task)) } - def updateBuildState(buildId: BuildId, state: BuildState) = { - log.info(s"Build $buildId: state update $state") - } - } |