@@ -29,6 +29,7 @@ import com.atlassian.jira.component.ComponentAccessor
2929import com.atlassian.jira.event.type.EventDispatchOption
3030import com.atlassian.jira.issue.Issue
3131import com.atlassian.jira.issue.IssueInputParameters
32+ import com.atlassian.jira.issue.MutableIssue
3233import com.atlassian.jira.jql.parser.JqlQueryParser
3334import com.atlassian.jira.user.ApplicationUser
3435import com.atlassian.jira.util.ErrorCollection
@@ -69,25 +70,21 @@ object SdkJiraIssueOperator : JiraIssueOperator<SdkJiraField> {
6970 fields : List <SdkJiraField >
7071 ): Either <JiraClientError , JiraIssue ?> = either {
7172 Either .catchJiraClientError {
72- val freshIssue: IssueInputParameters = issueService.newIssueInputParameters()
73- freshIssue.projectId = projectId
74- freshIssue.issueTypeId = issueTypeId.toString()
75- fields.forEach { field ->
76- field.render(freshIssue)
77- }
78- val createValidationResult = issueService.validateCreate(user(), freshIssue)
79- val validateCreate = createValidationResult.toEither().bind()
73+ val inputParameters = issueInputParameters(projectId, issueTypeId, fields)
74+ val validateCreate = issueService.validateCreate(user(), inputParameters).toEither().bind()
8075 val createResult = issueService.create(user(), validateCreate).toEither().bind()
81- val createdIssue = createResult.issue
82-
83- val basePath = applicationProperties.jiraBaseUrl
84- val contextPath = webResourceUrlProvider.baseUrl
85- val fullPath = if (contextPath.isNotEmpty()) " $basePath /$contextPath " else basePath
86- val selfLink = fullPath + " /rest/api/2/issue/" + createdIssue.id
87- JiraIssue (createdIssue.id.toString(), createdIssue.key, selfLink)
76+ toBasicReturnTypeIssue(createResult.issue)
8877 }.bind()
8978 }
9079
80+ private fun toBasicReturnTypeIssue (createdIssue : MutableIssue ): JiraIssue {
81+ val basePath = applicationProperties.jiraBaseUrl
82+ val contextPath = webResourceUrlProvider.baseUrl
83+ val fullPath = if (contextPath.isNotEmpty()) " $basePath /$contextPath " else basePath
84+ val selfLink = fullPath + " /rest/api/2/issue/" + createdIssue.id
85+ return JiraIssue (createdIssue.id.toString(), createdIssue.key, selfLink)
86+ }
87+
9188 override suspend fun updateIssue (
9289 projectId : Long ,
9390 issueTypeId : Int ,
@@ -96,17 +93,26 @@ object SdkJiraIssueOperator : JiraIssueOperator<SdkJiraField> {
9693 ): Either <JiraClientError , Unit > = either {
9794 Either .catchJiraClientError {
9895 val issueId = issueService.getIssue(user(), issueKey).toEither().bind().issue.id
99- val issueInput: IssueInputParameters = issueService.newIssueInputParameters()
100- issueInput.projectId = projectId
101- issueInput.issueTypeId = issueTypeId.toString()
102- fields.forEach { field ->
103- field.render(issueInput)
104- }
105- val validationResult = issueService.validateUpdate(user(), issueId, issueInput).toEither().bind()
96+ val inputParameters = issueInputParameters(projectId, issueTypeId, fields)
97+ val validationResult = issueService.validateUpdate(user(), issueId, inputParameters).toEither().bind()
10698 issueService.update(user(), validationResult, EventDispatchOption .ISSUE_UPDATED , false ).toEither().bind()
10799 }.bind()
108100 }
109101
102+ private fun issueInputParameters (
103+ projectId : Long ,
104+ issueTypeId : Int ,
105+ fields : List <SdkJiraField >
106+ ): IssueInputParameters ? {
107+ val issueInput = issueService.newIssueInputParameters()
108+ issueInput.projectId = projectId
109+ issueInput.issueTypeId = issueTypeId.toString()
110+ fields.forEach { field ->
111+ field.render(issueInput)
112+ }
113+ return issueInput
114+ }
115+
110116 override suspend fun deleteIssue (issueKey : String ): Either <JiraClientError , Unit > = either {
111117 Either .catchJiraClientError {
112118 val issueToDelete = issueService.getIssue(user(), issueKey).toEither().bind()
0 commit comments