Files
awesome-app/app/api/search/route.ts
valknarness d7c095fdb7 fix: search API FTS join and error handling
Fixed 500 Internal Server Error in search API by correcting the FTS5
full-text search query join. The previous query incorrectly joined
fts.rowid directly to repositories.id, but FTS rowid corresponds to
the readmes table. Now properly joins through readmes table first.

Also enhanced error logging with detailed error messages in development
mode for easier debugging.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 06:52:08 +01:00

55 lines
1.5 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { searchRepositories } from '@/lib/db'
export async function GET(request: NextRequest) {
try {
const searchParams = request.nextUrl.searchParams
const query = searchParams.get('q')
if (!query) {
return NextResponse.json(
{ error: 'Query parameter "q" is required' },
{ status: 400 }
)
}
// Parse pagination
const page = parseInt(searchParams.get('page') || '1', 10)
const limit = parseInt(searchParams.get('limit') || '20', 10)
const offset = (page - 1) * limit
// Parse filters
const language = searchParams.get('language') || undefined
const category = searchParams.get('category') || undefined
const minStars = searchParams.get('minStars')
? parseInt(searchParams.get('minStars')!, 10)
: undefined
const sortBy = (searchParams.get('sortBy') || 'relevance') as 'relevance' | 'stars' | 'recent'
// Perform search
const results = searchRepositories({
query,
limit,
offset,
language,
minStars,
category,
sortBy
})
return NextResponse.json(results)
} catch (error) {
console.error('Search API error:', error)
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
console.error('Error details:', errorMessage)
return NextResponse.json(
{
error: 'Internal server error',
...(process.env.NODE_ENV === 'development' && { details: errorMessage })
},
{ status: 500 }
)
}
}