All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gitbucket.core.service.CustomFieldsService.scala Maven / Gradle / Ivy

package gitbucket.core.service

import gitbucket.core.model.{CustomField, IssueCustomField}
import gitbucket.core.model.Profile._
import gitbucket.core.model.Profile.profile.blockingApi._

trait CustomFieldsService {

  def getCustomFields(owner: String, repository: String)(implicit s: Session): List[CustomField] =
    CustomFields.filter(_.byRepository(owner, repository)).sortBy(_.fieldId asc).list

  def getCustomFieldsWithValue(owner: String, repository: String, issueId: Int)(implicit
    s: Session
  ): List[(CustomField, Option[IssueCustomField])] = {
    CustomFields
      .filter(_.byRepository(owner, repository))
      .joinLeft(IssueCustomFields)
      .on { case (t1, t2) => t1.fieldId === t2.fieldId && t2.issueId === issueId.bind }
      .sortBy { case (t1, t2) => t1.fieldId }
      .list
  }

  def getCustomField(owner: String, repository: String, fieldId: Int)(implicit s: Session): Option[CustomField] =
    CustomFields.filter(_.byPrimaryKey(owner, repository, fieldId)).firstOption

  def createCustomField(
    owner: String,
    repository: String,
    fieldName: String,
    fieldType: String,
    constraints: Option[String],
    enableForIssues: Boolean,
    enableForPullRequests: Boolean
  )(implicit s: Session): Int = {
    CustomFields returning CustomFields.map(_.fieldId) insert CustomField(
      userName = owner,
      repositoryName = repository,
      fieldName = fieldName,
      fieldType = fieldType,
      constraints = constraints,
      enableForIssues = enableForIssues,
      enableForPullRequests = enableForPullRequests
    )
  }

  def updateCustomField(
    owner: String,
    repository: String,
    fieldId: Int,
    fieldName: String,
    fieldType: String,
    constraints: Option[String],
    enableForIssues: Boolean,
    enableForPullRequests: Boolean
  )(implicit
    s: Session
  ): Unit =
    CustomFields
      .filter(_.byPrimaryKey(owner, repository, fieldId))
      .map(t => (t.fieldName, t.fieldType, t.constraints, t.enableForIssues, t.enableForPullRequests))
      .update((fieldName, fieldType, constraints, enableForIssues, enableForPullRequests))

  def deleteCustomField(owner: String, repository: String, fieldId: Int)(implicit s: Session): Unit = {
    IssueCustomFields
      .filter(t => t.userName === owner.bind && t.repositoryName === repository.bind && t.fieldId === fieldId.bind)
      .delete
    CustomFields.filter(_.byPrimaryKey(owner, repository, fieldId)).delete
  }

  def getCustomFieldValues(
    userName: String,
    repositoryName: String,
    issueId: Int,
  )(implicit s: Session): List[IssueCustomField] = {
    IssueCustomFields
      .filter(t => t.userName === userName && t.repositoryName === repositoryName.bind && t.issueId === issueId.bind)
      .list
  }

  def insertOrUpdateCustomFieldValue(
    field: CustomField,
    userName: String,
    repositoryName: String,
    issueId: Int,
    value: String
  )(implicit s: Session): Unit = {
    IssueCustomFields.insertOrUpdate(
      IssueCustomField(
        userName = userName,
        repositoryName = repositoryName,
        issueId = issueId,
        fieldId = field.fieldId,
        value = value
      )
    )
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy