Harden request validation and admin UX cues
CI - Build & Verify / Build, Typecheck & Hygiene (push) Successful in 58s
CI - Build & Verify / Deploy to award.noveria.net (push) Successful in 1m24s

This commit is contained in:
AzuTear
2026-06-30 08:45:28 +02:00
parent 1191abc914
commit 33ba00a682
11 changed files with 248 additions and 70 deletions
+12 -5
View File
@@ -11,14 +11,21 @@ public static partial class PublicEndpoints
{
private static async Task<IResult> CreateNomination(
HttpContext context,
CreateNominationRequest request,
CreateNominationRequest? request,
AwardsDbContext db,
IUserSessionService userSessionService,
IRiskFlagService riskFlagService,
IRiskRuleService riskRuleService,
NominationEnrichmentService nominationEnrichmentService)
{
var submittedNominations = NormalizeSubmittedNominations(request);
var validationError = ValidateCreateNominationRequest(request);
if (validationError is not null)
{
return validationError;
}
var validatedRequest = request!;
var submittedNominations = NormalizeSubmittedNominations(validatedRequest);
if (submittedNominations.Length == 0)
{
@@ -66,14 +73,14 @@ public static partial class PublicEndpoints
return Results.BadRequest(new { message = "Dieser Link kann nicht nominiert werden. Bitte reiche einen direkten Kanal- oder Profil-Link ein." });
}
var season = await db.Seasons.FirstOrDefaultAsync(item => item.Year == request.Year);
var season = await db.Seasons.FirstOrDefaultAsync(item => item.Year == validatedRequest.Year);
if (season is null)
{
return Results.BadRequest(new { message = "The selected season does not exist." });
}
var categoryGroupName = await ResolveCategoryGroupNameAsync(db, season.Id, request, context.RequestAborted);
var categoryGroupName = await ResolveCategoryGroupNameAsync(db, season.Id, validatedRequest, context.RequestAborted);
if (string.IsNullOrWhiteSpace(categoryGroupName))
{
return Results.BadRequest(new { message = "The selected category group does not exist for this season." });
@@ -102,7 +109,7 @@ public static partial class PublicEndpoints
return nominationSeasonResolution.Result;
}
var submitterIdResult = await ResolveSubmitterIdAsync(context, request.TwitchUserId, userSessionService);
var submitterIdResult = await ResolveSubmitterIdAsync(context, validatedRequest.TwitchUserId, userSessionService);
if (submitterIdResult.Result is not null)
{
return submitterIdResult.Result;