fix(gameplay): refresh stale next-round bootstrap config
This commit is contained in:
@@ -140,21 +140,44 @@ def start_next_round(session: GameSession) -> RoundTransitionResult:
|
||||
raise ValueError("round_config_missing")
|
||||
|
||||
next_round_number = locked_session.current_round + 1
|
||||
next_round_config = RoundConfig(
|
||||
next_round_config, _created = RoundConfig.objects.get_or_create(
|
||||
session=locked_session,
|
||||
number=next_round_number,
|
||||
category=previous_round_config.category,
|
||||
lie_seconds=previous_round_config.lie_seconds,
|
||||
guess_seconds=previous_round_config.guess_seconds,
|
||||
points_correct=previous_round_config.points_correct,
|
||||
points_bluff=previous_round_config.points_bluff,
|
||||
started_from_scoreboard=True,
|
||||
defaults={
|
||||
"category": previous_round_config.category,
|
||||
"lie_seconds": previous_round_config.lie_seconds,
|
||||
"guess_seconds": previous_round_config.guess_seconds,
|
||||
"points_correct": previous_round_config.points_correct,
|
||||
"points_bluff": previous_round_config.points_bluff,
|
||||
"started_from_scoreboard": True,
|
||||
},
|
||||
)
|
||||
round_config_update_fields: list[str] = []
|
||||
if next_round_config.category_id != previous_round_config.category_id:
|
||||
next_round_config.category = previous_round_config.category
|
||||
round_config_update_fields.append("category")
|
||||
if next_round_config.lie_seconds != previous_round_config.lie_seconds:
|
||||
next_round_config.lie_seconds = previous_round_config.lie_seconds
|
||||
round_config_update_fields.append("lie_seconds")
|
||||
if next_round_config.guess_seconds != previous_round_config.guess_seconds:
|
||||
next_round_config.guess_seconds = previous_round_config.guess_seconds
|
||||
round_config_update_fields.append("guess_seconds")
|
||||
if next_round_config.points_correct != previous_round_config.points_correct:
|
||||
next_round_config.points_correct = previous_round_config.points_correct
|
||||
round_config_update_fields.append("points_correct")
|
||||
if next_round_config.points_bluff != previous_round_config.points_bluff:
|
||||
next_round_config.points_bluff = previous_round_config.points_bluff
|
||||
round_config_update_fields.append("points_bluff")
|
||||
if not next_round_config.started_from_scoreboard:
|
||||
next_round_config.started_from_scoreboard = True
|
||||
round_config_update_fields.append("started_from_scoreboard")
|
||||
if round_config_update_fields:
|
||||
next_round_config.save(update_fields=round_config_update_fields)
|
||||
|
||||
locked_session.current_round = next_round_number
|
||||
|
||||
round_question = reset_round_question_bootstrap_state(select_round_question(locked_session, next_round_config))
|
||||
|
||||
next_round_config.save()
|
||||
locked_session.status = GameSession.Status.LIE
|
||||
locked_session.save(update_fields=["current_round", "status"])
|
||||
should_broadcast = True
|
||||
|
||||
Reference in New Issue
Block a user