Harden request validation and admin UX cues
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using Backend.Common;
|
||||
using Backend.Contracts;
|
||||
using Backend.Domain;
|
||||
using Backend.Services;
|
||||
using Microsoft.AspNetCore.Http.Extensions;
|
||||
@@ -205,4 +206,74 @@ public static partial class PublicEndpoints
|
||||
"show" => "show",
|
||||
_ => "current",
|
||||
};
|
||||
|
||||
private static IResult? ValidateCreateNominationRequest(CreateNominationRequest? request)
|
||||
{
|
||||
if (request is null)
|
||||
{
|
||||
return Results.BadRequest(new { message = "A nomination request body is required." });
|
||||
}
|
||||
|
||||
if (request.Year <= 0)
|
||||
{
|
||||
return Results.BadRequest(new { message = "A valid season year is required." });
|
||||
}
|
||||
|
||||
if ((request.Nominations?.Length ?? 0) == 0 && (request.Nominees?.Length ?? 0) == 0)
|
||||
{
|
||||
return Results.BadRequest(new { message = "A nomination request must include at least one stream link." });
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static IResult? ValidateCreateVoteRequest(CreateVoteRequest? request)
|
||||
{
|
||||
if (request is null)
|
||||
{
|
||||
return Results.BadRequest(new { message = "A vote request body is required." });
|
||||
}
|
||||
|
||||
if (request.SeasonId <= 0)
|
||||
{
|
||||
return Results.BadRequest(new { message = "A valid season id is required." });
|
||||
}
|
||||
|
||||
if (request.Entries is null || request.Entries.Length == 0)
|
||||
{
|
||||
return Results.BadRequest(new { message = "At least one vote entry is required." });
|
||||
}
|
||||
|
||||
if (request.Entries.Any(item => item.CategoryId <= 0 || item.CandidateId <= 0))
|
||||
{
|
||||
return Results.BadRequest(new { message = "Each vote entry requires a valid category and candidate." });
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static IResult? ValidateCreateClipRequest(CreateClipRequest? request)
|
||||
{
|
||||
if (request is null)
|
||||
{
|
||||
return Results.BadRequest(new { message = "A clip request body is required." });
|
||||
}
|
||||
|
||||
if (request.Year <= 0)
|
||||
{
|
||||
return Results.BadRequest(new { message = "A valid season year is required." });
|
||||
}
|
||||
|
||||
if (request.CategoryId is <= 0 || request.CandidateId is <= 0)
|
||||
{
|
||||
return Results.BadRequest(new { message = "Category and candidate ids must be positive when provided." });
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(request.ClipUrl))
|
||||
{
|
||||
return Results.BadRequest(new { message = "A valid http(s) clip link is required." });
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user