Files
h-school/docs/bugs/03-users-json-as-school.md
T
Leonid PershinandCursor 0b1a52a5e5 Skip users.json when loading school saves.
The session user list sits beside {id}.json; LoadAll treated it as a school with id 0.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 12:46:52 +03:00

38 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Баг 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` — соседнее предупреждение при старте, не этот баг.