Skip to content

Commit a682c3e

Browse files
committed
refactor: ♻️ Fetch issue if in db
1 parent e219af7 commit a682c3e

3 files changed

Lines changed: 43 additions & 13 deletions

File tree

ui/server/services/dashboard/manager.ts

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -377,19 +377,13 @@ async function _renderAndUpsertFromDbState(
377377
let openIssue: IssueRef | null = null;
378378

379379
if (installation?.issue_number) {
380-
try {
381-
const issues = await provider.listIssues(owner, repo, {
382-
creator: provider.getBotLogin(),
383-
state: "open",
384-
});
385-
const existing = issues.find(
386-
(i) => i.number === installation.issue_number && i.state === "open",
387-
);
388-
if (existing) {
389-
openIssue = existing;
390-
}
391-
} catch {
392-
// Continue without a cached open-issue reference
380+
const fetched = await provider.getIssue(
381+
owner,
382+
repo,
383+
installation.issue_number,
384+
);
385+
if (fetched?.state === "open") {
386+
openIssue = fetched;
393387
}
394388
}
395389

ui/server/services/providers/github.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,36 @@ export class GitHubRepositoryProvider implements RepositoryProvider {
398398
}));
399399
}
400400

401+
/**
402+
* Fetches a single issue by number.
403+
* @param owner - The repository owner.
404+
* @param repo - The repository name.
405+
* @param issueNumber - The issue number to fetch.
406+
* @returns The issue reference, or null if the issue does not exist.
407+
*/
408+
async getIssue(
409+
owner: string,
410+
repo: string,
411+
issueNumber: number,
412+
): Promise<IssueRef | null> {
413+
try {
414+
const { data } = await this.octokit.request(
415+
"GET /repos/{owner}/{repo}/issues/{issue_number}",
416+
{ headers, issue_number: issueNumber, owner, repo },
417+
);
418+
return {
419+
title: data.title,
420+
body: data.body ?? null,
421+
htmlUrl: data.html_url,
422+
number: data.number,
423+
state: data.state as "open" | "closed",
424+
userLogin: data.user?.login ?? null,
425+
};
426+
} catch {
427+
return null; // 404 — issue was deleted
428+
}
429+
}
430+
401431
/**
402432
* Creates a new issue in the repository.
403433
* @param owner - The repository owner.

ui/server/services/providers/interface.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,12 @@ export interface RepositoryProvider {
171171

172172
// Issues
173173

174+
getIssue(
175+
owner: string,
176+
repo: string,
177+
issueNumber: number,
178+
): Promise<IssueRef | null>;
179+
174180
listIssues(
175181
owner: string,
176182
repo: string,

0 commit comments

Comments
 (0)