📋 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)
);