bergerb / bergerb/OneRosterSampleDataGenerator

Support OneRoster 1.2 alongside existing 1.1

Open
#50 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
C#
Stars
4
Forks
1
PR merge metrics
No merged PRs in 30d

Description

# 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`

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with Vocab.cs, OneRoster.cs, FileProcessor.cs, and the existing Models/Exports/ files to trace the current v1.1 pipeline. Then review the listed interface, model, manifest, constants, and V12 export changes, followed by the existing tests. Done means selectable v1.1/v1.2 output, v1.1 compatibility by default, v1.2 roles and manifests, and passing dotnet build && dotnet test.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
data
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.