bergerb / bergerb/OneRosterSampleDataGenerator
Support OneRoster 1.2 alongside existing 1.1
- 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