public/Message/Compare-Messages.ps1

using module '..\..\modules\Enums.psm1'
using module '..\..\modules\Helper\DateTimeHelper.psm1'
using module '..\..\modules\Helper\StringHelper.psm1'
using module '..\..\modules\Helper\ObjectHelper.psm1'
using module '..\..\modules\Session.psd1'
using module '..\..\modules\FeedProcessor\Auditlog\Message.psm1'

# TODO Implement
function Compare-Messages{
    [CmdletBinding()]
    [Alias('cmm')]
    param(
        [Parameter(ValueFromPipeline=$true, Mandatory=$true)]
        [Message] $message,
        [switch]$aggregate
    )

    BEGIN {
        $_prevJson = $null
        $_prevId = $null
        $_prevAggregateState = $null
        $_currAggregateState = $null
    }
    PROCESS {
        if (-not $message.json) { continue }

        # New-provider
        switch ($message.source) {
            { $_ -in ([SOURCE]::sb, [SOURCE]::core) } {
                if ($null -ne $_prevJson) {
                    $_markets = ($_prevJson.payload.markets | Sort-Object { [int]$_.id }, { [string]$_.specifiers })
                }
                $_markets2 = ($message.json.payload.markets | Sort-Object { [int]$_.id }, { [string]$_.specifiers })
                break
            }
            ([SOURCE]::ramp) {
                if ($null -ne $_prevJson) {
                    $_markets = ($_prevJson.markets | Sort-Object { [int]$_.typeId })
                }
                $_markets2 = ($message.json.markets | Sort-Object { [int]$_.typeId })
                break
            }
            ([SOURCE]::betradar){
                if ($null -ne $_prevJson) {
                    if ($message.json.odds_change){
                        $_markets = ($_prevJson.odds_change.odds.market | Sort-Object { [int]$_.id }, { [string]$_.specifiers })
                    }
                    elseif ($message.json.bet_settlement){
                        $_markets = ($_prevJson.bet_settlement.outcomes.market | Sort-Object { [int]$_.id }, { [string]$_.specifiers })
                    }
                }
                if ($message.json.odds_change){
                    $_markets2 = ($message.json.odds_change.odds.market | Sort-Object { [int]$_.id }, { [string]$_.specifiers })
                }
                elseif ($message.json.bet_settlement){
                    $_markets2 = ($message.json.bet_settlement.outcomes.market | Sort-Object { [int]$_.id }, { [string]$_.specifiers })
                }
                break
            }
            ([SOURCE]::lsports){
                if ($null -ne $_prevJson) {
                    $_markets = ($_prevJson.markets | Sort-Object { [int]$_.id })
                }
                $_markets2 = ($message.json.Body.Events.Markets | Sort-Object { [int]$_.id })
                break
            }
            ([SOURCE]::betgenius){
                if ($null -ne $_prevJson) {
                    $_markets = ($_prevJson.markets | Sort-Object { [int]$_.id })
                }
                if ($_json.MarketSet) { $_markets2 = ($message.json.MarketSet.Markets | Sort-Object { [int]$_.id }) }
                if ($_json.ResultSet) { $_markets2 = ($message.json.ResultSet.Results | Sort-Object { [int]$_.id }) }
                break
            }
            default {
                continue
            }
        }
        $_counts = (Compare-MarketContent $_markets $_markets2 $message.source)

        $_countSame = $_counts[1]
        $_countChanged = $_counts[2]
        #$_countUnique = $_counts[3]
        $_countUnique2 = $_counts[4]

        if (-not $aggregate){
            $_item = [PSCustomObject[]]@{PSTypeName = 'MarketDiff'; id=$_prevId; id2=$message.id; total=$_markets.count; total2=$_markets2.count; `
                sameMarkets=$_countSame; changedMarkets=$_countChanged; newMarkets=$_countUnique2}
        }
        else {
            if ($null -eq $_prevAggregateState) {
                $_prevAggregateState = $_markets2
            }
            else {
                $_prevAggregateState = $_currAggregateState
            }
            $_counts2 = (Compare-MarketContent $_prevAggregateState $_markets2 $message.source)
            $_currAggregateState = ($_counts2[0] | Sort-Object { [int]$_.id }, { [string]$_.specifiers })
            $_counts2 = (Compare-MarketContent $_prevAggregateState $_currAggregateState $message.source)

            $_item = [PSCustomObject[]]@{PSTypeName = 'MarketDiff'; id=$_prevId; id2=$message.id; total=$_markets.count; total2=$_markets2.count; `
                sameMarkets=$_countSame; changedMarkets=$_countChanged; newMarkets=$_countUnique2; `
                cum_prev_total=$_prevAggregateState.count; cum_cur_total=$_currAggregateState.count; `
                cum_same=$_counts2[1]; cum_changed=$_counts2[2]; cum_new=$_counts2[4] }
        }

        if ($null -ne $_prevJson){
            Write-Output $_item
        }

        $_prevJson = $message.json
        $_prevId = $message.id
    }
    END {

    }
}