diff --git a/src/pages/background/background.ts b/src/pages/background/background.ts index e64d3913..f832a332 100644 --- a/src/pages/background/background.ts +++ b/src/pages/background/background.ts @@ -9,6 +9,7 @@ import onUpdate from './events/onUpdate'; import browserActionHandler from './handler/browserActionHandler'; import calendarBackgroundHandler from './handler/calendarBackgroundHandler'; import CESHandler from './handler/CESHandler'; +import gitHubStatsHandler from './handler/gitHubStatsHandler'; import tabManagementHandler from './handler/tabManagementHandler'; import userScheduleHandler from './handler/userScheduleHandler'; @@ -52,6 +53,7 @@ const messageListener = new MessageListener({ ...userScheduleHandler, ...CESHandler, ...calendarBackgroundHandler, + ...gitHubStatsHandler, }); messageListener.listen(); diff --git a/src/pages/background/handler/gitHubStatsHandler.ts b/src/pages/background/handler/gitHubStatsHandler.ts new file mode 100644 index 00000000..f6b73d5c --- /dev/null +++ b/src/pages/background/handler/gitHubStatsHandler.ts @@ -0,0 +1,31 @@ +import type GitHubStatsMessages from '@shared/messages/GitHubStatsMessages'; +import { GitHubStatsService } from '@views/lib/getGitHubStats'; +import type { MessageHandler } from 'chrome-extension-toolkit'; + +const gitHubStatsService = new GitHubStatsService(); + +/** + * Handler for GitHub stats related messages + */ +const gitHubStatsHandler: MessageHandler = { + async fetchGitHubStats({ data, sendResponse }) { + try { + const includeMergedPRs = data ?? false; + const stats = await gitHubStatsService.fetchGitHubStats({ includeMergedPRs }); + sendResponse(stats); + } catch (error) { + console.error('Error fetching GitHub stats in background:', error); + sendResponse({ + adminGitHubStats: {}, + userGitHubStats: {}, + contributors: [], + names: {}, + dataFetched: new Date(), + lastUpdated: new Date(), + isCached: false, + }); + } + }, +}; + +export default gitHubStatsHandler; diff --git a/src/shared/messages/GitHubStatsMessages.ts b/src/shared/messages/GitHubStatsMessages.ts new file mode 100644 index 00000000..06297eb4 --- /dev/null +++ b/src/shared/messages/GitHubStatsMessages.ts @@ -0,0 +1,14 @@ +import type { GitHubStatsService } from '@views/lib/getGitHubStats'; + +/* eslint-disable jsdoc/require-jsdoc */ + +export type GitHubStatsResult = Awaited>; + +export default interface GitHubStatsMessages { + /** + * Fetch GitHub statistics for all contributors + * @param includeMergedPRs - Whether to include merged PR counts (optional, default: false) + * @returns GitHub stats including commits, lines added/deleted, and optionally merged PRs + */ + fetchGitHubStats: (includeMergedPRs?: boolean) => GitHubStatsResult; +} diff --git a/src/shared/messages/index.ts b/src/shared/messages/index.ts index 30a3a54e..a01af847 100644 --- a/src/shared/messages/index.ts +++ b/src/shared/messages/index.ts @@ -3,6 +3,7 @@ import { createMessenger } from 'chrome-extension-toolkit'; import type BrowserActionMessages from './BrowserActionMessages'; import type { CalendarBackgroundMessages, CalendarTabMessages } from './CalendarMessages'; import type CESMessage from './CESMessage'; +import type GitHubStatsMessages from './GitHubStatsMessages'; import type TabInfoMessages from './TabInfoMessages'; import type TabManagementMessages from './TabManagementMessages'; import type { UserScheduleMessages } from './UserScheduleMessages'; @@ -14,7 +15,8 @@ export type BACKGROUND_MESSAGES = BrowserActionMessages & TabManagementMessages & UserScheduleMessages & CESMessage & - CalendarBackgroundMessages; + CalendarBackgroundMessages & + GitHubStatsMessages; /** * This is a type with all the message definitions that can be sent TO specific tabs