File: /var/www/html/obaasimaghana/database/schema.sql
-- Create database if not exists
CREATE DATABASE IF NOT EXISTS obaasima_db;
USE obaasima_db;
-- Users table
CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
role ENUM('learner', 'trainer', 'admin') NOT NULL,
full_name VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Cohorts table
CREATE TABLE IF NOT EXISTS cohorts (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
status ENUM('active', 'completed', 'upcoming') DEFAULT 'upcoming',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- User cohorts (for tracking which users belong to which cohort)
CREATE TABLE IF NOT EXISTS user_cohorts (
user_id INT NOT NULL,
cohort_id INT NOT NULL,
joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user_id, cohort_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (cohort_id) REFERENCES cohorts(id) ON DELETE CASCADE
);
-- Courses table
CREATE TABLE IF NOT EXISTS courses (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT,
trainer_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (trainer_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Course materials table
CREATE TABLE IF NOT EXISTS course_materials (
id INT PRIMARY KEY AUTO_INCREMENT,
course_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
type ENUM('text', 'video', 'audio', 'pdf') NOT NULL,
content_url VARCHAR(255) NOT NULL,
order_index INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
);
-- Forum categories table
CREATE TABLE IF NOT EXISTS forum_categories (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Forum topics table
CREATE TABLE IF NOT EXISTS forum_topics (
id INT PRIMARY KEY AUTO_INCREMENT,
category_id INT NOT NULL,
user_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES forum_categories(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Forum replies table
CREATE TABLE IF NOT EXISTS forum_replies (
id INT PRIMARY KEY AUTO_INCREMENT,
topic_id INT NOT NULL,
user_id INT NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (topic_id) REFERENCES forum_topics(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- User progress tracking table
CREATE TABLE IF NOT EXISTS user_progress (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
material_id INT NOT NULL,
status ENUM('not_started', 'in_progress', 'completed') DEFAULT 'not_started',
completed_at TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (material_id) REFERENCES course_materials(id) ON DELETE CASCADE
);
-- Insert default admin user (password: admin123)
INSERT INTO users (username, email, password, role, full_name)
VALUES ('admin', 'admin@obaasima.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin', 'System Administrator');
-- Insert default forum categories
INSERT INTO forum_categories (name, description) VALUES
('General Discussion', 'General topics and discussions'),
('Course Questions', 'Questions about course materials and content'),
('Technical Support', 'Technical issues and support requests'),
('Announcements', 'Important announcements and updates');