Files
h-school/src/HSchool.People/RosterFit.cs
T

31 lines
1.1 KiB
C#

namespace HSchool.People;
/// <summary>
/// Whether a generated or loaded roster still fills this map. A mismatch means the file is stale
/// relative to the layout — the school must not start and the file must stay untouched.
/// Staff openings are the player's to fill; only pupil seats have to be occupied.
/// </summary>
public static class RosterFit
{
public static bool Matches(Roster roster, SchoolDemand demand)
{
if (roster.Classes.Count != demand.Classes.Count || roster.People.Count(person => person.IsStudent) != demand.Seats.Count)
{
return false;
}
var classesByRoom = roster.Classes.ToDictionary(schoolClass => schoolClass.RoomId, StringComparer.Ordinal);
foreach (var expected in demand.Classes)
{
if (!classesByRoom.TryGetValue(expected.RoomId, out var actual)
|| actual.Capacity != expected.Capacity
|| actual.PupilIds.Count != expected.Capacity)
{
return false;
}
}
return true;
}
}