Skip to content

Support OneRoster 1.2 alongside existing 1.1 #50

Description

@bergerb

OneRoster 1.1 / 1.2 Dual Support — Plan

Goal

Make OneRosterSampleDataGenerator capable of generating CSV output compatible with both OneRoster v1.1 and v1.2, selectable via configuration.

Approach

  • Add OneRosterVersion enum (V1_1, V1_2) exposed on Args
  • Default to V1_1 for backward compatibility
  • Separate export DTOs per version organized by namespace/folder:
    • Models/Exports/ — v1.1 (existing, unchanged)
    • Models/Exports/V12/ — v1.2 (new)
  • Domain models (User, Enrollment, etc.) remain mostly version-agnostic; only CSV column schemas differ

New Files

File Purpose
Models/Role.cs Domain model: userSourcedId, role, orgSourcedId, beginDate, endDate
Models/Roles.cs Generator: creates one Role per user-org-role (v1.2 only)
Models/Exports/V12/RoleFile.cs Export DTO for roles.csv
Models/Exports/V12/UserFile.cs v1.2 user CSV: primaryOrgSourcedId, preferredGivenName, preferredMiddleName, preferredFamilyName, userMasterIdentifier, pronouns; no orgSourcedIds or role
Models/Exports/V12/DemographicFile.cs v1.2 demographic CSV: expanded sex enum (unspecified, other)

Modified Files

File Changes
Models/Vocab.cs Add OneRosterVersion enum; expand Gender for v1.2
OneRoster.cs Add Version to Args; pass to FileProcessor; conditionally call Roles generator + output roles.csv
FileProcessor.cs Accept OneRosterVersion param; route to V11 or V12 export DTOs via switch
Models/Manifests.cs Accept version; set oneroster.version and file entries accordingly
Consts.cs Add RolesFile constant
Models/Interfaces/ILeaUser.cs Add PreferredGivenName, PreferredFamilyName, PrimaryOrgSourcedId (nullable — used by v1.2)
Models/User.cs Implement new interface members

Key v1.2 CSV Schema Changes

users.csv

  • Removed: orgSourcedIds, role (moved to roles.csv)
  • Added: primaryOrgSourcedId, preferredGivenName, preferredMiddleName, preferredFamilyName, userMasterIdentifier, pronouns

demographics.csv

  • sex enum expanded: male | female | unspecified | other

roles.csv (new)

Column Required Description
sourcedId Yes Unique ID
status Yes for Delta active / tobedeleted
dateLastModified Yes for Delta DateTime
userSourcedId Yes Link to user
role Yes administrator / proctor / student / teacher
orgSourcedId Yes Link to org
beginDate No Start of role assignment
endDate No End of role assignment

manifest.csv

  • oneroster.version = "1.2"
  • 8 new file entries for v1.2 CSV files (all "absent" by default)

Implementation Order

  1. Add OneRosterVersion enum to Vocab.cs
  2. Add Version to Args in OneRoster.cs
  3. Update ILeaUser.cs / User.cs with optional v1.2 properties
  4. Create Role.cs + Roles.cs domain/generator
  5. Create Models/Exports/V12/ folder with UserFile.cs, DemographicFile.cs, RoleFile.cs
  6. Update FileProcessor.cs for version-aware routing
  7. Update Manifests.cs for versioned output
  8. Update OneRoster.cs for v1.2 pipeline (roles generation + output)
  9. Update Consts.cs
  10. Update tests — parameterize over version, add v1.2 coverage
  11. Verify: dotnet build && dotnet test

Backward Compatibility

  • Default V1_1 — zero consumer changes
  • v1.2 opt-in: new OneRoster(new Args { Version = OneRosterVersion.V1_2 })
  • NuGet version: 1.1.0-beta

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions