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>
This commit is contained in:
Leonid Pershin
2026-08-20 12:46:52 +03:00
co-authored by Cursor
parent 7496718d88
commit 0b1a52a5e5
6 changed files with 102 additions and 2 deletions
+37
View File
@@ -0,0 +1,37 @@
# Баг 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` — соседнее предупреждение при старте, не этот баг.
+1
View File
@@ -11,3 +11,4 @@
| --- | --- | --- |
| [1. Окно входа](01-login-layout.md) | ✅ | Форма входа прижата к углу, поле пароля на всю ширину |
| [2. Запуск AppHost](02-client-endpoint-proxy.md) | ✅ | `run-aspire` падает: proxy + Port=TargetPort=5173 у client |
| [3. users.json как сейв](03-users-json-as-school.md) | 🔄 | При старте: `Save …/users.json has id 0; ids start at 1` |