Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/portal/sql/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/portal/sql/chat_messaging.sql

-- Chat and Messaging System Schema

-- Message groups (create first as it's referenced by other tables)
CREATE TABLE IF NOT EXISTS message_groups (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(150) NOT NULL,
    scope ENUM('global', 'area', 'district', 'assembly') NOT NULL DEFAULT 'global',
    area_id INT NULL,
    district_id INT NULL,
    assembly_id INT NULL,
    created_by_user_id INT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NULL,
    CONSTRAINT fk_message_groups_area FOREIGN KEY (area_id) REFERENCES areas(id) ON DELETE SET NULL,
    CONSTRAINT fk_message_groups_district FOREIGN KEY (district_id) REFERENCES districts(id) ON DELETE SET NULL,
    CONSTRAINT fk_message_groups_assembly FOREIGN KEY (assembly_id) REFERENCES assemblies(id) ON DELETE SET NULL,
    CONSTRAINT fk_message_groups_user FOREIGN KEY (created_by_user_id) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- Conversations table
CREATE TABLE IF NOT EXISTS chat_conversations (
    id INT AUTO_INCREMENT PRIMARY KEY,
    type ENUM('public', 'member_admin', 'group') NOT NULL DEFAULT 'public',
    guest_token VARCHAR(64) NULL,
    member_id INT NULL,
    group_id INT NULL,
    created_by_user_id INT NULL,
    is_closed TINYINT(1) NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NULL,
    CONSTRAINT fk_chat_conversations_member FOREIGN KEY (member_id) REFERENCES members(id) ON DELETE SET NULL,
    CONSTRAINT fk_chat_conversations_group FOREIGN KEY (group_id) REFERENCES message_groups(id) ON DELETE SET NULL,
    CONSTRAINT fk_chat_conversations_user FOREIGN KEY (created_by_user_id) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- Messages table
CREATE TABLE IF NOT EXISTS chat_messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    conversation_id INT NOT NULL,
    sender_type ENUM('guest', 'member', 'admin') NOT NULL,
    sender_member_id INT NULL,
    sender_user_id INT NULL,
    message_text TEXT NOT NULL,
    is_read TINYINT(1) NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_chat_messages_conversation FOREIGN KEY (conversation_id) REFERENCES chat_conversations(id) ON DELETE CASCADE,
    CONSTRAINT fk_chat_messages_member FOREIGN KEY (sender_member_id) REFERENCES members(id) ON DELETE SET NULL,
    CONSTRAINT fk_chat_messages_user FOREIGN KEY (sender_user_id) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- Group memberships
CREATE TABLE IF NOT EXISTS message_group_members (
    group_id INT NOT NULL,
    member_id INT NOT NULL,
    role ENUM('member', 'admin') NOT NULL DEFAULT 'member',
    joined_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (group_id, member_id),
    CONSTRAINT fk_message_group_members_group FOREIGN KEY (group_id) REFERENCES message_groups(id) ON DELETE CASCADE,
    CONSTRAINT fk_message_group_members_member FOREIGN KEY (member_id) REFERENCES members(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists