diff options
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") - } - } |