change repository-wide release Id numbering to system-wide numbering.

This commit is contained in:
KOUNOIKE Yuusuke
2017-04-22 09:19:20 +09:00
parent fb0cd272ce
commit 64f7db6585
3 changed files with 18 additions and 53 deletions

View File

@@ -3,7 +3,7 @@
<createTable tableName="RELEASE">
<column name="USER_NAME" type="varchar(100)" nullable="false"/>
<column name="REPOSITORY_NAME" type="varchar(100)" nullable="false"/>
<column name="RELEASE_ID" type="int" nullable="false"/>
<column name="RELEASE_ID" type="int" nullable="false" autoIncrement="true" unique="true"/>
<column name="NAME" type="varchar(100)" nullable="false"/>
<column name="TAG" type="varchar(100)" nullable="false"/>
<column name="AUTHOR" type="varchar(100)" nullable="false"/>
@@ -18,15 +18,6 @@
<addUniqueConstraint constraintName="IDX_RELEASE_UNIQ" tableName="RELEASE" columnNames="USER_NAME, REPOSITORY_NAME, TAG"/>
<addForeignKeyConstraint constraintName="IDX_RELEASE_FK0" baseTableName="RELEASE" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<createTable tableName="RELEASE_ID">
<column name="USER_NAME" type="varchar(100)" nullable="false"/>
<column name="REPOSITORY_NAME" type="varchar(100)" nullable="false"/>
<column name="RELEASE_ID" type="int" nullable="false"/>
</createTable>
<addPrimaryKey constraintName="IDX_RELEASE_ID_PK" tableName="RELEASE_ID" columnNames="USER_NAME, REPOSITORY_NAME"/>
<addForeignKeyConstraint constraintName="IDX_RELEASE_ID_FK1" baseTableName="RELEASE_ID" baseColumnNames="USER_NAME, REPOSITORY_NAME" referencedTableName="REPOSITORY" referencedColumnNames="USER_NAME, REPOSITORY_NAME"/>
<createTable tableName="RELEASE_ASSET">
<column name="USER_NAME" type="varchar(100)" nullable="false"/>
<column name="REPOSITORY_NAME" type="varchar(100)" nullable="false"/>

View File

@@ -6,15 +6,8 @@ trait ReleaseComponent extends TemplateComponent {
import profile.api._
import self._
lazy val ReleaseId = TableQuery[ReleaseId]
lazy val Releases = TableQuery[Releases]
class ReleaseId(tag: Tag) extends Table[(String, String, Int)](tag, "RELEASE_ID") with ReleaseTemplate {
def * = (userName, repositoryName, releaseId)
def byPrimaryKey(owner: String, repository: String) = byRepository(owner, repository)
}
class Releases(tag_ : Tag) extends Table[Release](tag_, "RELEASE") with ReleaseTemplate {
val name = column[String]("NAME")
val tag = column[String]("TAG")

View File

@@ -55,10 +55,19 @@ trait ReleaseService {
def createRelease(repository: RepositoryInfo, name: String, content:Option[String], tag: String,
isDraft: Boolean, isPrerelease: Boolean, loginAccount: Account)(implicit context: Context, s: Session): Release = {
val releaseId = insertRelease(repository.owner, repository.name, loginAccount.userName, name, tag,
content, isDraft, isPrerelease)
val release = getRelease(repository.owner, repository.name, releaseId.toString).get
release
Releases insert Release(
userName = repository.owner,
repositoryName = repository.name,
name = name,
tag = tag,
author = loginAccount.userName,
content = content,
isDraft = isDraft,
isPrerelease = isPrerelease,
registeredDate = currentDate,
updatedDate = currentDate
)
getReleaseByTag(repository.owner, repository.name, tag).get
}
def getReleases(owner: String, repository: String)(implicit s: Session): List[Release] = {
@@ -69,6 +78,10 @@ trait ReleaseService {
Releases filter (_.byPrimaryKey(owner, repository, releaseId)) firstOption
}
def getReleaseByTag(owner: String, repository: String, tag: String)(implicit s: Session): Option[Release] = {
Releases filter (_.byTag(owner, repository, tag)) firstOption
}
def getRelease(owner: String, repository: String, releaseId: String)(implicit s: Session): Option[Release] = {
if (isInteger(releaseId))
getRelease(owner, repository, releaseId.toInt)
@@ -80,38 +93,6 @@ trait ReleaseService {
releases.map(rel => (rel.tag -> rel)).toMap
}
def insertRelease(owner: String, repository: String, loginUser: String, name: String, tag: String,
content: Option[String], isDraft: Boolean, isPrerelease: Boolean)(implicit s: Session): Int = {
// next id number
val id = sql"SELECT RELEASE_ID + 1 FROM RELEASE_ID WHERE USER_NAME = $owner AND REPOSITORY_NAME = $repository FOR UPDATE".as[Int]
.firstOption.getOrElse(1)
Releases insert Release(
owner,
repository,
id,
name,
tag,
loginUser,
content,
isDraft,
isPrerelease,
currentDate,
currentDate
)
// increment issue id
if (id > 1){
ReleaseId
.filter(_.byPrimaryKey(owner, repository))
.map(_.releaseId)
.update(id) > 0
}else{
ReleaseId.insert(owner, repository, id)
}
id
}
def updateRelease(owner: String, repository: String, releaseId: Int, title: String, content: Option[String])(implicit s: Session): Int = {
Releases
.filter (_.byPrimaryKey(owner, repository, releaseId))