KrishnaCosmic's picture
Fix missing await for async AI service calls
7004371
/**
* GitHub PRs Endpoint
*
* GET /api/maintainer/github/prs
* Fetch pull requests from GitHub for a specific repo or all user's repos
*
* Query params:
* - owner: repo owner (optional, fetches all if not provided)
* - repo: repo name (optional)
*/
import { NextRequest, NextResponse } from "next/server";
import { getCurrentUser } from "@/lib/auth";
import { createGitHubClient } from "@/lib/github-client";
import { db } from "@/db";
import { repositories } from "@/db/schema";
import { eq } from "drizzle-orm";
export async function GET(request: NextRequest) {
try {
const user = await getCurrentUser(request);
if (!user) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
if (!user.githubAccessToken) {
return NextResponse.json({
error: "GitHub access token not found"
}, { status: 401 });
}
const { searchParams } = new URL(request.url);
const owner = searchParams.get("owner");
const repo = searchParams.get("repo");
const octokit = createGitHubClient(user.githubAccessToken);
// If owner and repo are provided, fetch PRs for that specific repo
if (owner && repo) {
const prsResponse = await octokit.pulls.list({
owner,
repo,
state: "open",
per_page: 50,
sort: "updated",
direction: "desc",
});
// Transform to match expected format
const prs = prsResponse.data.map(pr => ({
id: pr.id,
number: pr.number,
title: pr.title,
body: pr.body,
state: pr.state,
html_url: pr.html_url,
created_at: pr.created_at,
updated_at: pr.updated_at,
user: {
login: pr.user?.login,
avatar_url: pr.user?.avatar_url,
},
repository_url: `https://api.github.com/repos/${owner}/${repo}`,
}));
return NextResponse.json(prs);
}
// Otherwise search for user's authored PRs across GitHub
const prsResponse = await octokit.search.issuesAndPullRequests({
q: `author:${user.username} is:pr is:open`,
per_page: 50,
sort: "updated",
order: "desc",
});
return NextResponse.json(prsResponse.data.items);
} catch (error: any) {
console.error("GET /api/maintainer/github/prs error:", error);
if (error?.status === 403) {
return NextResponse.json({
error: "GitHub API rate limit exceeded"
}, { status: 429 });
}
return NextResponse.json({
error: "Failed to fetch PRs from GitHub"
}, { status: 500 });
}
}