match_service.update_match вызывает _validate_roster_basics теми же правилами, что и создание партии: каждый участник должен состоять в группе сейчас, каждая фракция — быть доступной группе сейчас.
Что получается:
группа снимает галочку с дополнения «Забытые миры» — и любую прошлую партию, сыгранную на Тау, больше нельзя исправить: 422 FACTION_NOT_AVAILABLE;
игрока удалили из группы — и каждая партия с его участием отказывается сохраняться: «Все участники должны состоять в группе».
То есть опечатку в старой партии невозможно исправить, хотя сама партия остаётся в статистике.
Почему не поправил в рамках ревью #8: для создания партии эти проверки верны, для правки истории — нет, и нужен ваш выбор границы:
при правке проверять только формальную корректность (уникальность мест, число игроков), а состав и фракции брать как есть;
разрешать оставлять уже сохранённых участников/фракции, но запрещать добавлять новых вне текущего состава;
оставить как есть и править историю только через админку с отдельным послаблением.
`match_service.update_match` вызывает `_validate_roster_basics` теми же правилами, что и создание партии: каждый участник должен состоять в группе **сейчас**, каждая фракция — быть доступной группе **сейчас**.
**Что получается:**
- группа снимает галочку с дополнения «Забытые миры» — и любую прошлую партию, сыгранную на Тау, больше нельзя исправить: `422 FACTION_NOT_AVAILABLE`;
- игрока удалили из группы — и каждая партия с его участием отказывается сохраняться: «Все участники должны состоять в группе».
То есть опечатку в старой партии невозможно исправить, хотя сама партия остаётся в статистике.
**Почему не поправил в рамках ревью #8:** для создания партии эти проверки верны, для правки истории — нет, и нужен ваш выбор границы:
1. при правке проверять только формальную корректность (уникальность мест, число игроков), а состав и фракции брать как есть;
2. разрешать оставлять уже сохранённых участников/фракции, но запрещать добавлять новых вне текущего состава;
3. оставить как есть и править историю только через админку с отдельным послаблением.
Обнаружено при работе над #8.
Agent
added this to the v1.35 - промежуточная полировка версии 1.3 milestone 2026-09-09 15:27:06 +03:00
Есть ещё нюанс, что правка уже завершённой партии доступна только админу, поэтому нужно не только исправить текущее поведение, но и добавить кнопку "Редактировать" в описании партии, и, соответственно, переводить пользователя в меню исправления.
Есть ещё нюанс, что правка уже завершённой партии доступна только админу, поэтому нужно не только исправить текущее поведение, но и добавить кнопку "Редактировать" в описании партии, и, соответственно, переводить пользователя в меню исправления.
Ваши решения: уже записанные в партию игроки и фракции проходят проверку всегда, новые — только из текущего состава; правка для игрока выглядит как знакомый редактор с перетаскиванием.
_validate_roster_basics получает необязательные keep_user_ids / keep_faction_ids — то, что уже сохранено в партии, допустимо независимо от текущего состава группы. Остальные проверки (число игроков, дубли) не меняются, создание партии не ослабевает.
update_match передаёт туда участников правимой партии — их всё равно перечитывает для замены строк.
Новый хук useUpdateMatch поверх игроцкого PATCH /api/matches/{id} (был только админский). Инвалидация как у завершения: места меняются, значит меняются лидерборд, история и профили.
На странице завершённой партии при can_modify — кнопка «Редактировать» у блока «Результаты». Режим правки: тот же PlaceEditor, раскладка восстанавливается из сохранённых мест (одинаковое место = ничья, выбывшие отдельно), плюс комментарии и причина победы.
Смена фракций — отдельным блоком со списком «игрок → фракция», а не внутри PlaceEditor: тот занят перетаскиванием, вплетать в него селекты рискованно.
Сохранение шлёт expected_version, так что правка с устаревшей версией отклоняется как раньше.
API не меняется — MatchUpdate уже принимает всё нужное, регенерация schema.d.ts не требуется.
Критерии готовности
Партию с выбывшим из группы игроком и фракцией из отключённого дополнения можно сохранить.
Вписать постороннего игрока или фракцию, которой в партии не было и у группы нет, по-прежнему нельзя (422).
Создание партии проверяется как раньше.
Участник группы правит места, ничьи, выбывших, фракции, комментарии и причину победы прямо на странице партии.
pytest и npm run build зелёные.
Ветка:issue-29-edit-finished-match от dev
## План выполнения
Ваши решения: уже записанные в партию игроки и фракции проходят проверку всегда, новые — только из текущего состава; правка для игрока выглядит как знакомый редактор с перетаскиванием.
1. `_validate_roster_basics` получает необязательные `keep_user_ids` / `keep_faction_ids` — то, что уже сохранено в партии, допустимо независимо от текущего состава группы. Остальные проверки (число игроков, дубли) не меняются, создание партии не ослабевает.
2. `update_match` передаёт туда участников правимой партии — их всё равно перечитывает для замены строк.
3. Новый хук `useUpdateMatch` поверх игроцкого `PATCH /api/matches/{id}` (был только админский). Инвалидация как у завершения: места меняются, значит меняются лидерборд, история и профили.
4. На странице завершённой партии при `can_modify` — кнопка «Редактировать» у блока «Результаты». Режим правки: тот же `PlaceEditor`, раскладка восстанавливается из сохранённых мест (одинаковое место = ничья, выбывшие отдельно), плюс комментарии и причина победы.
5. Смена фракций — отдельным блоком со списком «игрок → фракция», а не внутри `PlaceEditor`: тот занят перетаскиванием, вплетать в него селекты рискованно.
6. Сохранение шлёт `expected_version`, так что правка с устаревшей версией отклоняется как раньше.
API не меняется — `MatchUpdate` уже принимает всё нужное, регенерация `schema.d.ts` не требуется.
**Критерии готовности**
- Партию с выбывшим из группы игроком и фракцией из отключённого дополнения можно сохранить.
- Вписать постороннего игрока или фракцию, которой в партии не было и у группы нет, по-прежнему нельзя (422).
- Создание партии проверяется как раньше.
- Участник группы правит места, ничьи, выбывших, фракции, комментарии и причину победы прямо на странице партии.
- `pytest` и `npm run build` зелёные.
**Ветка:** `issue-29-edit-finished-match` от `dev`
Итог: уже записанные в партию игроки и фракции проходят проверку всегда — историю можно чинить после отключения дополнения или ухода игрока из группы; новые по-прежнему только из текущего состава, так что занести в историю постороннего нельзя. У блока «Результаты» появилась кнопка «Редактировать»: правка идёт тем же перетаскиванием, что и завершение, плюс фракции, причина победы и комментарии, с проверкой версии партии.
Проверки:pytest — 91 passed (4 новых теста); npm run build — зелёный. Ручного прогона в dev не делал, стенд был занят — экран правки стоит глянуть глазами при ревью.
Статус:Status/In Review Осталось за вами: ревью и мёрж PR — задача закроется автоматически. Дальше по вехе v1.35 беру #30.
Работа выполнена, открыт PR: https://gitea.arseniev.info/NotBigGhost/ForbiddenStarsApp/pulls/39
**Итог:** уже записанные в партию игроки и фракции проходят проверку всегда — историю можно чинить после отключения дополнения или ухода игрока из группы; новые по-прежнему только из текущего состава, так что занести в историю постороннего нельзя. У блока «Результаты» появилась кнопка «Редактировать»: правка идёт тем же перетаскиванием, что и завершение, плюс фракции, причина победы и комментарии, с проверкой версии партии.
**Проверки:** `pytest` — 91 passed (4 новых теста); `npm run build` — зелёный. Ручного прогона в dev не делал, стенд был занят — экран правки стоит глянуть глазами при ревью.
**Статус:** `Status/In Review`
**Осталось за вами:** ревью и мёрж PR — задача закроется автоматически. Дальше по вехе v1.35 беру #30.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
match_service.update_matchвызывает_validate_roster_basicsтеми же правилами, что и создание партии: каждый участник должен состоять в группе сейчас, каждая фракция — быть доступной группе сейчас.Что получается:
422 FACTION_NOT_AVAILABLE;То есть опечатку в старой партии невозможно исправить, хотя сама партия остаётся в статистике.
Почему не поправил в рамках ревью #8: для создания партии эти проверки верны, для правки истории — нет, и нужен ваш выбор границы:
Обнаружено при работе над #8.
Есть ещё нюанс, что правка уже завершённой партии доступна только админу, поэтому нужно не только исправить текущее поведение, но и добавить кнопку "Редактировать" в описании партии, и, соответственно, переводить пользователя в меню исправления.
План выполнения
Ваши решения: уже записанные в партию игроки и фракции проходят проверку всегда, новые — только из текущего состава; правка для игрока выглядит как знакомый редактор с перетаскиванием.
_validate_roster_basicsполучает необязательныеkeep_user_ids/keep_faction_ids— то, что уже сохранено в партии, допустимо независимо от текущего состава группы. Остальные проверки (число игроков, дубли) не меняются, создание партии не ослабевает.update_matchпередаёт туда участников правимой партии — их всё равно перечитывает для замены строк.useUpdateMatchповерх игроцкогоPATCH /api/matches/{id}(был только админский). Инвалидация как у завершения: места меняются, значит меняются лидерборд, история и профили.can_modify— кнопка «Редактировать» у блока «Результаты». Режим правки: тот жеPlaceEditor, раскладка восстанавливается из сохранённых мест (одинаковое место = ничья, выбывшие отдельно), плюс комментарии и причина победы.PlaceEditor: тот занят перетаскиванием, вплетать в него селекты рискованно.expected_version, так что правка с устаревшей версией отклоняется как раньше.API не меняется —
MatchUpdateуже принимает всё нужное, регенерацияschema.d.tsне требуется.Критерии готовности
pytestиnpm run buildзелёные.Ветка:
issue-29-edit-finished-matchотdevРабота выполнена, открыт PR: #39
Итог: уже записанные в партию игроки и фракции проходят проверку всегда — историю можно чинить после отключения дополнения или ухода игрока из группы; новые по-прежнему только из текущего состава, так что занести в историю постороннего нельзя. У блока «Результаты» появилась кнопка «Редактировать»: правка идёт тем же перетаскиванием, что и завершение, плюс фракции, причина победы и комментарии, с проверкой версии партии.
Проверки:
pytest— 91 passed (4 новых теста);npm run build— зелёный. Ручного прогона в dev не делал, стенд был занят — экран правки стоит глянуть глазами при ревью.Статус:
Status/In ReviewОсталось за вами: ревью и мёрж PR — задача закроется автоматически. Дальше по вехе v1.35 беру #30.