- 后端:Bun + Hono + Drizzle ORM + SQLite - 前端:Vue 3 + Naive UI + ECharts - 项目管理:创建项目 + 绑定 Git 仓库 - OKR 系统:目标/关键结果 CRUD + 进度追踪 - Git 同步:Gitea API 自动同步 commit/PR + 作者关联 - 数据看板:项目 OKR 进度 + KR 状态分布 + 代码活动 - 权限体系:admin/manager/developer/viewer 四级 - Docker 部署:docker-compose + nginx Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
90 lines
5.9 KiB
TypeScript
90 lines
5.9 KiB
TypeScript
// DevPerf Dashboard - Shared Types (Single Source of Truth)
|
|
// Both frontend and backend reference these type definitions
|
|
|
|
export interface ApiResponse<T> {
|
|
code: number;
|
|
data: T;
|
|
message: string;
|
|
}
|
|
|
|
export interface PaginatedData<T> {
|
|
items: T[];
|
|
total: number;
|
|
page: number;
|
|
pageSize: number;
|
|
}
|
|
|
|
export type UserRole = 'admin' | 'manager' | 'developer' | 'viewer';
|
|
export type TaskStatus = 'todo' | 'in_progress' | 'review' | 'done';
|
|
export type TaskPriority = 'urgent' | 'high' | 'medium' | 'low' | 'none';
|
|
export type SprintStatus = 'upcoming' | 'active' | 'completed';
|
|
export type MilestoneStatus = 'backlog' | 'active' | 'completed' | 'cancelled';
|
|
export type PRState = 'open' | 'closed' | 'merged';
|
|
export type SyncSource = 'plane' | 'gitea';
|
|
export type SyncStatus = 'success' | 'error';
|
|
|
|
// Auth
|
|
export interface LoginRequest { email: string; password: string; }
|
|
export interface UserBasic { id: string; displayName: string; email: string; role: UserRole; }
|
|
export interface LoginResponseData { token: string; user: UserBasic; }
|
|
|
|
// Overview
|
|
export interface SprintCycleData { name: string; plannedPoints: number; completedPoints: number; deliveryRate: number; }
|
|
export interface TaskDistributionData { todo: number; inProgress: number; review: number; done: number; }
|
|
export interface ProjectProgressItem { projectId: string; name: string; identifier: string; currentCycleProgress: number; totalPoints: number; completedPoints: number; }
|
|
export interface MemberCodeData { userId: string; name: string; commits: number; prs: number; }
|
|
export interface WeekCodeData { weekStart: string; members: MemberCodeData[]; }
|
|
export interface KRProgressItem { title: string; current: number; target: number; unit: string; }
|
|
export interface OKRProgressItem { id: string; title: string; ownerName: string; progress: number; keyResults: KRProgressItem[]; }
|
|
export interface WeekPRData { weekStart: string; avgHours: number; prCount: number; }
|
|
|
|
export interface OverviewData {
|
|
sprintDelivery: { cycles: SprintCycleData[] };
|
|
taskDistribution: TaskDistributionData;
|
|
projectProgress: ProjectProgressItem[];
|
|
weeklyCodeActivity: { weeks: WeekCodeData[] };
|
|
okrProgress: OKRProgressItem[];
|
|
prMergeTime: { weeks: WeekPRData[] };
|
|
}
|
|
|
|
// Projects
|
|
export interface ProjectListItem { id: string; name: string; identifier: string; lastSyncedAt: string | null; }
|
|
export interface BurndownPoint { date: string; ideal: number; actual: number; }
|
|
export interface CurrentCycleData { name: string; startDate: string; endDate: string; deliveryRate: number; burndown: BurndownPoint[]; }
|
|
export interface MilestoneItem { id: string; name: string; status: MilestoneStatus; targetDate: string; progress: number; totalIssues: number; completedIssues: number; }
|
|
export interface TaskMatrixMember { userId: string; name: string; todo: number; inProgress: number; review: number; done: number; totalPoints: number; }
|
|
export interface WeeklyGitTrend { weekStart: string; commits: number; prs: number; }
|
|
export interface ProjectDetailData { project: ProjectListItem; currentCycle: CurrentCycleData | null; milestones: MilestoneItem[]; taskMatrix: { members: TaskMatrixMember[] }; gitActivity: { recentCommits: number; recentPRs: number; weeklyTrend: WeeklyGitTrend[] }; }
|
|
|
|
// Members
|
|
export interface MemberCycleData { name: string; assignedPoints: number; completedPoints: number; rate: number; }
|
|
export interface HeatmapDay { date: string; commits: number; prsCreated: number; prsMerged: number; tasksCompleted: number; }
|
|
export interface CurrentTaskItem { id: string; title: string; projectName: string; status: TaskStatus; priority: TaskPriority; storyPoints: number | null; dueDate: string | null; }
|
|
export interface KPIScorecard { sprintDeliveryRate: number; avgDeliveryDays: number; bugDensity: number; prMergeTimeAvg: number; reviewParticipation: number; activityStreak: number; }
|
|
export interface MemberDetailData { member: UserBasic; deliveryTrend: { cycles: MemberCycleData[] }; contributionHeatmap: { days: HeatmapDay[] }; currentTasks: CurrentTaskItem[]; kpiScorecard: KPIScorecard; }
|
|
|
|
// OKR
|
|
export interface KeyResultItem { id: string; title: string; targetValue: number; currentValue: number; unit: string; weight: number; progress: number; }
|
|
export interface ObjectiveItem { id: string; title: string; ownerName: string; projectName: string; period: string; progress: number; keyResults: KeyResultItem[]; }
|
|
export interface CreateObjectiveRequest { title: string; ownerId: string; projectId: string; period: string; }
|
|
export interface CreateKeyResultRequest { title: string; targetValue: number; unit: string; weight: number; }
|
|
export interface UpdateKeyResultRequest { currentValue: number; }
|
|
|
|
// Git
|
|
export interface GitHeatmapDay { date: string; commits: number; additions: number; deletions: number; }
|
|
export interface PRMetrics { totalPRs: number; mergedPRs: number; avgMergeTimeHours: number; reviewedPRs: number; }
|
|
export interface WeeklyGitActivity { weekStart: string; commits: number; prs: number; additions: number; deletions: number; }
|
|
export interface GitActivityData { heatmap: GitHeatmapDay[]; prMetrics: PRMetrics; weeklyTrend: WeeklyGitActivity[]; }
|
|
|
|
// Admin
|
|
export interface AdminUser { id: string; displayName: string; email: string; role: UserRole; planeUserId: string | null; gitUsername: string | null; createdAt: string; }
|
|
export interface CreateUserRequest { displayName: string; email: string; password: string; role: UserRole; planeUserId?: string; gitUsername?: string; }
|
|
export interface AuthorMappingItem { id: string; gitEmail: string | null; gitUsername: string | null; userId: string | null; userName: string | null; }
|
|
export interface SyncLogItem { id: string; source: SyncSource; status: SyncStatus; message: string | null; recordsProcessed: number; syncedAt: string; }
|
|
|
|
// Health
|
|
export interface HealthData { status: 'ok'; version: string; uptime: number; dbConnected: boolean; }
|
|
|
|
// Error
|
|
export interface ApiError { code: number; data: null; message: string; }
|