Skip to content

Commit 2ac84bf

Browse files
committed
Refactor DRep data adaptation logic for improved performance and clarity. Update Header component and integrate WalletConnect component. Switch to async storage for query caching.
1 parent 2768ea0 commit 2ac84bf

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import type { NextApiRequest, NextApiResponse } from 'next'
2+
import { supabase } from '../../../lib/supabase'
3+
4+
type ExistingIdsResponse = {
5+
repoId: number | null
6+
commitShas: string[]
7+
prNumbers: number[]
8+
issueNumbers: number[]
9+
}
10+
11+
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
12+
if (req.method !== 'GET') {
13+
return res.status(405).json({ error: 'Method not allowed' })
14+
}
15+
16+
try {
17+
const orgLogin = (req.query.org as string | undefined)?.trim()
18+
const repoName = (req.query.repo as string | undefined)?.trim()
19+
20+
if (!orgLogin || !repoName) {
21+
return res.status(400).json({ error: 'Missing required query params: org, repo' })
22+
}
23+
24+
// Get org id
25+
const { data: orgs, error: orgError } = await supabase
26+
.from('github_orgs')
27+
.select('id')
28+
.eq('login', orgLogin)
29+
.limit(1)
30+
31+
if (orgError) throw new Error(orgError.message)
32+
if (!orgs || orgs.length === 0) {
33+
return res.status(404).json({ error: 'Organization not found' })
34+
}
35+
36+
const orgId = orgs[0].id as number
37+
38+
// Get repo id by org_id + name
39+
const { data: repos, error: repoError } = await supabase
40+
.from('github_repos')
41+
.select('id, name')
42+
.eq('org_id', orgId)
43+
.eq('name', repoName)
44+
.limit(1)
45+
46+
if (repoError) throw new Error(repoError.message)
47+
if (!repos || repos.length === 0) {
48+
const empty: ExistingIdsResponse = { repoId: null, commitShas: [], prNumbers: [], issueNumbers: [] }
49+
return res.status(200).json(empty)
50+
}
51+
52+
const repoId = repos[0].id as number
53+
54+
// Fetch existing commit SHAs, PR numbers, Issue numbers in parallel
55+
const [commitsResp, prsResp, issuesResp] = await Promise.all([
56+
supabase.from('commits').select('sha').eq('repo_id', repoId),
57+
supabase.from('pull_requests').select('number').eq('repo_id', repoId),
58+
supabase.from('issues').select('number').eq('repo_id', repoId),
59+
])
60+
61+
if (commitsResp.error) throw new Error(commitsResp.error.message)
62+
if (prsResp.error) throw new Error(prsResp.error.message)
63+
if (issuesResp.error) throw new Error(issuesResp.error.message)
64+
65+
const commitShas = (commitsResp.data ?? []).map((c: any) => c.sha as string)
66+
const prNumbers = (prsResp.data ?? []).map((p: any) => p.number as number)
67+
const issueNumbers = (issuesResp.data ?? []).map((i: any) => i.number as number)
68+
69+
const payload: ExistingIdsResponse = { repoId, commitShas, prNumbers, issueNumbers }
70+
return res.status(200).json(payload)
71+
} catch (err: any) {
72+
console.error('existing-ids API error:', err?.message || err)
73+
return res.status(500).json({ error: 'Internal server error' })
74+
}
75+
}
76+

0 commit comments

Comments
 (0)