···2525 enrolled_at: number;
2626}
27272828+export interface ClassWithStats extends Class {
2929+ student_count?: number;
3030+ transcript_count?: number;
3131+}
3232+2833/**
2934 * Get all classes for a user (either enrolled or admin sees all)
3035 */
3131-export function getClassesForUser(userId: number, isAdmin: boolean): Class[] {
3636+export function getClassesForUser(
3737+ userId: number,
3838+ isAdmin: boolean,
3939+): ClassWithStats[] {
3240 if (isAdmin) {
3341 return db
3434- .query<Class, []>(
3535- "SELECT * FROM classes ORDER BY year DESC, semester DESC, course_code ASC",
4242+ .query<ClassWithStats, []>(
4343+ `SELECT
4444+ c.*,
4545+ (SELECT COUNT(*) FROM class_members WHERE class_id = c.id) as student_count,
4646+ (SELECT COUNT(*) FROM transcriptions WHERE class_id = c.id) as transcript_count
4747+ FROM classes c
4848+ ORDER BY c.year DESC, c.semester DESC, c.course_code ASC`,
3649 )
3750 .all();
3851 }
39524053 return db
4141- .query<Class, [number]>(
5454+ .query<ClassWithStats, [number]>(
4255 `SELECT c.* FROM classes c
4356 INNER JOIN class_members cm ON c.id = cm.class_id
4457 WHERE cm.user_id = ?