Naija Prime School โ Sprint 4: Attendance
Daily registers ยท Per-subject sessions ยท Submit/Reopen lifecycle ยท Class summaries
In this tutorial, I walk through the complete smoke test for Sprint 4 of the Naija Prime School project โ the sprint where the application finally starts carrying real day-to-day classroom data. After this sprint ships, every classroom day generates a register, every lesson on the timetable can generate a per-subject session, and the school can pull a per-pupil attendance percentage for any term.
What's covered in this sprint
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- Two parallel attendance models โ DailyAttendanceRegister (class by date) and SubjectAttendanceSession (timetable entry by date) โ sharing one AttendanceStatus lookup
- A submit/reopen lifecycle that supports late corrections without losing the audit trail
- Auto pre-population of registers from open enrolments (no manual roster entry)
- Automatic term resolution based on the date being marked
- Weekday-vs-date validation for per-subject sessions (catches Monday lessons on a Wednesday)
- Composite unique indexes that make duplicate registers impossible at the database level
- Inline grid editing with Radzen Blazor components โ fast enough for real classroom use
- A per-class attendance summary with green/amber/red percentage badges (90% and above, 75% and above, below 75%)
Tech stack
โโโโโโโโโโโโโ
- .NET 10
- Blazor Web App (Auto render mode)
- EF Core 10
- Microsoft SQL Server
- Radzen Blazor components
- Visual Studio Code with the C# Dev Kit
Smoke test demonstrated in this video
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- Build, migrate, and run the app
- Set up prerequisites (session, term, class, subject, timetable entry, enrolled pupil)
- Open and submit a daily register for Primary 1A
- Take a per-subject register for a Monday Mathematics lesson
- Verify error paths โ wrong weekday, missing term, deleting a submitted register
- Verify the summary view with percentage bands
- Confirm soft-delete and audit columns directly in SQL Server
Downloads and source code
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
Implementation guide PDF (full long-form walkthrough โ 78 pages):
Source code for this sprint (branch: sprint/4-attendance):
The PDF covers every design decision, every entity, every DTO, every service method, the full EF Core migration, all three Razor pages, and a troubleshooting section โ far more detail than fits in a single video. If you want to recreate the sprint from scratch, the PDF is your friend.
Built on previous sprints
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
This sprint leans on Sprint 1 (identity, auditing, and soft-delete primitives), Sprint 2 (academic domain โ sessions, terms, classes, subjects, timetable), and Sprint 3 (students, parents, enrolments). If you're new to the series, I'd recommend watching those first โ but the design decisions chapter near the start of the PDF should bring you up to speed quickly.
Coming up next
โโโโโโโโโโโโโโโโ
Sprint 5 lands assessments and report cards on top of the attendance data primitives established here. Subscribe so you don't miss it.
If this helped, please like, comment, and share โ it genuinely helps the channel grow. Drop any questions about the implementation in the comments and I'll do my best to answer.
#dotnet #blazor #efcore #sqlserver #radzen #csharp #softwareengineering #schoolmanagementsystem