export interface Course { id: number; name: string; short_name: string; category: string; description?: string | null; image_url?: string | null; created_at: string; updated_at: string; deleted?: number | boolean; prereq_id?: number | null; } export interface CourseEventDetails { id: number | null; // PK course_id: number | null; // FK → courses.id event_type: number | null; // FK → event_types.id event_date: string; // datetime (not nullable) guilded_event_id: number | null; created_at: string; // datetime updated_at: string; // datetime deleted: boolean | null; // tinyint(4), nullable report_url: string | null; // varchar(2048) remarks: string | null; // text attendees: CourseAttendee[] | null; created_by: number | null; } export interface CourseAttendee { passed: boolean; // tinyint(1) attendee_id: number; // PK course_event_id: number; // PK attendee_role_id: number | null; role: CourseAttendeeRole | null; created_at: string; // datetime → ISO string updated_at: string; // datetime → ISO string remarks: string | null; } export interface CourseAttendeeRole { id: number; // PK, auto-increment name: string | null; // varchar(50), unique, nullable description: string | null; // text created_at: string | null; // datetime (nullable) updated_at: string | null; // datetime (nullable) deleted: boolean; // tinyint(4) } export interface RawAttendeeRow { passed: number; attendee_id: number; course_event_id: number; attendee_role_id: number | null; created_at: string; updated_at: string; remarks: string | null; role_id: number | null; role_name: string | null; role_description: string | null; role_deleted: number | null; role_created_at: string | null; role_updated_at: string | null; } export interface CourseEventSummary { event_id: number; course_id: number; course_name: string; date: string; created_by: number; }