package service import scala.slick.driver.H2Driver.simple._ import Database.threadLocalSession import scala.slick.jdbc.{StaticQuery => Q} import Q.interpolation import model._ trait IssuesService { def getIssue(owner: String, repository: String, issueId: String) = if (issueId forall (_.isDigit)) Query(Issues) filter { t => (t.userName is owner.bind) && (t.repositoryName is repository.bind) && (t.issueId is issueId.toInt.bind) } firstOption else None def saveIssue(owner: String, repository: String, loginUser: String, title: String, content: Option[String]) = // next id number sql"SELECT ISSUE_ID + 1 FROM ISSUE_ID WHERE USER_NAME = $owner AND REPOSITORY_NAME = $repository FOR UPDATE".as[Int] .firstOption.filter { id => Issues insert Issue( owner, repository, id, loginUser, None, None, title, content, new java.sql.Date(System.currentTimeMillis), // TODO new java.sql.Date(System.currentTimeMillis)) // increment issue id IssueId.filter { t => (t.userName is owner.bind) && (t.repositoryName is repository.bind) }.map(_.issueId).update(id) > 0 } get }