public/Get-FootballTransfer.ps1

function Get-FootballTransfer {
    <#
        .EXAMPLE
            Get-FootballTransfer -Header $HeaderObject -Token $Token -StartDate 2025-07-01 -EndDate 2025-07-27 -Latest -Path C:\sportsmonk
 
        .EXAMPLE
            Get-FootballTransfer -Header $HeaderObject -Token $Token -Latest -Path C:\sportsmonk
         
    #>

    [CmdletBinding()]
    param(

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [Object]$Header,

        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [string]$EndDate,

        [Parameter(Mandatory=$false)]
        [switch]$Latest,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Path,

        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [string]$StartDate,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Token

    )
    process{

        $ErrorActionPreference = 'Stop'

        try {

            # Invoke rumour rest method

            if ($Latest) {

                $Uri = "https://api.sportmonks.com/v3/football/transfers/latest?api_token=$Token&include=player;type;fromTeam;toTeam;detailedPosition"
                $TransferResponse = Invoke-RestMethod $Uri -Method 'GET' -Headers $Header

            }

            if (!$Latest -and $($PSBoundParameters.ContainsKey('EndDate')) -and $($PSBoundParameters.ContainsKey('StartDate'))) {

                $Uri = "https://api.sportmonks.com/v3/football/transfers/between/$($StartDate)/$($EndDate)?api_token=$Token&include=player;type;fromTeam;toTeam;detailedPosition"
                $TransferResponse = Invoke-RestMethod $Uri -Method 'GET' -Headers $Header

            } # if

            #return $TransferResponse
        
            # Create directry
            New-Directory -Path "$Path\temp\transfers"
            Remove-Item -Path "$Path\temp\transfers\*" -Recurse -Force -Confirm:$false -Verbose -ErrorAction Stop

            foreach ($Transfer in $($TransferResponse.data)) {

                #$Transfer | Format-Table

                # Player
                $Player = $($Transfer.player)

                # Position
                $Position = $($Transfer.position)

                # From team
                $SourceTeam = $($Transfer.fromTeam)

                # To team
                $DesinationTeam = $($Transfer.toTeam)

                # Type
                $Type = $($Transfer.type)

                $PredictionObject = [PSCustomObject]@{
                    RumourId    = $($Transfer.id)
                    Amount      = $($Transfer.amount)
                    Born        = $($Player.date_of_birth)
                    Date        = $($Transfer.date)
                    From        = $($SourceTeam.name)
                    Completed   = $($Transfer.completed)
                    Player      = $($Player.name)
                    Position    = $($Position.name)
                    Source      = $($Transfer.source_name)
                    To          = $($DesinationTeam.name)
                    Type        = $($Type.Name)
                }

                #$PredictionObject

                $TemplatePath = "$Path\git-hub\sportsmonk-api\templates\transfers.txt"
                $Template = Get-Content -Path $TemplatePath -Raw -ErrorAction Stop
                $Template = $Template.Replace('<Date>', $($PredictionObject.Date))
                $Template = $Template.Replace('<Source>', $($PredictionObject.Source))
                $Template = $Template.Replace('<Player>', $($PredictionObject.Player))
                $Template = $Template.Replace('<Born>', $($PredictionObject.Born))
                $Template = $Template.Replace('<From>', $($PredictionObject.From))
                $Template = $Template.Replace('<To>', $($PredictionObject.To))
                $Template = $Template.Replace('<Type>', $($PredictionObject.Type))
                $Template = $Template.Replace('<Amount>', $($PredictionObject.Amount))
                $Template = $Template.Replace('<Completed>', $($PredictionObject.Completed))
                $Template = $Template.Replace('<Position>', $($PredictionObject.Position))

                $PathToUse = "$Path\temp\transfers\$($Transfer.date)-$($Transfer.id)-$($Type.Name)-transfers.txt".ToLower()
                Set-Content -Path $PathToUse -Value $Template -Verbose -ErrorAction Stop

            } # foreach

        }
        catch {

            throw "$($MyInvocation.MyCommand.Name): $_.Exception.Message"

        } # try catch

    } # function

} # process