Skip to content

Code Quality: Implement specific error handling for jAI search API endpoint #220

@babblebey

Description

@babblebey

Problem

The jAI search API endpoint (src/pages/api/jai/search.js) currently uses a generic error handler that returns basic error information for all failures. This makes it difficult for users and developers to understand the cause of errors and respond appropriately.

Current Behavior

  • All errors are caught and returned as a generic error message with status 500 (or e.status if present).
  • No distinction between validation errors, network errors, rate limiting, or other specific scenarios.

Expected Behavior

  • The API should distinguish between different error types and return specific, user-friendly messages and appropriate HTTP status codes.
  • Should handle:
    • Validation errors (400)
    • Network/service errors (503)
    • Rate limiting (429)
    • Generic server errors (500)

Location

File: src/pages/api/jai/search.js

Proposed Implementation

catch (e) {
  console.error('jAI Search API Error:', e);
  // Handle different types of errors
  if (e.name === 'ValidationError') {
    return Response.json(
      { error: 'Invalid request parameters', details: e.message },
      { status: 400, headers: corsHeaders }
    );
  }
  if (e.name === 'NetworkError' || e.code === 'ENOTFOUND') {
    return Response.json(
      { error: 'External service unavailable', details: 'AI service is temporarily unavailable' },
      { status: 503, headers: corsHeaders }
    );
  }
  if (e.status === 429) {
    return Response.json(
      { error: 'Rate limit exceeded', details: 'Too many requests. Please try again later.' },
      { status: 429, headers: corsHeaders }
    );
  }
  // Generic server error
  return Response.json(
    { error: 'Internal server error', details: process.env.NODE_ENV === 'development' ? e.message : 'Something went wrong' },
    { status: e.status ?? 500, headers: corsHeaders }
  );
}

Steps to Complete

  1. Update catch block to handle specific error types.
  2. Return 400 for validation errors, 503 for network/service errors, 429 for rate limiting, 500 for generic errors.
  3. Test each error scenario.

Definition of Done

  • Error handler distinguishes between error types.
  • Each error returns a specific status code and message.
  • CORS headers are included in all error responses.
  • Existing functionality for successful requests remains intact.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ↗️ medium priorityThis issue is crucial🔴 wontfixThis will not be worked on for now✨ enhancementNew feature or request or improvementbackendChanges related to apishacktoberfestRelated to hacktoberfest✨jaiIssues, PRs or questions related to the ✨jAI module

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions