From 34527c1842fe58235577b28aa1746d84975fe9e0 Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan <55143799+dephraiim@users.noreply.github.com> Date: Wed, 15 Nov 2023 07:16:43 +0000 Subject: [PATCH] fix: fetch the correct number of open issues using the github search api (#495) --- .../src/app/(marketing)/open/page.tsx | 77 ++++++++++++++----- 1 file changed, 58 insertions(+), 19 deletions(-) diff --git a/apps/marketing/src/app/(marketing)/open/page.tsx b/apps/marketing/src/app/(marketing)/open/page.tsx index 5317e9644..e237919bc 100644 --- a/apps/marketing/src/app/(marketing)/open/page.tsx +++ b/apps/marketing/src/app/(marketing)/open/page.tsx @@ -18,6 +18,14 @@ export const revalidate = 3600; export const dynamic = 'force-dynamic'; +const GITHUB_HEADERS: Record = { + accept: 'application/vnd.github.v3+json', +}; + +if (process.env.NEXT_PRIVATE_GITHUB_TOKEN) { + GITHUB_HEADERS.authorization = `Bearer ${process.env.NEXT_PRIVATE_GITHUB_TOKEN}`; +} + const ZGithubStatsResponse = z.object({ stargazers_count: z.number(), forks_count: z.number(), @@ -28,6 +36,10 @@ const ZMergedPullRequestsResponse = z.object({ total_count: z.number(), }); +const ZOpenIssuesResponse = z.object({ + total_count: z.number(), +}); + const ZStargazersLiveResponse = z.record( z.object({ stars: z.number(), @@ -48,49 +60,76 @@ const ZEarlyAdoptersResponse = z.record( export type StargazersType = z.infer; export type EarlyAdoptersType = z.infer; -export default async function OpenPage() { - const GITHUB_HEADERS: Record = { - accept: 'application/vnd.github.v3+json', - }; - - if (process.env.NEXT_PRIVATE_GITHUB_TOKEN) { - GITHUB_HEADERS.authorization = `Bearer ${process.env.NEXT_PRIVATE_GITHUB_TOKEN}`; - } - - const { - forks_count: forksCount, - open_issues: openIssues, - stargazers_count: stargazersCount, - } = await fetch('https://api.github.com/repos/documenso/documenso', { - headers: GITHUB_HEADERS, +const fetchGithubStats = async () => { + return await fetch('https://api.github.com/repos/documenso/documenso', { + headers: { + ...GITHUB_HEADERS, + }, }) .then(async (res) => res.json()) .then((res) => ZGithubStatsResponse.parse(res)); +}; - const { total_count: mergedPullRequests } = await fetch( +const fetchOpenIssues = async () => { + return await fetch( + 'https://api.github.com/search/issues?q=repo:documenso/documenso+type:issue+state:open&page=0&per_page=1', + { + headers: { + ...GITHUB_HEADERS, + }, + }, + ) + .then(async (res) => res.json()) + .then((res) => ZOpenIssuesResponse.parse(res)); +}; + +const fetchMergedPullRequests = async () => { + return await fetch( 'https://api.github.com/search/issues?q=repo:documenso/documenso/+is:pr+merged:>=2010-01-01&page=0&per_page=1', { - headers: GITHUB_HEADERS, + headers: { + ...GITHUB_HEADERS, + }, }, ) .then(async (res) => res.json()) .then((res) => ZMergedPullRequestsResponse.parse(res)); +}; - const STARGAZERS_DATA = await fetch('https://stargrazer-live.onrender.com/api/stats', { +const fetchStargazers = async () => { + return await fetch('https://stargrazer-live.onrender.com/api/stats', { headers: { accept: 'application/json', }, }) .then(async (res) => res.json()) .then((res) => ZStargazersLiveResponse.parse(res)); +}; - const EARLY_ADOPTERS_DATA = await fetch('https://stargrazer-live.onrender.com/api/stats/stripe', { +const fetchEarlyAdopters = async () => { + return await fetch('https://stargrazer-live.onrender.com/api/stats/stripe', { headers: { accept: 'application/json', }, }) .then(async (res) => res.json()) .then((res) => ZEarlyAdoptersResponse.parse(res)); +}; + +export default async function OpenPage() { + const [ + { forks_count: forksCount, stargazers_count: stargazersCount }, + { total_count: openIssues }, + { total_count: mergedPullRequests }, + STARGAZERS_DATA, + EARLY_ADOPTERS_DATA, + ] = await Promise.all([ + fetchGithubStats(), + fetchOpenIssues(), + fetchMergedPullRequests(), + fetchStargazers(), + fetchEarlyAdopters(), + ]); const MONTHLY_USERS = await getUserMonthlyGrowth();