The session user list sits beside {id}.json; LoadAll treated it as a school with id 0.
Co-authored-by: Cursor <cursoragent@cursor.com>
1.9 KiB
Баг 3. SchoolStore принимает users.json за сейв школы
Симптом
После первого входа в логе при старте сервера:
warn: HSchool.Server.Game.SchoolStore[0]
Save D:\Github\h-school\src\HSchool.Server\saves\users.json has id 0; ids start at 1. Leaving the file in place.
Ожидали, что список игроков рядом со школами не попадает в загрузку сейвов.
Причина
Фаза 38 положила saves/users.json в тот же каталог, что и {id}.json. SchoolStore.LoadAll обходит все *.json, пропуская только index.json, *.people.json и *.timetable.json. У документа пользователей нет поля id, десериализация в SchoolSave даёт Id = 0, срабатывает предупреждение. Файл на месте остаётся, карточки школы из него нет.
Путь
Пропускать users.json так же, как index.json. Не сужать обход до {digits}.json — это другой контракт сканера.
Задачи
LoadAllне читаетusers.jsonкак сейв- Тест: каталог с
1.jsonиusers.jsonвозвращает одну школу
Тест, без которого не закрыт
HSchool.Server.Tests: LoadAll рядом с валидным {id}.json и users.json (документ пользователей, без id) возвращает только школу.
dotnet test tests/HSchool.Server.Tests --filter FullyQualifiedName~SchoolStore
Стоп
Форму users.json и HTTP сессии не трогать. wwwroot / UseFileServer — соседнее предупреждение при старте, не этот баг.