Public/Add-SchoolDataSyncV2Role.ps1

<#
.SYNOPSIS
Adds a user to the School Data Sync V2 users collection

.EXAMPLE
Add-SchoolDataSyncV2User -sourcedId "1234" -username "test@fortytwo.io"
#>

function Add-SchoolDataSyncV2Role {
    [CmdletBinding()]

    Param(
        [Parameter(Mandatory = $true)]
        [String] $userSourcedId,

        [Parameter(Mandatory = $true)]
        [String] $orgSourcedId,

        [Parameter(Mandatory = $true)]
        [ValidateSet("principal", "chair", "professor", "researcher", "adjunct", "affiliate", "occupationalTherapist", "physicalTherapist", "speechTherapist", "visionTherapist", "paraprofessional", "specialServices", "advisor", "proctor", "nurse", "officeStaff", "lecturer", "itAdmin", "administrator", "teacher", "faculty", "staff", "teacherAssistant", "assistant", "instructor", "substitute", "coach", "alumni", "student", "other")]
        [String] $role,

        [Parameter(Mandatory = $false)]
        [String] $sessionSourcedId = $null,

        [Parameter(Mandatory = $false)]
        [ValidateSet("it", "pr", "pk", "tk", "kg", "01", "1", "02", "2", "03", "3", "04", "4", "05", "5", "06", "6", "07", "7", "08", "8", "09", "9", "10", "11", "12", "13", "14", "ps", "ug", "other", "ps1", "ps2", "ps3", "ps4", "undergraduate", "graduate", "postgraduate alumni", "adultEducation")]        
        [String] $grade = $null,

        [Parameter(Mandatory = $false)]
        [Boolean] $isPrimary,

        [Parameter(Mandatory = $false)]
        [DateTime] $roleStartDate,

        [Parameter(Mandatory = $false)]
        [DateTime] $roleEndDate
    )

    Process {
        if (!$script:Users.ContainsKey($userSourcedId)) {
            Write-Error "User with sourcedId $userSourcedId not found"
            return
        } 
        
        if (!$script:Orgs.ContainsKey($orgSourcedId)) {
            Write-Error "Org with sourcedId $orgSourcedId not found"
            return
        } 
        
        $key = "$($userSourcedId)-$($orgSourcedId)-$($role)"

        if ($script:Roles.ContainsKey($key)) {
            Write-Error "Role combination for user $userSourcedId, org $orgSourcedId and role $role already exists"
            return
        }

        $script:Roles[$key] = @{
            userSourcedId    = $userSourcedId
            orgSourcedId     = $orgSourcedId
            role             = $role
            sessionSourcedId = $sessionSourcedId
            grade            = $grade
            isPrimary        = $isPrimary
            roleStartDate    = $roleStartDate ? $roleStartDate.ToString("yyyy-MM-dd") : $null
            roleEndDate      = $roleEndDate ? $roleEndDate.ToString("yyyy-MM-dd") : $null
        }
    }
}