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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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