Action

Type

Resolved On

Create form validation utility for API routes feature - - -

Create form validation utility for API routes

Description

Create a reusable validation utility to reduce code duplication in API route validation. Currently each API route repeats similar validation patterns for form data.

Current Pattern

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" },
  });
}

Proposed Solution

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 };
}

Affected Files

  • All files in src/pages/api/**/*.ts