Public/Posts/Get-MMChannelPosts.ps1

# Возвращает список постов канала MatterMost с поддержкой пагинации

function Get-MMChannelPosts {
    <#
    .SYNOPSIS
        Returns posts for a MatterMost channel with optional pagination and filtering.
    .EXAMPLE
        Get-MMChannelPosts -ChannelId 'abc123'
    .EXAMPLE
        Get-MMChannelPosts -ChannelName 'general'
    .EXAMPLE
        Get-MMChannel -Name 'general' | Get-MMChannelPosts -Page 0 -PerPage 20
    .EXAMPLE
        Get-MMChannelPosts -ChannelId 'abc123' -Since 1700000000000
    #>

    [CmdletBinding(DefaultParameterSetName = 'ById')]
    [OutputType('MMPost')]
    param(
        [Parameter(Mandatory, ParameterSetName = 'ById', ValueFromPipelineByPropertyName)]
        [Alias('id')]
        [string]$ChannelId,

        [Parameter(Mandatory, ParameterSetName = 'ByName')]
        [string]$ChannelName,

        [Parameter(ParameterSetName = 'ByName')]
        [string]$TeamId,

        [Parameter()]
        [int]$Page = 0,

        [Parameter()]
        [int]$PerPage = 60,

        [Parameter()]
        [long]$Since,

        [Parameter()]
        [switch]$IncludeDeleted
    )

    process {
        $resolvedId = if ($PSCmdlet.ParameterSetName -eq 'ByName') {
            (Get-MMChannel -Name $ChannelName -TeamId $TeamId).id
        } else {
            $ChannelId
        }

        $query = "page=$Page&per_page=$PerPage"
        if ($Since)          { $query += "&since=$Since" }
        if ($IncludeDeleted) { $query += "&include_deleted=true" }

        $response = Invoke-MMRequest -Endpoint "channels/$resolvedId/posts?$query"

        if ($response.order -and $response.posts) {
            foreach ($postId in $response.order) {
                $response.posts.$postId | ConvertTo-MMPost
            }
        }
    }
}