# Фаза 8. Просмотр людей ## Зависимости - [Фаза 7](07-people-in-school.md) - [Фаза 1](../01-shell/01-manager-shell.md) ## Зачем Игрок видит, кто учится и работает в его школе, не теряя из виду часы, карту и события. ## Задачи - [x] `GET /api/schools/{id}/people`: фильтры (роль, параллель, должность, пол, диапазон возраста), сортировка, страница. Читает **опубликованный снимок** ростера и не трогает воркер — инвариант «только поток школы касается школы» остаётся целым - [x] `GET /api/schools/{id}/people/{personId}`: карточка через мейлбокс воркера с `TaskCompletionSource`, потому что нужды живые - [x] Панель «Люди» в оболочке менеджера: фильтры, сортируемые колонки, пейджер. Сделана **вкладкой рядом с картой**, а не нижним рядом — заодно с экрана ушла пустая панель событий из фазы 1; см. [`people.md`](../../design/02-people/people.md) - [x] Строка списка — только лёгкие поля: ФИО, роль, класс или должность, возраст, пол - [x] Карточка: тело, навыки, черты, нужды, семья со ссылками на родных — по ссылке открывается карточка родственника - [x] Строки и подписи через `t(...)`, как всё остальное - [x] `docs/protocol.md` пополняется в том же коммите, что и обработчики - [x] Тесты API: фильтр по роли и параллели, сортировка, границы страниц, неизвестная школа, неизвестный человек ## Критерий готовности - Открыть школу, отфильтровать учеников пятой параллели, отсортировать по фамилии - Открыть карточку ученика, увидеть родителей, перейти по ссылке к матери - Тысяча строк не роняет и не подвешивает панель - `dotnet test` и клиентские `npm test` / `build` проходят ## Стоп Не редактировать людей. Не нанимать и не увольнять руками. Не показывать характеристики в списке — только в карточке.