🎓 Quick CW Classroom Database Setup

Current Issue: The CW Classroom admin page is showing a 500 error because the required database tables don't exist yet.

🔍 Step 1: Check Database Status

First, let's see what tables exist and what's missing:

🛠️ Step 2: Create Missing Tables

Since you already have the user columns (teacher_flag, student_flag), we just need to create the classroom tables:

📋 Manual Setup Option

If the automatic setup doesn't work, you can run this SQL manually:

CREATE TABLE IF NOT EXISTS classrooms ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT, teacher_id INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (teacher_id) REFERENCES users(id) ON DELETE CASCADE, INDEX idx_teacher_id (teacher_id), INDEX idx_created_at (created_at) ); CREATE TABLE IF NOT EXISTS enrollments ( id INT AUTO_INCREMENT PRIMARY KEY, classroom_id INT NOT NULL, student_id INT NOT NULL, joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status ENUM('active', 'pending', 'left') DEFAULT 'active', FOREIGN KEY (classroom_id) REFERENCES classrooms(id) ON DELETE CASCADE, FOREIGN KEY (student_id) REFERENCES users(id) ON DELETE CASCADE, UNIQUE KEY unique_enrollment (classroom_id, student_id), INDEX idx_classroom_id (classroom_id), INDEX idx_student_id (student_id), INDEX idx_status (status) ); CREATE TABLE IF NOT EXISTS classroom_invitations ( id INT AUTO_INCREMENT PRIMARY KEY, classroom_id INT NOT NULL, email VARCHAR(255) NOT NULL, token VARCHAR(255) UNIQUE NOT NULL, expires_at TIMESTAMP NOT NULL, status ENUM('pending', 'accepted', 'declined', 'expired') DEFAULT 'pending', invited_by_user_id INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (classroom_id) REFERENCES classrooms(id) ON DELETE CASCADE, FOREIGN KEY (invited_by_user_id) REFERENCES users(id) ON DELETE CASCADE, INDEX idx_token (token), INDEX idx_email (email), INDEX idx_expires_at (expires_at), INDEX idx_status (status), INDEX idx_classroom_id (classroom_id) ); CREATE TABLE IF NOT EXISTS classroom_activity_log ( id INT AUTO_INCREMENT PRIMARY KEY, classroom_id INT NOT NULL, user_id INT NOT NULL, action_type ENUM('created', 'invited', 'joined', 'left', 'removed', 'modified') NOT NULL, details JSON, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (classroom_id) REFERENCES classrooms(id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, INDEX idx_classroom_id (classroom_id), INDEX idx_user_id (user_id), INDEX idx_action_type (action_type), INDEX idx_created_at (created_at) );

✅ After Setup

Once the tables are created, you should be able to access:

CW Classroom Admin