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>
This commit is contained in:
valknarness
2025-10-29 06:52:08 +01:00
parent 018eb46d64
commit d7c095fdb7
2 changed files with 9 additions and 2 deletions

View File

@@ -40,8 +40,14 @@ export async function GET(request: NextRequest) {
return NextResponse.json(results) return NextResponse.json(results)
} catch (error) { } catch (error) {
console.error('Search API error:', error) console.error('Search API error:', error)
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
console.error('Error details:', errorMessage)
return NextResponse.json( return NextResponse.json(
{ error: 'Internal server error' }, {
error: 'Internal server error',
...(process.env.NODE_ENV === 'development' && { details: errorMessage })
},
{ status: 500 } { status: 500 }
) )
} }

View File

@@ -128,7 +128,8 @@ export function searchRepositories(options: SearchOptions): PaginatedResults<Sea
fts.rank, fts.rank,
snippet(readmes_fts, 2, '<mark>', '</mark>', '...', 32) as snippet snippet(readmes_fts, 2, '<mark>', '</mark>', '...', 32) as snippet
FROM readmes_fts fts FROM readmes_fts fts
JOIN repositories r ON fts.rowid = r.id JOIN readmes rm ON fts.rowid = rm.rowid
JOIN repositories r ON rm.repository_id = r.id
LEFT JOIN awesome_lists al ON r.awesome_list_id = al.id LEFT JOIN awesome_lists al ON r.awesome_list_id = al.id
WHERE readmes_fts MATCH ? WHERE readmes_fts MATCH ?
` `