Merge branch 'phase/73-lesson-marks'

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-21 12:00:53 +03:00
co-authored by Cursor
17 changed files with 703 additions and 22 deletions
+11
View File
@@ -18,6 +18,7 @@ public sealed class School : IDisposable
private bool _disposed;
private readonly List<PersonLogEvent> _dayLog = [];
private readonly HashSet<string> _lessonLogOnce = new(StringComparer.Ordinal);
private readonly HashSet<string> _lessonMarkOnce = new(StringComparer.Ordinal);
private readonly List<WorldEvent> _worldEvents = [];
internal School(int id, string name, DateTime startDate, DefCatalog? catalog, MapLayout? map)
@@ -160,6 +161,7 @@ public sealed class School : IDisposable
_dayLog.Clear();
LoggedActivity.Clear();
_lessonLogOnce.Clear();
_lessonMarkOnce.Clear();
}
internal void AppendDayLog(PersonLogEvent row) => _dayLog.Add(row);
@@ -179,6 +181,15 @@ public sealed class School : IDisposable
return true;
}
/// <summary>
/// One lesson mark per person per calendar day and period. Survives teacher arriving mid-slot.
/// </summary>
internal bool TryClaimLessonMark(string personId, DateTime day, int period)
{
var key = string.Concat(personId, "\0", day.ToString("yyyy-MM-dd"), "\0", period.ToString());
return _lessonMarkOnce.Add(key);
}
public void QueueDecision(string personId)
{
ObjectDisposedException.ThrowIf(_disposed, this);