Public/Notes/Get-AffinityNote.ps1

<#
.Synopsis
    Returns all notes attached to a person, organization, opportunity, or creator
.DESCRIPTION
    Long description
.EXAMPLE
    Example of how to use this cmdlet
.INPUTS
    Inputs to this cmdlet (if any)
.OUTPUTS
    Output from this cmdlet (if any)
.NOTES
    General notes
.LINK
    https://api-docs.affinity.co/#get-all-notes
.LINK
    https://api-docs.affinity.co/#get-a-specific-note
#>

function Get-AffinityNote
{
    [CmdletBinding(PositionalBinding = $true,
                   DefaultParameterSetName = 'AllNotes')]
    [OutputType([System.Management.Automation.PSObject[]],
                ParameterSetName=('AllNotes',
                                  'PersonIDNotes',
                                  'OrganizationIDNotes',
                                  'OpportunityIDNotes',
                                  'CreatorIDNotes'))]
    [OutputType([System.Management.Automation.PSObject],
                ParameterSetName='NoteIDNote')]
    Param
    (
        # Affinity note_id
        [Parameter(Mandatory = $true,
                   Position = 0,
                   ParameterSetName = 'NoteIDNote')]
        [ValidateNotNullOrEmpty()]
        [long]
        $NoteID,

        # Affinity person_id
        [Parameter(Mandatory = $true,
                   Position = 0,
                   ParameterSetName = 'PersonIDNotes')]
        [ValidateNotNullOrEmpty()]
        [long]
        $PersonID,

        # Affinity organization_id
        [Parameter(Mandatory = $true,
                   Position = 0,
                   ParameterSetName = 'OrganizationIDNotes')]
        [ValidateNotNullOrEmpty()]
        [long]
        $OrganizationID,

        # Affinity opportunity_id
        [Parameter(Mandatory = $true,
                   Position = 0,
                   ParameterSetName = 'OpportunityIDNotes')]
        [ValidateNotNullOrEmpty()]
        [long]
        $OpportunityID,

        # Affinity creator_id
        [Parameter(Mandatory = $true,
                   Position = 0,
                   ParameterSetName = 'CreatorIDNotes')]
        [ValidateNotNullOrEmpty()]
        [long]
        $CreatorID
    )

    Process {
        $Fragment = "notes"

        switch ($PSCmdlet.ParameterSetName) {
            'AllNotes' { break }
            'NoteIDNote' {
                $Fragment = "notes/{0}" -f $NoteID
                break
            }
            'PersonIDNotes' {
                $Content = @{ 'person_id' = $PersonID }
                break
            }
            'OrganizationIDNotes' {
                $Content = @{ 'organization_id' = $OrganizationID }
                break
            }
            'OpportunityIDNotes' {
                $Content = @{ 'opportunity_id' = $OpportunityID }
                break
            }
            'CreatorIDNotes' {
                $Content = @{ 'creator_id' = $CreatorID}
                break
            }
            Default { throw [System.NotSupportedException] "ParameterSet not developed" }
        }

        Invoke-AffinityAPIRequest -Method Get -Fragment $Fragment -Content $Content
    }
}