Action | Type | Resolved On |
|---|---|---|
| Create form validation utility for API routes | feature | - - - |
Create a reusable validation utility to reduce code duplication in API route validation. Currently each API route repeats similar validation patterns for form data.
Each API route repeats validation like:
if (!owner) {
return new Response(JSON.stringify({ error: "Owner is required" }), {
status: 400,
headers: { "Content-Type": "application/json" },
});
}
if (!year || isNaN(year)) {
return new Response(JSON.stringify({ error: "Valid year is required" }), {
status: 400,
headers: { "Content-Type": "application/json" },
});
}
Create src/lib/validation.ts:
export function getString(formData: FormData, field: string): { value: string; error: string | null } {
const value = formData.get(field);
if (!value) {
return { value: "", error: `${field} is required` };
}
return { value: String(value), error: null };
}
export function getNumber(formData: FormData, field: string): { value: number; error: string | null } {
const str = formData.get(field);
if (!str) {
return { value: 0, error: `${field} is required` };
}
const num = Number(str);
if (isNaN(num)) {
return { value: 0, error: `${field} must be a valid number` };
}
return { value: num, error: null };
}
export function getNumberInRange(
formData: FormData,
field: string,
min: number,
max: number
): { value: number; error: string | null } {
const { value, error } = getNumber(formData, field);
if (error) return { value, error };
if (value < min || value > max) {
return { value, error: `${field} must be between ${min} and ${max}` };
}
return { value, error: null };
}
src/pages/api/**/*.ts