Рейтинг: партии без соперников не считаются, понятная причина недоступной партии
В профиле Ivan висели две «партии» с одним участником, которые не открывались. Dev-удаление аккаунта (dev_admin) вычёркивает игрока из партий, не трогая сами партии, и 17.06 в dev-БД так опустели партии 2, 3, 6 и 7. Они засчитывались оставшемуся в число игр с ΔR 0.0, показывались в истории и списке группы, а бэкфилл 0014 проставил им last_standing. Партия меньше чем с двумя участниками больше не считается игрой: её нет в рейтинге и счётчиках (load_history), в истории игрока и в списке партий группы; админка её по-прежнему видит. Бэкфилл last_standing в 0014 теперь требует хотя бы двух участников (на уже мигрированных БД такие партии и так скрыты). «Партия не найдена» при переходе из чужого профиля в партию группы, где зритель не состоит, — это 403; страница партии теперь так и пишет. Тест: партия, опустевшая после dev-удаления, не попадает в историю, список и счётчик группы, рейтинг считается только по настоящей партии. #80 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
This commit is contained in:
@@ -32,12 +32,15 @@ NEW_REASONS = (
|
||||
)
|
||||
|
||||
# Причина last_standing ⇔ невыбывший участник ровно один (решение владельца по #22).
|
||||
# Только у партий хотя бы с двумя участниками: партия, из которой dev-удаление аккаунта
|
||||
# вычеркнуло соперника, тоже имеет «одного невыбывшего», но победой выжившего не была.
|
||||
BACKFILL_LAST_STANDING = """
|
||||
UPDATE matches SET win_reason = 'last_standing'
|
||||
WHERE status = 'finished'
|
||||
AND (win_reason IS NULL OR win_reason <> 'last_standing')
|
||||
AND (SELECT COUNT(*) FROM match_participants mp
|
||||
WHERE mp.match_id = matches.id AND mp.eliminated = 0) = 1
|
||||
AND (SELECT COUNT(*) FROM match_participants mp WHERE mp.match_id = matches.id) >= 2
|
||||
"""
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user