3.6 KiB
3.6 KiB
Фаза 22. Удостоверение пака
Зависимости
- Фаза 4 — моды и каталог уже ездят в create
Зачем
Мод перестаёт быть именем папки. У него появляется название, версия и список паков, без которых он не работает, — а у сервера появляется право отказать во внятной форме вместо сломанного каталога.
Задачи
pack.jsoncв папке пака:versionстрокой,requiresсписком id. Файла нет — пак по-прежнему валиден: id вместо названия, версия пустая, зависимостей нет- Название пака — ключ по его id в его же
localizations/<lang>.jsonc; второго способа называть вещи не заводить GET /api/modsпринимает?lang=ru|enи отдаётlabel,versionиrequiresрядом сidиrequired- У
coreтакой жеpack.jsoncи такое же название в локалях - Создание школы проверяет, что каждая зависимость выбрана; нет —
400с кодом и id того, кого не хватает - Порядок загрузки выстраивает сервер: устойчивая топологическая сортировка поверх порядка
игрока,
coreвсегда первый. Цикл зависимостей — отказ - Разрешённый порядок виден: пишется в лог при старте школы и возвращается в ответе создания
- Сейв хранит разрешённый порядок паков, чтобы школа поднималась тем же каталогом
- Загрузчик пишет предупреждение, когда у конкретного def нет подписи в локали пака
docs/protocol.mdиfoundation.mdправятся тем же коммитом, что и обработчики
Тесты, без которых фаза не закрыта
- Пак без
pack.jsoncвиден в списке, id стоит вместо названия - Название приходит на языке запроса, у
coreтоже - Пак с невыбранной зависимостью не создаёт школу; в ответе видно, кого не хватает
- Зависимость, выбранная после зависимого, всё равно грузится раньше
- Цикл зависимостей — отказ, а не зависание
- Def без подписи даёт предупреждение, но не роняет каталог
Критерий готовности
- В диалоге создания моды подписаны по-человечески,
coreзаблокирован как раньше - Школа с модом поднимается после перезапуска тем же набором и в том же порядке
dotnet testи клиентскиеnpm test/run buildпроходят
Стоп
Не грузить DLL. Не давать менять набор модов у живой школы. Не делать UI перестановки паков.