Implement admin back-pass flow and guarded admin actions

This commit is contained in:
2026-02-08 14:20:38 +01:00
parent 4ee327fb4e
commit 5595bfd3b1
25 changed files with 572 additions and 109 deletions

View File

@@ -72,15 +72,32 @@ internal sealed class StateWorkflowService(AppDbContext db)
public async Task<IResult> PrevPhaseAsync(Player player)
{
if (!player.IsAdmin)
return EndpointHelpers.BadRequestError("Only admins can move backward.");
var appState = await db.AppState.SingleAsync();
_ = EndpointHelpers.ReconcilePlayerPhase(player, appState.ResultsOpen);
var shouldSave = EndpointHelpers.ReconcilePlayerPhase(player, appState.ResultsOpen);
if (!player.IsAdmin)
{
if (player.CurrentPhase != Phase.Vote)
return EndpointHelpers.BadRequestError("You can only move back from the Vote phase.");
if (!player.HasJoker)
return EndpointHelpers.BadRequestError("Only admins can move backward.");
player.CurrentPhase = Phase.Suggest;
player.VotesFinal = false;
player.HasJoker = false;
shouldSave = true;
await db.SaveChangesAsync();
return Results.Ok(new PhaseTransitionResponse(player.CurrentPhase, appState.ResultsOpen));
}
player.CurrentPhase = PrevPhase(player.CurrentPhase);
player.VotesFinal = false;
await db.SaveChangesAsync();
shouldSave = true;
if (shouldSave)
await db.SaveChangesAsync();
return Results.Ok(new PhaseTransitionResponse(player.CurrentPhase, appState.ResultsOpen));
}