Open Source Team Metrics based on PRs
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

category fix

+9 -9
+4 -4
lib/infrastructure/adapters/demo/pull-request.adapter.ts
··· 54 mergedAt: summary.mergedAt ? summary.mergedAt.toISOString() : '', 55 cycleTime: summary.mergedAt ? 56 Math.round((summary.mergedAt.getTime() - summary.createdAt.getTime()) / (1000 * 60 * 60) * 10) / 10 : 0, 57 - investmentArea: summary.category?.name || 'Feature Development', 58 linesAdded: summary.additions, 59 files: Math.floor((summary.additions + summary.deletions) / 50) + 1 60 })), ··· 213 mergedAt: summary.mergedAt ? summary.mergedAt.toISOString() : '', 214 cycleTime: summary.mergedAt ? 215 Math.round((summary.mergedAt.getTime() - summary.createdAt.getTime()) / (1000 * 60 * 60) * 10) / 10 : 0, 216 - investmentArea: summary.category?.name || 'Feature Development', 217 linesAdded: summary.additions, 218 files: Math.floor((summary.additions + summary.deletions) / 50) + 1 219 })), ··· 260 mergedAt: summary.mergedAt ? summary.mergedAt.toISOString() : '', 261 cycleTime: summary.mergedAt ? 262 Math.round((summary.mergedAt.getTime() - summary.createdAt.getTime()) / (1000 * 60 * 60) * 10) / 10 : 0, 263 - investmentArea: summary.category?.name || 'Feature Development', 264 linesAdded: summary.additions, 265 files: Math.floor((summary.additions + summary.deletions) / 50) + 1 266 })), ··· 311 mergedAt: summary.mergedAt ? summary.mergedAt.toISOString() : '', 312 cycleTime: summary.mergedAt ? 313 Math.round((summary.mergedAt.getTime() - summary.createdAt.getTime()) / (1000 * 60 * 60) * 10) / 10 : 0, 314 - investmentArea: summary.category?.name || 'Feature Development', 315 linesAdded: summary.additions, 316 files: Math.floor((summary.additions + summary.deletions) / 50) + 1 317 })),
··· 54 mergedAt: summary.mergedAt ? summary.mergedAt.toISOString() : '', 55 cycleTime: summary.mergedAt ? 56 Math.round((summary.mergedAt.getTime() - summary.createdAt.getTime()) / (1000 * 60 * 60) * 10) / 10 : 0, 57 + investmentArea: summary.category?.name || 'Uncertain', 58 linesAdded: summary.additions, 59 files: Math.floor((summary.additions + summary.deletions) / 50) + 1 60 })), ··· 213 mergedAt: summary.mergedAt ? summary.mergedAt.toISOString() : '', 214 cycleTime: summary.mergedAt ? 215 Math.round((summary.mergedAt.getTime() - summary.createdAt.getTime()) / (1000 * 60 * 60) * 10) / 10 : 0, 216 + investmentArea: summary.category?.name || 'Uncertain', 217 linesAdded: summary.additions, 218 files: Math.floor((summary.additions + summary.deletions) / 50) + 1 219 })), ··· 260 mergedAt: summary.mergedAt ? summary.mergedAt.toISOString() : '', 261 cycleTime: summary.mergedAt ? 262 Math.round((summary.mergedAt.getTime() - summary.createdAt.getTime()) / (1000 * 60 * 60) * 10) / 10 : 0, 263 + investmentArea: summary.category?.name || 'Uncertain', 264 linesAdded: summary.additions, 265 files: Math.floor((summary.additions + summary.deletions) / 50) + 1 266 })), ··· 311 mergedAt: summary.mergedAt ? summary.mergedAt.toISOString() : '', 312 cycleTime: summary.mergedAt ? 313 Math.round((summary.mergedAt.getTime() - summary.createdAt.getTime()) / (1000 * 60 * 60) * 10) / 10 : 0, 314 + investmentArea: summary.category?.name || 'Uncertain', 315 linesAdded: summary.additions, 316 files: Math.floor((summary.additions + summary.deletions) / 50) + 1 317 })),
+3 -3
lib/infrastructure/adapters/turso/mappers.ts
··· 34 mergedAt: dbPR.merged_at ? new Date(dbPR.merged_at).toISOString() : '', 35 cycleTime: dbPR.merged_at ? 36 calculateCycleTimeHours(new Date(dbPR.created_at).toISOString(), new Date(dbPR.merged_at).toISOString()) : 0, 37 - investmentArea: 'Feature Development', // Would need category lookup 38 linesAdded: dbPR.additions || 0, 39 files: dbPR.changed_files || 0 40 } ··· 67 mergedAt: dbPR.merged_at ? new Date(dbPR.merged_at).toISOString() : '', 68 cycleTime: dbPR.merged_at ? 69 calculateCycleTimeHours(new Date(dbPR.created_at).toISOString(), new Date(dbPR.merged_at).toISOString()) : 0, 70 - investmentArea: categoryName || 'Feature Development', 71 linesAdded: dbPR.additions || 0, 72 files: dbPR.changed_files || 0 73 } ··· 184 id: pr.repository_id.toString(), 185 name: pr.repository_name || 'unknown' 186 }, 187 - investmentArea: pr.category_name || 'Feature Development' 188 } 189 } 190
··· 34 mergedAt: dbPR.merged_at ? new Date(dbPR.merged_at).toISOString() : '', 35 cycleTime: dbPR.merged_at ? 36 calculateCycleTimeHours(new Date(dbPR.created_at).toISOString(), new Date(dbPR.merged_at).toISOString()) : 0, 37 + investmentArea: 'Uncertain', // Would need category lookup 38 linesAdded: dbPR.additions || 0, 39 files: dbPR.changed_files || 0 40 } ··· 67 mergedAt: dbPR.merged_at ? new Date(dbPR.merged_at).toISOString() : '', 68 cycleTime: dbPR.merged_at ? 69 calculateCycleTimeHours(new Date(dbPR.created_at).toISOString(), new Date(dbPR.merged_at).toISOString()) : 0, 70 + investmentArea: categoryName || 'Uncertain', 71 linesAdded: dbPR.additions || 0, 72 files: dbPR.changed_files || 0 73 } ··· 184 id: pr.repository_id.toString(), 185 name: pr.repository_name || 'unknown' 186 }, 187 + investmentArea: pr.category_name || 'Uncertain' 188 } 189 } 190
+2 -2
lib/infrastructure/adapters/turso/pull-request.adapter.ts
··· 174 const startDate = new Date(endDate) 175 startDate.setDate(startDate.getDate() - days) 176 177 - // Get categories 178 const categories = await query<{ id: number; name: string; color: string }>(` 179 SELECT id, name, COALESCE(color, '#6b7280') as color 180 FROM categories 181 - WHERE organization_id = ? 182 ORDER BY name 183 `, [parseInt(organizationId)]) 184
··· 174 const startDate = new Date(endDate) 175 startDate.setDate(startDate.getDate() - days) 176 177 + // Get categories (include both organization-specific and default categories) 178 const categories = await query<{ id: number; name: string; color: string }>(` 179 SELECT id, name, COALESCE(color, '#6b7280') as color 180 FROM categories 181 + WHERE organization_id = ? OR is_default = 1 182 ORDER BY name 183 `, [parseInt(organizationId)]) 184