🪻 distributed transcription service thistle.dunkirk.sh
1
fork

Configure Feed

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

feat: show user and transcript count on classes

+21 -4
+4
src/components/admin-classes.ts
··· 12 12 year: number; 13 13 archived: boolean; 14 14 created_at: number; 15 + student_count?: number; 16 + transcript_count?: number; 15 17 } 16 18 17 19 interface WaitlistEntry { ··· 747 749 <div class="class-meta"> 748 750 <span>👤 ${cls.professor}</span> 749 751 <span>📅 ${cls.semester} ${cls.year}</span> 752 + <span>👥 ${cls.student_count || 0} students</span> 753 + <span>📄 ${cls.transcript_count || 0} transcripts</span> 750 754 ${cls.archived ? html`<span class="badge archived">Archived</span>` : ""} 751 755 </div> 752 756 </div>
+17 -4
src/lib/classes.ts
··· 25 25 enrolled_at: number; 26 26 } 27 27 28 + export interface ClassWithStats extends Class { 29 + student_count?: number; 30 + transcript_count?: number; 31 + } 32 + 28 33 /** 29 34 * Get all classes for a user (either enrolled or admin sees all) 30 35 */ 31 - export function getClassesForUser(userId: number, isAdmin: boolean): Class[] { 36 + export function getClassesForUser( 37 + userId: number, 38 + isAdmin: boolean, 39 + ): ClassWithStats[] { 32 40 if (isAdmin) { 33 41 return db 34 - .query<Class, []>( 35 - "SELECT * FROM classes ORDER BY year DESC, semester DESC, course_code ASC", 42 + .query<ClassWithStats, []>( 43 + `SELECT 44 + c.*, 45 + (SELECT COUNT(*) FROM class_members WHERE class_id = c.id) as student_count, 46 + (SELECT COUNT(*) FROM transcriptions WHERE class_id = c.id) as transcript_count 47 + FROM classes c 48 + ORDER BY c.year DESC, c.semester DESC, c.course_code ASC`, 36 49 ) 37 50 .all(); 38 51 } 39 52 40 53 return db 41 - .query<Class, [number]>( 54 + .query<ClassWithStats, [number]>( 42 55 `SELECT c.* FROM classes c 43 56 INNER JOIN class_members cm ON c.id = cm.class_id 44 57 WHERE cm.user_id = ?