public/issues/Get-ProjectIssue.ps1


Set-MyInvokeCommandAlias -Alias GetIssueOrPullRequest -Command 'Invoke-GetIssueOrPullRequest -Url {url}'

function Get-ProjectIssueDirect {
    [CmdletBinding()]
    param (
        [Parameter(Position=0)][string]$Url
    )

    # Check the project cache of the default project
    $params = @{
        url = $Url
    }

    $response = Invoke-MyCommand -Command GetIssueOrPullRequest -Parameters $params

    if($response.data.resource){
        $ret = $response.data.resource
    } else {
        "Resource not found for URL [$Url]" | Write-MyError
        $ret = $null
    }

    # TODO: update the cache if issue is an item of the project
    # This will required or transform Issue to Item or create a new issue database

    return $ret

} Export-ModuleMember -Function Get-ProjectIssueDirect

function Get-ProjectIssue {
    [CmdletBinding()]
    param (
        [Parameter(Position=0)][string]$Url,
        [Parameter()][switch]$Force
    )

    # Check the active project cache just in case is there.
    # We could try to check all cached projects but that could be
    # Challenging as we are not user of the cache status for that item
    $owner,$projectNumber = Get-OwnerAndProjectNumber
    $item = Get-ProjectItemByUrl -Owner $owner -ProjectNumber $projectNumber -Url $Url -PassThru -Force:$Force
    if( $item ) { 
        $issue = $item | Convert-ItemToIssue
        return $issue
    }

    # Not in cache. Get Direct
    $issue = Get-ProjectIssueDirect -Url $Url

    # TODO: update the cache if issue is an item of the project
    # This will required or transform Issue to Item or create a new issue database

    return $issue

} Export-ModuleMember -Function Get-ProjectIssue

function Convert-ItemToIssue {
    param(
        [Parameter(Mandatory,ValueFromPipeline)][object]$Item
    )

    process {

        $issue = @{
            __typename = "Issue"
            id         = $Item.contentId
            title      = $Item.Title
            body       = $Item.Body
            number     = $Item.number
            url        = $Item.urlContent
            repository = $Item.Repository
        }
        return $issue
    }

}