Implement admin back-pass flow and guarded admin actions
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user