Skip to content

Commit 9d67b77

Browse files
committed
fix(api): fix topThreeUsers endpoint 404 issue
1 parent b29c2ec commit 9d67b77

2 files changed

Lines changed: 29 additions & 62 deletions

File tree

pages/api/topThreeUsers.js

Lines changed: 11 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -4,83 +4,36 @@ import {
44
} from '../../utils/fetchTopUsersFromDb'
55
import { fetchTopThreeUsersByPullRequests } from '../../utils/fetchTopThreeUsersByPullRequests'
66

7-
export default async (req, res) => {
7+
export default async function handler(req, res) {
88
res.setHeader('Access-Control-Allow-Origin', '*')
99
res.setHeader('Access-Control-Allow-Methods', 'GET')
1010
res.setHeader('Access-Control-Allow-Headers', 'Content-Type')
11-
res.setHeader('Cache-Control', 'public, max-age=300') //* Cache for 5 minutes
11+
res.setHeader('Cache-Control', 'public, max-age=300')
1212

1313
try {
1414
const message = 'API: Checking DB for cached top three users...'
1515
console.log(message)
1616
res.setHeader('X-Debug-Message', message)
1717

18-
const timeoutPromise = new Promise((_, reject) => {
19-
setTimeout(
20-
() => reject(new Error('DB operation timed out after 15 seconds')),
21-
15000
22-
)
23-
})
18+
let data = await getTopThreeUsersFromDb()
2419

25-
let data
26-
try {
27-
data = await Promise.race([getTopThreeUsersFromDb(), timeoutPromise])
28-
} catch (dbError) {
29-
console.log('DB fetch timed out or failed:', dbError.message)
30-
res.setHeader('X-Debug-Message-1', `DB Error: ${dbError.message}`)
31-
data = null
32-
}
33-
34-
if (!data || data.length === 0) {
35-
const message2 = 'API: No cached data found, fetching from GitHub...'
36-
console.log(message2)
37-
res.setHeader('X-Debug-Message-2', message2)
38-
39-
try {
40-
data = await fetchTopThreeUsersByPullRequests(
41-
'fork-commit-merge/fork-commit-merge'
42-
)
20+
if (!data) {
21+
console.log('No cached data found, fetching from GitHub...')
22+
data = await fetchTopThreeUsersByPullRequests('fork-commit-merge/fork-commit-merge')
4323

44-
if (data && data.length > 0) {
45-
const message3 = 'API: Storing new data in DB...'
46-
console.log(message3)
47-
res.setHeader('X-Debug-Message-3', message3)
48-
49-
storeTopThreeUsersInDb(data).catch(storeError => {
50-
console.error('Failed to store data in DB:', storeError)
51-
})
52-
}
53-
} catch (githubError) {
54-
console.error('GitHub fetch error:', githubError.message)
55-
res.setHeader(
56-
'X-Debug-Message-5',
57-
`GitHub Error: ${githubError.message}`
58-
)
59-
return res
60-
.status(500)
61-
.json({ error: 'Failed to fetch contributors data' })
24+
if (data && data.length > 0) {
25+
await storeTopThreeUsersInDb(data)
6226
}
63-
} else {
64-
const message4 = 'API: Using cached data from DB'
65-
console.log(message4)
66-
res.setHeader('X-Debug-Message-4', message4)
6727
}
6828

6929
if (!data || data.length === 0) {
70-
const message5 = 'API: No data available'
71-
console.log(message5)
72-
res.setHeader('X-Debug-Message-5', message5)
7330
return res.status(404).json({ error: 'No data available' })
7431
}
7532

76-
res.status(200).json(data)
33+
return res.status(200).json(data)
7734
} catch (error) {
7835
console.error('API route error:', error)
79-
console.error('Error details:', error.response?.data || error.message)
80-
81-
res.status(500).json({
82-
error: 'Internal Server Error',
83-
message: error.message || 'Unknown error'
84-
})
36+
return res.status(500).json({ error: 'Internal Server Error' })
8537
}
8638
}
39+

utils/fetchTopThreeUsersByPullRequests.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
11
export async function fetchTopThreeUsersByPullRequests(repoPath: string) {
22
try {
3-
console.log('Starting fetchTopThreeUsersByPullRequests...')
43
const headers: Record<string, string> = {
54
Accept: 'application/vnd.github.v3+json'
65
}
76

87
if (process.env.GITHUB_TOKEN) {
98
headers.Authorization = `token ${process.env.GITHUB_TOKEN}`
10-
console.log('Using GitHub token for authentication')
9+
console.log('Token present and being used') // Debug log
10+
} else {
11+
console.log('No GitHub token found') // Debug log
12+
}
13+
14+
const testUrl = `https://api.github.com/repos/${repoPath}/pulls?state=closed&per_page=100`
15+
16+
// Test the token
17+
const testResponse = await fetch(testUrl, { headers })
18+
if (!testResponse.ok) {
19+
console.error('GitHub API Error:', {
20+
status: testResponse.status,
21+
statusText: testResponse.statusText,
22+
headers: Object.fromEntries(testResponse.headers)
23+
})
1124
}
1225

1326
let url: string | null = `https://api.github.com/repos/fork-commit-merge/fork-commit-merge/pulls?state=closed&per_page=100`
@@ -84,7 +97,8 @@ export async function fetchTopThreeUsersByPullRequests(repoPath: string) {
8497
console.log('Final sorted users:', sortedUsers)
8598
return sortedUsers
8699
} catch (error) {
87-
console.error('API Error in fetchTopThreeUsersByPullRequests:', error)
88-
return []
100+
console.error('Detailed error in fetchTopThreeUsersByPullRequests:', error)
101+
throw error
89102
}
90103
}
104+

0 commit comments

Comments
 (0)