Sindbad~EG File Manager
-- COP Madina Area Reports Database Schema
CREATE DATABASE IF NOT EXISTS copmadinaarea_copreports;
USE copmadinaarea_copreports;
-- Users table
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
user_level ENUM('superuser', 'area', 'district', 'assembly') NOT NULL,
user_role ENUM('admin', 'dataentry', 'viewer') NOT NULL,
area_id INT NULL,
district_id INT NULL,
assembly_id INT NULL,
is_active BOOLEAN DEFAULT TRUE,
last_login TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Areas table
CREATE TABLE areas (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Districts table
CREATE TABLE districts (
id INT AUTO_INCREMENT PRIMARY KEY,
area_id INT NOT NULL,
name VARCHAR(100) NOT NULL,
description TEXT,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (area_id) REFERENCES areas(id) ON DELETE CASCADE
);
-- Assemblies table
CREATE TABLE assemblies (
id INT AUTO_INCREMENT PRIMARY KEY,
district_id INT NOT NULL,
name VARCHAR(100) NOT NULL,
description TEXT,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (district_id) REFERENCES districts(id) ON DELETE CASCADE
);
-- Notifications table
CREATE TABLE notifications (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
message TEXT NOT NULL,
type ENUM('info', 'success', 'warning', 'error') DEFAULT 'info',
is_read BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Audit logs table
CREATE TABLE audit_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
action VARCHAR(100) NOT NULL,
table_name VARCHAR(50) NOT NULL,
record_id INT NULL,
old_values JSON NULL,
new_values JSON NULL,
ip_address VARCHAR(45) NOT NULL,
user_agent TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Settings table
CREATE TABLE settings (
id INT AUTO_INCREMENT PRIMARY KEY,
setting_key VARCHAR(100) UNIQUE NOT NULL,
setting_value TEXT,
description TEXT,
updated_by INT NOT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (updated_by) REFERENCES users(id)
);
-- Sessions table for session management
CREATE TABLE user_sessions (
id VARCHAR(128) PRIMARY KEY,
user_id INT NOT NULL,
ip_address VARCHAR(45) NOT NULL,
user_agent TEXT,
last_activity TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Insert default data
INSERT INTO areas (name, description) VALUES
('Madina Area', 'Main area for COP Madina');
INSERT INTO districts (area_id, name, description) VALUES
(1, 'Madina District 1', 'First district in Madina Area'),
(1, 'Madina District 2', 'Second district in Madina Area');
INSERT INTO assemblies (district_id, name, description) VALUES
(1, 'Madina Assembly 1', 'First assembly in District 1'),
(1, 'Madina Assembly 2', 'Second assembly in District 1'),
(2, 'Madina Assembly 3', 'First assembly in District 2');
-- Insert superuser account
INSERT INTO users (username, email, password_hash, first_name, last_name, user_level, user_role) VALUES
('nabibo', 'nabibo2@yahoo.co.uk', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Super', 'User', 'superuser', 'admin');
-- Insert default settings
INSERT INTO settings (setting_key, setting_value, description, updated_by) VALUES
('site_title', 'COP Madina Area Reports', 'Main site title', 1),
('footer_title', '© 2024 The Church of Pentecost - Madina Area', 'Footer copyright text', 1),
('theme', 'blue-gradient', 'Current theme', 1),
('logo_path', 'assets/images/logo.png', 'Path to site logo', 1),
('backup_frequency', 'daily', 'Backup frequency setting', 1);
-- Create indexes for better performance
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_username ON users(username);
CREATE INDEX idx_users_level_role ON users(user_level, user_role);
CREATE INDEX idx_notifications_user_read ON notifications(user_id, is_read);
CREATE INDEX idx_audit_logs_user_date ON audit_logs(user_id, created_at);
CREATE INDEX idx_sessions_user ON user_sessions(user_id);
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists