Private/JIRA/New-JIRAIssue.ps1
function New-JIRAIssue { <# .SYNOPSIS Creates a JIRAIssue objects. .DESCRIPTION The New-JIRAIssue cmdlet creates a JIRAIssue object based on specified input. .PARAMETER Uri Specifies the url to be used to retrieve the JIRAIssue object. .PARAMETER Session Specifies the AtlassianSession to use to perform this task. If none is specified Get-AtlassianSession is called. .EXAMPLE C:\PS> New-JIRAIssue -Uri '/rest/api/latest/issue/10000' -Session $Session Gets the issue with id 10000 .INPUTS None or System.String A JIRAIssue object is retrieved using the Uri parameter .OUTPUTS JIRAIssue Returns a JIRAIssue object. .NOTES .LINK http://docs.invoke-automation.com #> [CmdletBinding( #SupportsShouldProcess=$true )] Param( [Parameter( Mandatory = $true, ValueFromPipeline = $true )] [System.String] $Uri, [Parameter( Mandatory = $false )] [AtlassianSession] $Session = (Get-AtlassianSession) ) Begin { $DATETIMEPATTERN = $SETTINGS.Atlassian.DateTimeStringPattern # Helper Functions function Get-JIRAIssueObject { Param( [Parameter( Mandatory = $true )][System.String] $Uri ) $method = 'GET' Invoke-APIRequest -Method $method -Uri $Uri -Session $Session | % { $issue = $_ $properties = @{ Self = $issue.self Id = $issue.id Key = $issue.key } # Fields if ($issue.fields) { $fields = @{} $issue.fields | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | % { switch ($_) { # JIRAIssueType fields issuetype { # Issue Type $name = 'IssueType' if ($issue.fields."$_".self) { $value = ($issue.fields."$_".self | New-JIRAIssueType) } else { $value = $null } $properties.Add($name, $value) } # JIRAProject fields project { # Project $name = 'Project' if ($issue.fields."$_".self) { $value = ($issue.fields."$_".self | New-JIRAProject) } else { $value = $null } $properties.Add($name, $value) } # JIRAVersion fields versions { # Affects Version/s $name = 'Versions' if ($issue.fields."$_".self) { $value = ($issue.fields."$_".self | New-JIRAVersion) } else { $value = $null } $properties.Add($name, $value) } fixVersions { # Fix Version/s $name = 'FixVersions' if ($issue.fields."$_".self) { $value = ($issue.fields."$_".self | New-JIRAVersion) } else { $value = $null } $properties.Add($name, $value) } # JIRAComponent fields components { # Components $name = 'Components' if ($issue.fields."$_".self) { $value = ($issue.fields."$_".self | New-JIRAComponent) } else { $value = $null } $properties.Add($name, $value) } # JIRAUser fields creator { # Creator $name = 'Creator' if ($issue.fields."$_".self) { $value = ($issue.fields."$_".self | New-JIRAUser) } else { $value = $null } $properties.Add($name, $value) } reporter { # Reporter $name = 'Reporter' if ($issue.fields."$_".self) { $value = ($issue.fields."$_".self | New-JIRAUser) } else { $value = $null } $properties.Add($name, $value) } assignee { # Assignee $name = 'Assignee' if ($issue.fields."$_".self) { $value = ($issue.fields."$_".self | New-JIRAUser) } else { $value = $null } $properties.Add($name, $value) } watches { # Watchers $name = 'Watchers' if ($issue.fields."$_".self) { $watches = (Invoke-APIRequest -Method 'GET' -Session $Session -Uri $issue.fields."$_".self) if ($watches.watchers.self) { $value = ($watches.watchers.self | New-JIRAUser) } else { $value = $null } } else { $value = $null } $properties.Add($name, $value) } votes { # Votes $name = 'Voters' if ($issue.fields."$_".self) { $votes = (Invoke-APIRequest -Method 'GET' -Session $Session -Uri $issue.fields."$_".self) if ($votes.voters.self) { $value = ($votes.voters.self | New-JIRAUser) } else { $value = $null } } else { $value = $null } $properties.Add($name, $value) } # JIRAIssueWorklog fields worklog { # Log Work $name = 'WorkLog' if ($issue.fields."$_".worklogs.self) { $value = $issue.fields."$_".worklogs.self | New-JIRAIssueWorklog } else { $value = $null } $properties.Add($name, $value) } # JIRAIssueComment fields comment { # Comments $name = 'Comments' if ($issue.fields."$_".comments.self) { $value = ($issue.fields."$_".comments.self | New-JIRAIssueComment) } else { $value = $null } $properties.Add($name, $value) } # JIRAIssue fields subtasks { # Sub-Tasks $name = 'SubTasks' if ($issue.fields."$_".self) { $value = ($issue.fields."$_".self | New-JIRAIssue) } else { $value = $null } $properties.Add($name, $value) } # Free text fields summary { # Summary $name = 'Summary' if ($issue.fields."$_") { $value = $issue.fields."$_" } else { $value = $null } $properties.Add($name, $value) } description { # Description $name = 'Description' if ($issue.fields."$_") { $value = $issue.fields."$_" } else { $value = $null } $properties.Add($name, $value) } # Specials timespent { # Time Spent $name = 'TimeSpent' if ($issue.fields."$_") { $value = [TimeSpan]::FromSeconds($issue.fields."$_") } else { $value = $null } $properties.Add($name, $value) } aggregatetimespent { # Sum Time Spent $name = 'TotalTimeSpent' if ($issue.fields."$_") { $value = [TimeSpan]::FromSeconds($issue.fields."$_") } else { $value = $null } $properties.Add($name, $value) } timeestimate { # Remaining Estimate $name = 'RemainingEstimate' if ($issue.fields."$_") { $value = [TimeSpan]::FromSeconds($issue.fields."$_") } else { $value = $null } $properties.Add($name, $value) } status { # Status $name = 'Status' if ($issue.fields."$_".name) { $value = $issue.fields."$_".name } else { $value = $null } $properties.Add($name, $value) } priority { # Priority $name = 'Priority' if ($issue.fields."$_".name) { $value = $issue.fields."$_" } else { $value = $null } $properties.Add($name, $value) } customfield_10000 { # Flagged $name = 'Flagged' if ($issue.fields."$_".value) { $value = $issue.fields."$_" } else { $value = $null } $properties.Add($name, $value) } customfield_10004 { # Sprint $name = 'Sprint' if ($issue.fields."$_") { $value = ($issue.fields."$_" -replace '^.*,name=([^,]*),.*$', '$1') } else { $value = $null } $properties.Add($name, $value) } Default { $name = $_ if ($issue.fields."$_") { if ($issue.fields."$_".GetType().Name -eq 'String') { if ($issue.fields."$_" -match $DATETIMEPATTERN) { $value = ($issue.fields."$_" | ConvertFrom-AtlassianDateTime) } else { $value = $issue.fields."$_" } } else { $value = $issue.fields."$_" } } else { $value = $null } $fields.Add($name, $value) } } } $properties.Add('Fields', $fields) } else { $properties.Add('Fields', $null) } # Create Object New-Object -TypeName JIRAIssue -Property $properties } } } Process { if ($Uri) { $outpuObject = Get-JIRAIssueObject -Uri $Uri } if ($outpuObject) { $outpuObject } else { throw 'No result for request' } } End {} } |