fix(gameplay): harden scoreboard to round bootstrap invariants (#300)
All checks were successful
CI / test-and-quality (push) Successful in 3m20s
CI / test-and-quality (pull_request) Successful in 2m52s

This commit is contained in:
2026-03-16 15:21:17 +00:00
parent 112a85a22d
commit 7c0332f95f
2 changed files with 125 additions and 1 deletions

View File

@@ -193,6 +193,16 @@ def _prepare_mixed_answers(round_question: RoundQuestion) -> list[str]:
def _reset_round_question_bootstrap_state(round_question: RoundQuestion) -> RoundQuestion:
Guess.objects.filter(round_question=round_question).delete()
LieAnswer.objects.filter(round_question=round_question).delete()
if round_question.mixed_answers:
round_question.mixed_answers = []
round_question.save(update_fields=["mixed_answers"])
return round_question
def _resolve_scores(session: GameSession, round_question: RoundQuestion, round_config: RoundConfig) -> tuple[list[ScoreEvent], list[dict]]:
guesses = list(round_question.guesses.select_related("player"))
if not guesses:
@@ -1116,7 +1126,9 @@ def start_next_round(request: HttpRequest, code: str) -> JsonResponse:
locked_session.current_round = next_round_number
try:
round_question = _select_round_question(locked_session, next_round_config)
round_question = _reset_round_question_bootstrap_state(
_select_round_question(locked_session, next_round_config)
)
except ValueError as exc:
return api_error(request, code=str(exc), status=400)