The session user list sits beside {id}.json; LoadAll treated it as a school with id 0.
Co-authored-by: Cursor <cursoragent@cursor.com>
38 lines
1.9 KiB
Markdown
38 lines
1.9 KiB
Markdown
# Баг 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` — это другой контракт сканера.
|
||
|
||
## Задачи
|
||
|
||
- [x] `LoadAll` не читает `users.json` как сейв
|
||
- [x] Тест: каталог с `1.json` и `users.json` возвращает одну школу
|
||
|
||
## Тест, без которого не закрыт
|
||
|
||
`HSchool.Server.Tests`: `LoadAll` рядом с валидным `{id}.json` и `users.json` (документ пользователей, без `id`) возвращает только школу.
|
||
|
||
```bash
|
||
dotnet test tests/HSchool.Server.Tests --filter FullyQualifiedName~SchoolStore
|
||
```
|
||
|
||
## Стоп
|
||
|
||
Форму `users.json` и HTTP сессии не трогать. `wwwroot` / `UseFileServer` — соседнее предупреждение при старте, не этот баг.
|