@@ -4,6 +4,38 @@ import { compareParamsSchema } from '@/lib/validations';
44
55export const revalidate = 3600 ;
66
7+ function buildCompareFetchErrorResponse ( user : string , reason : unknown ) : NextResponse {
8+ const message = reason instanceof Error ? reason . message : 'Unknown error' ;
9+ const lowerMessage = message . toLowerCase ( ) ;
10+
11+ if ( lowerMessage . includes ( 'not found' ) || lowerMessage . includes ( 'could not resolve' ) ) {
12+ return NextResponse . json (
13+ {
14+ error : `Failed to fetch data for "${ user } ": ${ message } ` ,
15+ } ,
16+ { status : 404 }
17+ ) ;
18+ }
19+
20+ if (
21+ lowerMessage . includes ( 'rate limit' ) ||
22+ message . includes ( 'API limit reached' ) ||
23+ message . includes ( 'status 403' )
24+ ) {
25+ return NextResponse . json (
26+ { error : 'GitHub API rate limit reached. Please configure GITHUB_TOKEN.' } ,
27+ { status : 403 }
28+ ) ;
29+ }
30+
31+ return NextResponse . json (
32+ {
33+ error : `Failed to fetch data for "${ user } ": ${ message } ` ,
34+ } ,
35+ { status : 500 }
36+ ) ;
37+ }
38+
739export async function GET ( request : Request ) {
840 const { searchParams } = new URL ( request . url ) ;
941
@@ -26,21 +58,11 @@ export async function GET(request: Request) {
2658 ] ) ;
2759
2860 if ( result1 . status === 'rejected' ) {
29- return NextResponse . json (
30- {
31- error : `Failed to fetch data for "${ user1 } ": ${ result1 . reason ?. message || 'Unknown error' } ` ,
32- } ,
33- { status : 404 }
34- ) ;
61+ return buildCompareFetchErrorResponse ( user1 , result1 . reason ) ;
3562 }
3663
3764 if ( result2 . status === 'rejected' ) {
38- return NextResponse . json (
39- {
40- error : `Failed to fetch data for "${ user2 } ": ${ result2 . reason ?. message || 'Unknown error' } ` ,
41- } ,
42- { status : 404 }
43- ) ;
65+ return buildCompareFetchErrorResponse ( user2 , result2 . reason ) ;
4466 }
4567
4668 return NextResponse . json ( {
0 commit comments