const db = require('../config/database'); class Course { static async findByTeacherId(teacherId) { const sql = ` SELECT c.*, cl.class_name, (SELECT COUNT(*) FROM students s WHERE s.class = cl.class_name) as student_count FROM courses c LEFT JOIN classes cl ON c.class_id = cl.id WHERE c.teacher_id = ? ORDER BY c.course_code `; return await db.query(sql, [teacherId]); } static async findById(id) { const rows = await db.query('SELECT * FROM courses WHERE id = ?', [id]); return rows[0]; } static async findDetailsById(id) { const sql = ` SELECT c.*, u.name as teacher_name, cl.class_name FROM courses c JOIN users u ON c.teacher_id = u.id JOIN classes cl ON c.class_id = cl.id WHERE c.id = ? `; const rows = await db.query(sql, [id]); return rows[0]; } static async findByStudentId(studentId) { const sql = ` SELECT c.*, u.name as teacher_name FROM courses c JOIN classes cl ON c.class_id = cl.id JOIN students s ON cl.class_name = s.class JOIN users u ON c.teacher_id = u.id WHERE s.id = ? ORDER BY c.course_code `; return await db.query(sql, [studentId]); } static async getClasses() { return await db.query('SELECT * FROM classes'); } static async create(data) { const { course_name, course_code, credit, teacher_id, semester, class_id, category } = data; const sql = `INSERT INTO courses (course_name, course_code, credit, teacher_id, semester, class_id, category) VALUES (?, ?, ?, ?, ?, ?, ?)`; const result = await db.query(sql, [course_name, course_code, credit, teacher_id, semester, class_id, category]); return result.insertId; } static async update(id, data) { const { course_name, course_code, credit, semester, class_id } = data; const sql = ` UPDATE courses SET course_name = ?, course_code = ?, credit = ?, semester = ?, class_id = ? WHERE id = ? `; const result = await db.query(sql, [course_name, course_code, credit, semester, class_id, id]); return result.affectedRows > 0; } } module.exports = Course;