Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions src/app/api/metrics/ci/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
import { GITHUB_API } from "@/lib/github";
import { supabaseAdmin } from "@/lib/supabase";
import { resolveAppUser } from "@/lib/resolve-user";
import { getGitHubAccessToken } from "@/lib/server-github-token";

export const dynamic = "force-dynamic";

Expand Down Expand Up @@ -210,7 +211,8 @@ async function fetchCIAnalyticsForAccount(

export async function GET(req: NextRequest) {
const session = await getServerSession(authOptions);
if (!session?.accessToken || !session.githubLogin) {
const accessToken = await getGitHubAccessToken(req);
if (!accessToken || !session?.githubLogin) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

Expand All @@ -219,7 +221,7 @@ export async function GET(req: NextRequest) {
if (!accountId) {
try {
const result = await fetchCIAnalyticsForAccount(
session.accessToken,
accessToken,
session.githubLogin
);
return Response.json(result);
Expand All @@ -241,7 +243,7 @@ export async function GET(req: NextRequest) {
if (accountId === "combined") {
const accounts = await getAllAccounts(
{
token: session.accessToken,
token: accessToken,
githubId: session.githubId,
githubLogin: session.githubLogin,
},
Expand All @@ -264,7 +266,7 @@ export async function GET(req: NextRequest) {
if (accountId === session.githubId) {
try {
const result = await fetchCIAnalyticsForAccount(
session.accessToken,
accessToken,
session.githubLogin
);
return Response.json(result);
Expand Down
14 changes: 8 additions & 6 deletions src/app/api/metrics/compare/route.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { getServerSession } from "next-auth";
import { NextRequest } from "next/server";
import { authOptions } from "@/lib/auth";
import { getGitHubAccessToken } from "@/lib/server-github-token";

export const dynamic = "force-dynamic";

Expand All @@ -16,7 +17,8 @@ function toDateStr(d: Date): string {

export async function GET(req: NextRequest) {
const session = await getServerSession(authOptions);
if (!session?.accessToken || !session.githubLogin) {
const accessToken = await getGitHubAccessToken(req);
if (!accessToken || !session?.githubLogin) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

Expand All @@ -40,7 +42,7 @@ export async function GET(req: NextRequest) {

// 1. Verify user exists
const userRes = await fetch(`${GITHUB_API}/users/${username}`, {
headers: { Authorization: `Bearer ${session.accessToken}` },
headers: { Authorization: `Bearer ${accessToken}` },
next: { revalidate: 3600 },
});

Expand All @@ -53,7 +55,7 @@ export async function GET(req: NextRequest) {
const since90 = new Date();
since90.setDate(since90.getDate() - 90);
const since90Str = since90.toISOString().slice(0, 10);

const since30 = new Date();
since30.setDate(since30.getDate() - 30);
const since30Str = since30.toISOString().slice(0, 10);
Expand All @@ -62,7 +64,7 @@ export async function GET(req: NextRequest) {
`${GITHUB_API}/search/commits?q=author:${username}+author-date:>=${since90Str}&per_page=100&sort=author-date&order=desc`,
{
headers: {
Authorization: `Bearer ${session.accessToken}`,
Authorization: `Bearer ${accessToken}`,
Accept: "application/vnd.github+json",
},
next: { revalidate: 3600 },
Expand Down Expand Up @@ -111,7 +113,7 @@ export async function GET(req: NextRequest) {

// 3. Top Language from repos
const reposRes = await fetch(`${GITHUB_API}/users/${username}/repos?per_page=100&sort=pushed`, {
headers: { Authorization: `Bearer ${session.accessToken}` },
headers: { Authorization: `Bearer ${accessToken}` },
next: { revalidate: 3600 },
});

Expand All @@ -131,7 +133,7 @@ export async function GET(req: NextRequest) {
const prsRes = await fetch(
`${GITHUB_API}/search/issues?q=type:pr+author:${username}&per_page=1`,
{
headers: { Authorization: `Bearer ${session.accessToken}` },
headers: { Authorization: `Bearer ${accessToken}` },
next: { revalidate: 3600 },
}
);
Expand Down
12 changes: 7 additions & 5 deletions src/app/api/metrics/contributions/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
} from "@/lib/metrics-cache";
import { supabaseAdmin } from "@/lib/supabase";
import { resolveAppUser } from "@/lib/resolve-user";
import { getGitHubAccessToken } from "@/lib/server-github-token";

export const dynamic = "force-dynamic";

Expand Down Expand Up @@ -232,7 +233,8 @@ async function mergeGitLabContributions(

export async function GET(req: NextRequest) {
const session = await getServerSession(authOptions);
if (!session?.accessToken || !session.githubLogin) {
const accessToken = await getGitHubAccessToken(req);
if (!accessToken || !session?.githubLogin) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

Expand All @@ -249,7 +251,7 @@ export async function GET(req: NextRequest) {
if (username) {
try {
const result = await fetchContributionsForAccount(
session.accessToken,
accessToken,
username,
days,
{ bypass, userId: session.githubId ?? session.githubLogin }
Expand All @@ -263,7 +265,7 @@ export async function GET(req: NextRequest) {
if (!accountId) {
try {
const result = await fetchContributionsForAccount(
session.accessToken,
accessToken,
session.githubLogin,
days,
{ bypass, userId: session.githubId ?? session.githubLogin }
Expand Down Expand Up @@ -297,7 +299,7 @@ export async function GET(req: NextRequest) {
if (accountId === "combined") {
const accounts = await getAllAccounts(
{
token: session.accessToken,
token: accessToken,
githubId: session.githubId,
githubLogin: session.githubLogin,
},
Expand Down Expand Up @@ -341,7 +343,7 @@ export async function GET(req: NextRequest) {
if (accountId === session.githubId) {
try {
const result = await fetchContributionsForAccount(
session.accessToken,
accessToken,
session.githubLogin,
days,
{ bypass, userId: session.githubId }
Expand Down
9 changes: 6 additions & 3 deletions src/app/api/metrics/issues/route.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
import { getServerSession } from "next-auth";
import { NextRequest } from "next/server";
import { authOptions } from "@/lib/auth";
import { fetchIssuesMetrics } from "@/lib/github";
import { getGitHubAccessToken } from "@/lib/server-github-token";

export const dynamic = "force-dynamic";


export async function GET() {
export async function GET(req: NextRequest) {
const session = await getServerSession(authOptions);
if (!session?.accessToken) {
const accessToken = await getGitHubAccessToken(req);
if (!session?.githubId || !accessToken) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

try {
const metrics = await fetchIssuesMetrics(session.accessToken);
const metrics = await fetchIssuesMetrics(accessToken);
return Response.json(metrics);
} catch {
return Response.json({ error: "GitHub API error" }, { status: 502 });
Expand Down
9 changes: 6 additions & 3 deletions src/app/api/metrics/languages/route.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { getServerSession } from "next-auth";
import { NextRequest } from "next/server";
import { authOptions } from "@/lib/auth";
import { getGitHubAccessToken } from "@/lib/server-github-token";

export const dynamic = "force-dynamic";

Expand All @@ -9,14 +11,15 @@ interface RepoItem {
repository: { full_name: string };
}

export async function GET() {
export async function GET(req: NextRequest) {
const session = await getServerSession(authOptions);
if (!session?.accessToken || !session.githubLogin) {
const accessToken = await getGitHubAccessToken(req);
if (!session?.githubLogin || !accessToken) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

const headers = {
Authorization: `Bearer ${session.accessToken}`,
Authorization: `Bearer ${accessToken}`,
Accept: "application/vnd.github+json",
};

Expand Down
9 changes: 6 additions & 3 deletions src/app/api/metrics/pinned-repos/route.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { getServerSession } from "next-auth";
import { NextRequest } from "next/server";
import { authOptions } from "@/lib/auth";
import { getGitHubAccessToken } from "@/lib/server-github-token";

export const dynamic = "force-dynamic";

Expand Down Expand Up @@ -34,9 +36,10 @@ const PINNED_REPOS_QUERY = `
}
`;

export async function GET() {
export async function GET(req: NextRequest) {
const session = await getServerSession(authOptions);
if (!session?.accessToken) {
const accessToken = await getGitHubAccessToken(req);
if (!session?.githubId || !accessToken) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

Expand All @@ -45,7 +48,7 @@ export async function GET() {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${session.accessToken}`,
Authorization: `Bearer ${accessToken}`,
},
body: JSON.stringify({ query: PINNED_REPOS_QUERY }),
cache: "no-store",
Expand Down
9 changes: 6 additions & 3 deletions src/app/api/metrics/pr-breakdown/route.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { getServerSession } from "next-auth";
import { NextRequest } from "next/server";
import { authOptions } from "@/lib/auth";
import { getGitHubAccessToken } from "@/lib/server-github-token";

export const dynamic = "force-dynamic";

Expand All @@ -13,17 +15,18 @@ interface PRItem {
};
}

export async function GET() {
export async function GET(req: NextRequest) {
const session = await getServerSession(authOptions);
if (!session?.accessToken) {
const accessToken = await getGitHubAccessToken(req);
if (!session?.githubId || !accessToken) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

const res = await fetch(
`${GITHUB_API}/search/issues?q=type:pr+author:@me&per_page=100`,
{
headers: {
Authorization: `Bearer ${session.accessToken}`,
Authorization: `Bearer ${accessToken}`,
Accept: "application/vnd.github+json",
},
cache: "no-store",
Expand Down
14 changes: 8 additions & 6 deletions src/app/api/metrics/pr-review-time/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
withMetricsCache,
} from "@/lib/metrics-cache";
import { resolveAppUser } from "@/lib/resolve-user";
import { getGitHubAccessToken } from "@/lib/server-github-token";

export const dynamic = "force-dynamic";

Expand Down Expand Up @@ -229,8 +230,9 @@ function formatTrendWeeks(weeks: TrendWeek[]) {

export async function GET(req: NextRequest) {
const session = await getServerSession(authOptions);
const accessToken = await getGitHubAccessToken(req);

if (!session?.accessToken) {
if (!accessToken) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

Expand All @@ -239,9 +241,9 @@ export async function GET(req: NextRequest) {

if (!accountId) {
try {
const result = await fetchPRReviewTrendForAccount(session.accessToken, {
const result = await fetchPRReviewTrendForAccount(accessToken, {
bypass,
userId: session.githubId ?? session.githubLogin ?? "primary",
userId: session?.githubId ?? session?.githubLogin ?? "primary",
});

return Response.json(formatTrendWeeks(result));
Expand All @@ -250,7 +252,7 @@ export async function GET(req: NextRequest) {
}
}

if (!session.githubId || !session.githubLogin) {
if (!session?.githubId || !session.githubLogin) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

Expand All @@ -263,7 +265,7 @@ export async function GET(req: NextRequest) {
if (accountId === "combined") {
const accounts = await getAllAccounts(
{
token: session.accessToken,
token: accessToken,
githubId: session.githubId,
githubLogin: session.githubLogin,
},
Expand All @@ -290,7 +292,7 @@ export async function GET(req: NextRequest) {

const token =
accountId === session.githubId
? session.accessToken
? accessToken
: await getAccountToken(userRow.id, accountId);

if (!token) {
Expand Down
14 changes: 8 additions & 6 deletions src/app/api/metrics/prs/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
} from "@/lib/metrics-cache";
import { supabaseAdmin } from "@/lib/supabase";
import { resolveAppUser } from "@/lib/resolve-user";
import { getGitHubAccessToken } from "@/lib/server-github-token";

export const dynamic = "force-dynamic";

Expand Down Expand Up @@ -236,7 +237,8 @@ function formatPRMetrics(metrics: PRMetricsBase) {

export async function GET(req: NextRequest) {
const session = await getServerSession(authOptions);
if (!session?.accessToken) {
const accessToken = await getGitHubAccessToken(req);
if (!accessToken) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

Expand All @@ -245,17 +247,17 @@ export async function GET(req: NextRequest) {

if (!accountId) {
try {
const result = await fetchCachedPRMetrics(session.accessToken, {
const result = await fetchCachedPRMetrics(accessToken, {
bypass,
userId: session.githubId ?? session.githubLogin ?? "primary",
userId: session?.githubId ?? session?.githubLogin ?? "primary",
});
return Response.json(formatPRMetrics(result));
} catch {
return Response.json({ error: "GitHub API error" }, { status: 502 });
}
}

if (!session.githubId || !session.githubLogin) {
if (!session?.githubId || !session.githubLogin) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}

Expand All @@ -268,7 +270,7 @@ export async function GET(req: NextRequest) {
if (accountId === "combined") {
const accounts = await getAllAccounts(
{
token: session.accessToken,
token: accessToken,
githubId: session.githubId,
githubLogin: session.githubLogin,
},
Expand Down Expand Up @@ -323,7 +325,7 @@ export async function GET(req: NextRequest) {

const token =
accountId === session.githubId
? session.accessToken
? accessToken
: await getAccountToken(userRow.id, accountId);

if (!token) {
Expand Down
Loading
Loading