Harden suggestion update gating and joker cap

This commit is contained in:
2026-02-05 19:36:31 +01:00
parent d9573540d6
commit a2dd212377
3 changed files with 170 additions and 17 deletions

View File

@@ -78,9 +78,10 @@ public static class SuggestEndpoints
}
var existingCount = await db.Suggestions.CountAsync(s => s.PlayerId == player.Id);
if (existingCount >= 5)
var maxSuggestions = usingJoker ? 6 : 5;
if (existingCount >= maxSuggestions)
{
return Results.BadRequest(new { error = "You have reached the 5 suggestion limit." });
return Results.BadRequest(new { error = "You have reached the suggestion limit." });
}
var suggestion = new Suggestion
@@ -177,20 +178,47 @@ public static class SuggestEndpoints
{
if (suggestion.PlayerId != player!.Id)
return Results.Unauthorized();
}
var isSuggestPhase = isAdmin ? true : await EndpointHelpers.GetPhase(db, player?.Id ?? Guid.Empty) == Phase.Suggest;
if (isSuggestPhase || isAdmin)
{
suggestion.Name = request.Name.Trim();
var phase = await EndpointHelpers.GetPhase(db, player.Id);
if (phase == Phase.Results)
return EndpointHelpers.PhaseMismatch(Phase.Suggest, phase);
var inSuggest = phase == Phase.Suggest;
var inVote = phase == Phase.Vote;
if (inSuggest)
{
suggestion.Name = request.Name.Trim();
}
else if (inVote)
{
// Title locked in vote; allow other fields
}
else
{
return EndpointHelpers.PhaseMismatch(Phase.Suggest, phase);
}
suggestion.Genre = EndpointHelpers.TrimTo(request.Genre, 50);
suggestion.Description = EndpointHelpers.TrimTo(request.Description, 500);
suggestion.ScreenshotUrl = EndpointHelpers.TrimTo(request.ScreenshotUrl, 2048);
suggestion.YoutubeUrl = EndpointHelpers.TrimTo(request.YoutubeUrl, 2048);
suggestion.GameUrl = EndpointHelpers.TrimTo(request.GameUrl, 2048);
suggestion.MinPlayers = request.MinPlayers;
suggestion.MaxPlayers = request.MaxPlayers;
}
else
{
// Admins can edit anytime
suggestion.Name = request.Name.Trim();
suggestion.Genre = EndpointHelpers.TrimTo(request.Genre, 50);
suggestion.Description = EndpointHelpers.TrimTo(request.Description, 500);
suggestion.ScreenshotUrl = EndpointHelpers.TrimTo(request.ScreenshotUrl, 2048);
suggestion.YoutubeUrl = EndpointHelpers.TrimTo(request.YoutubeUrl, 2048);
suggestion.GameUrl = EndpointHelpers.TrimTo(request.GameUrl, 2048);
suggestion.MinPlayers = request.MinPlayers;
suggestion.MaxPlayers = request.MaxPlayers;
}
suggestion.Genre = EndpointHelpers.TrimTo(request.Genre, 50);
suggestion.Description = EndpointHelpers.TrimTo(request.Description, 500);
suggestion.ScreenshotUrl = EndpointHelpers.TrimTo(request.ScreenshotUrl, 2048);
suggestion.YoutubeUrl = EndpointHelpers.TrimTo(request.YoutubeUrl, 2048);
suggestion.GameUrl = EndpointHelpers.TrimTo(request.GameUrl, 2048);
suggestion.MinPlayers = request.MinPlayers;
suggestion.MaxPlayers = request.MaxPlayers;
await db.SaveChangesAsync();