jo3t / app /utils /gitlabStats.ts
samifalouti1
Fresh start without binaries
55d48a7
import type { GitLabProjectInfo, GitLabStats } from '~/types/GitLab';
export function calculateProjectStats(projects: any[]): { projects: GitLabProjectInfo[] } {
const projectStats = {
projects: projects.map((project: any) => ({
id: project.id,
name: project.name,
path_with_namespace: project.path_with_namespace,
description: project.description,
http_url_to_repo: project.http_url_to_repo,
star_count: project.star_count || 0,
forks_count: project.forks_count || 0,
default_branch: project.default_branch,
updated_at: project.updated_at,
visibility: project.visibility,
})),
};
return projectStats;
}
export function calculateStatsSummary(
projects: GitLabProjectInfo[],
events: any[],
groups: any[],
snippets: any[],
user: any,
): GitLabStats {
const totalStars = projects.reduce((sum, p) => sum + (p.star_count || 0), 0);
const totalForks = projects.reduce((sum, p) => sum + (p.forks_count || 0), 0);
const privateProjects = projects.filter((p) => p.visibility === 'private').length;
const recentActivity = events.slice(0, 5).map((event: any) => ({
id: event.id,
action_name: event.action_name,
project_id: event.project_id,
project: event.project,
created_at: event.created_at,
}));
return {
projects,
recentActivity,
totalSnippets: snippets.length,
publicProjects: projects.filter((p) => p.visibility === 'public').length,
privateProjects,
stars: totalStars,
forks: totalForks,
followers: user.followers || 0,
snippets: snippets.length,
groups,
lastUpdated: new Date().toISOString(),
};
}