fix(gameplay): harden scoreboard to round bootstrap invariants (#300)
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user