Skip to content

Commit 55985a8

Browse files
rajbosCopilot
andauthored
Add admin overview dashboard with aggregate stats and trend chart (#696)
- Add getAllUploads() DB function with JOIN to get github_login per row - Add day index on usage_uploads for faster admin queries - Admin dashboard (shown to is_admin users) includes: - Aggregate stats card (today/7d/30d) with Active Users count - Token usage trend chart for all users (by model/editor/by user) - Top Users by token usage table (last 30 days) - All Users list (collapsible, unchanged) - By User grouping caps at top 10 users; others shown as 'Other' - Admin today stats patched client-side using browser local timezone - Admin section appears above personal data for immediate visibility Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent c943a5e commit 55985a8

2 files changed

Lines changed: 387 additions & 7 deletions

File tree

sharing-server/src/db.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,20 @@ export function getAllUsers(): UserRow[] {
362362
return getDb().prepare('SELECT * FROM users ORDER BY created_at DESC').all() as unknown as UserRow[];
363363
}
364364

365+
export interface AdminUploadRow extends UploadRow {
366+
github_login: string;
367+
}
368+
369+
export function getAllUploads(days = 30): AdminUploadRow[] {
370+
return getDb().prepare(`
371+
SELECT uu.*, u.github_login
372+
FROM usage_uploads uu
373+
JOIN users u ON uu.user_id = u.id
374+
WHERE uu.day >= date('now', '-' || ? || ' days')
375+
ORDER BY uu.day DESC, uu.model
376+
`).all(days) as unknown as AdminUploadRow[];
377+
}
378+
365379
export function upsertUserFluencyScore(userId: number, scoreJson: string): void {
366380
getDb().prepare(`
367381
UPDATE users SET fluency_score_json = ? WHERE id = ?

0 commit comments

Comments
 (0)