Files
h-school/docs/phases/39-school-owners.md
T

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 403 not-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 проходят

Стоп

Не отдавать бесхозную в слот игрока. Не показывать гостю «Управление» даже чтением. Не менять скорости.