3.4 KiB
3.4 KiB
Фаза 39. Хозяин школы
Зависимости
Зачем
У школы есть хозяин. Свои слоты — свои, чужие смотрят отдельно и не управляют.
Задачи
SimulationOptions.MaxSchools— слоты игрока, умолчание 2.MaxSchoolsTotal— воркеры процесса, умолчание 16. Подъём с диска режет по Total, не по слотам игрока- Сейв несёт
owner. Нет поля — бесхозная. Формат не бампить - Create пишет текущего пользователя; отказ: свои слоты кончились (
limit-reached) или сервер полон (server-full) GET /api/schools:maxSchools— слоты игрока,maxSchoolsTotal,schools— свои,others— чужие и бесхозные (ownerимя илиnull). Карточка школы несётmine- Welcome.
MaxSchools— слоты игрока (байт тот же, смысл новый) - Мутации чужой — HTTP
403not-owner. Бесхозную может удалить любой залогиненный.OpenSchool— всем с сессией. Пауза / скорость / пропуск от гостя до работника не доходят. Исключение:POST .../portrait— гость генерирует теми же пресетами школы; это не управление - Меню: блок «Мои» и блок «Чужие». У бесхозной в чужих — удалить, у чужой с хозяином — нет
- Внутри чужой школы нет вкладки «Управление» и нет кнопок часов (пауза, скорость, пропуск). Карта и люди остаются
docs/protocol.md— списки и коды ошибок. Версию сокета не бампить
Тесты, без которых фаза не закрыта
- Два пользователя: у каждого по две школы, третья своего —
limit-reached; чужая вothers, не вschools - Восьмая школа на сервере с
MaxSchoolsTotal= 7 —server-full, даже если у игрока слот есть - Гость:
POSTнайма —403;SetRunningне меняетrunningхозяина - Сейв без
ownerподнимается, лежит вothers, удаляется вторым пользователем - Клиентский тест: чужая карточка без кнопки удаления; в чужой школе нет «Управление»
Критерий готовности
- Два браузера, два имени: каждый видит свою сетку и чужие отдельным блоком; в чужой школе часы чужие не нажимаются
dotnet testиnpm test/buildпроходят
Стоп
Не отдавать бесхозную в слот игрока. Не показывать гостю «Управление» даже чтением. Не менять скорости.