Add player count fields with validation and labeled UX
This commit is contained in:
@@ -29,13 +29,15 @@ public static class SuggestEndpoints
|
||||
s.ScreenshotUrl,
|
||||
s.YoutubeUrl,
|
||||
s.GameUrl,
|
||||
s.CreatedAt
|
||||
s.CreatedAt,
|
||||
s.MinPlayers,
|
||||
s.MaxPlayers
|
||||
})
|
||||
.ToListAsync();
|
||||
|
||||
var ordered = mine
|
||||
.OrderBy(s => s.CreatedAt)
|
||||
.Select(s => new SuggestionDto(s.Id, s.Name, s.Genre, s.Description, s.ScreenshotUrl, s.YoutubeUrl, s.GameUrl));
|
||||
.Select(s => new SuggestionDto(s.Id, s.Name, s.Genre, s.Description, s.ScreenshotUrl, s.YoutubeUrl, s.GameUrl, s.MinPlayers, s.MaxPlayers));
|
||||
|
||||
return Results.Ok(ordered);
|
||||
});
|
||||
@@ -60,6 +62,9 @@ public static class SuggestEndpoints
|
||||
return Results.BadRequest(new { error = "Screenshot URL could not be validated as an image." });
|
||||
}
|
||||
|
||||
if (!ValidatePlayers(request.MinPlayers, request.MaxPlayers, out var playersError))
|
||||
return Results.BadRequest(new { error = playersError });
|
||||
|
||||
var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db);
|
||||
if (player is null) return Results.Unauthorized();
|
||||
|
||||
@@ -82,7 +87,9 @@ public static class SuggestEndpoints
|
||||
Description = EndpointHelpers.TrimTo(request.Description, 500),
|
||||
ScreenshotUrl = EndpointHelpers.TrimTo(request.ScreenshotUrl, 2048),
|
||||
YoutubeUrl = EndpointHelpers.TrimTo(request.YoutubeUrl, 2048),
|
||||
GameUrl = EndpointHelpers.TrimTo(request.GameUrl, 2048)
|
||||
GameUrl = EndpointHelpers.TrimTo(request.GameUrl, 2048),
|
||||
MinPlayers = request.MinPlayers,
|
||||
MaxPlayers = request.MaxPlayers
|
||||
};
|
||||
|
||||
db.Suggestions.Add(suggestion);
|
||||
@@ -136,6 +143,9 @@ public static class SuggestEndpoints
|
||||
return Results.BadRequest(new { error = "Screenshot URL could not be validated as an image." });
|
||||
}
|
||||
|
||||
if (!ValidatePlayers(request.MinPlayers, request.MaxPlayers, out var playersError))
|
||||
return Results.BadRequest(new { error = playersError });
|
||||
|
||||
var suggestion = await db.Suggestions.FirstOrDefaultAsync(s => s.Id == id);
|
||||
if (suggestion == null) return Results.NotFound(new { error = "Suggestion not found." });
|
||||
|
||||
@@ -151,6 +161,8 @@ public static class SuggestEndpoints
|
||||
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();
|
||||
|
||||
@@ -162,7 +174,9 @@ public static class SuggestEndpoints
|
||||
suggestion.Description,
|
||||
suggestion.ScreenshotUrl,
|
||||
suggestion.YoutubeUrl,
|
||||
suggestion.GameUrl
|
||||
suggestion.GameUrl,
|
||||
suggestion.MinPlayers,
|
||||
suggestion.MaxPlayers
|
||||
});
|
||||
});
|
||||
|
||||
@@ -186,6 +200,8 @@ public static class SuggestEndpoints
|
||||
s.ScreenshotUrl,
|
||||
s.YoutubeUrl,
|
||||
s.GameUrl,
|
||||
s.MinPlayers,
|
||||
s.MaxPlayers,
|
||||
Author = s.Player!.DisplayName,
|
||||
s.CreatedAt
|
||||
})
|
||||
@@ -202,10 +218,44 @@ public static class SuggestEndpoints
|
||||
s.ScreenshotUrl,
|
||||
s.YoutubeUrl,
|
||||
s.GameUrl,
|
||||
s.MinPlayers,
|
||||
s.MaxPlayers,
|
||||
s.Author
|
||||
});
|
||||
|
||||
return Results.Ok(ordered);
|
||||
});
|
||||
}
|
||||
|
||||
private static bool ValidatePlayers(int? minPlayers, int? maxPlayers, out string? error)
|
||||
{
|
||||
error = null;
|
||||
if (minPlayers is null && maxPlayers is null) return true;
|
||||
|
||||
if (minPlayers is not null && (minPlayers < 1 || minPlayers > 32))
|
||||
{
|
||||
error = "Min players must be between 1 and 32.";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (maxPlayers is not null && (maxPlayers < 1 || maxPlayers > 32))
|
||||
{
|
||||
error = "Max players must be between 1 and 32.";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (minPlayers is null || maxPlayers is null)
|
||||
{
|
||||
error = "Provide both min and max players.";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (minPlayers > maxPlayers)
|
||||
{
|
||||
error = "Min players cannot exceed max players.";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user