Skip to content

Commit 14c50d0

Browse files
feat(dashboard): add full-page rich comparison between two users
1 parent 758dc7f commit 14c50d0

4 files changed

Lines changed: 805 additions & 0 deletions

File tree

app/api/compare/route.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { NextResponse } from 'next/server';
2+
import { getFullDashboardData } from '@/lib/github';
3+
4+
export const revalidate = 3600;
5+
6+
export async function GET(request: Request) {
7+
const { searchParams } = new URL(request.url);
8+
const user1 = searchParams.get('user1');
9+
const user2 = searchParams.get('user2');
10+
11+
if (!user1 || !user2) {
12+
return NextResponse.json(
13+
{ error: 'Both user1 and user2 query parameters are required.' },
14+
{ status: 400 }
15+
);
16+
}
17+
18+
if (user1.toLowerCase() === user2.toLowerCase()) {
19+
return NextResponse.json({ error: 'Cannot compare a user with themselves.' }, { status: 400 });
20+
}
21+
22+
try {
23+
const [result1, result2] = await Promise.allSettled([
24+
getFullDashboardData(user1),
25+
getFullDashboardData(user2),
26+
]);
27+
28+
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+
);
35+
}
36+
37+
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+
);
44+
}
45+
46+
return NextResponse.json({
47+
user1: result1.value,
48+
user2: result2.value,
49+
});
50+
} catch (error) {
51+
const message = error instanceof Error ? error.message : 'Internal server error';
52+
return NextResponse.json({ error: message }, { status: 500 });
53+
}
54+
}

0 commit comments

Comments
 (0)