Projet final V10

This commit is contained in:
Flatlogic Bot 2026-02-19 16:53:47 +00:00
parent 224fc0227c
commit a08b70fdf1
3 changed files with 554 additions and 79 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 KiB

13
check_users.php Normal file
View File

@ -0,0 +1,13 @@
<?php
require_once __DIR__ . '/db/config.php';
try {
$stmt = db()->query("SELECT id, username, email FROM users");
$users = $stmt->fetchAll();
echo "Liste des utilisateurs :\n";
foreach ($users as $user) {
echo "- ID: {$user['id']} | Username: {$user['username']} | Email: {$user['email']}\n";
}
} catch (Exception $e) {
echo "Erreur : " . $e->getMessage();
}
unlink(__FILE__);

View File

@ -1,94 +1,556 @@
-- Initial schema for Discord-like app /*M!999999\- enable the sandbox mode */
CREATE TABLE IF NOT EXISTS users ( -- MariaDB dump 10.19 Distrib 10.11.14-MariaDB, for debian-linux-gnu (x86_64)
id INT AUTO_INCREMENT PRIMARY KEY, --
username VARCHAR(50) NOT NULL UNIQUE, -- Host: 127.0.0.1 Database: app_38443
email VARCHAR(100) NOT NULL UNIQUE, -- ------------------------------------------------------
password_hash VARCHAR(255) NOT NULL, -- Server version 10.11.14-MariaDB-0+deb12u2
avatar_url VARCHAR(255),
status VARCHAR(20) DEFAULT 'offline',
is_bot BOOLEAN DEFAULT FALSE,
bot_token VARCHAR(64) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS servers ( /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
id INT AUTO_INCREMENT PRIMARY KEY, /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
name VARCHAR(100) NOT NULL, /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
owner_id INT NOT NULL, /*!40101 SET NAMES utf8mb4 */;
icon_url VARCHAR(255), /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
invite_code VARCHAR(10) UNIQUE, /*!40103 SET TIME_ZONE='+00:00' */;
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
FOREIGN KEY (owner_id) REFERENCES users(id) /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
); /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE TABLE IF NOT EXISTS channels ( --
id INT AUTO_INCREMENT PRIMARY KEY, -- Table structure for table `channel_autoroles`
server_id INT NOT NULL, --
name VARCHAR(100) NOT NULL,
type ENUM('text', 'voice') DEFAULT 'text',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (server_id) REFERENCES servers(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS messages ( DROP TABLE IF EXISTS `channel_autoroles`;
id INT AUTO_INCREMENT PRIMARY KEY, /*!40101 SET @saved_cs_client = @@character_set_client */;
channel_id INT NOT NULL, /*!40101 SET character_set_client = utf8mb4 */;
user_id INT NOT NULL, CREATE TABLE `channel_autoroles` (
content TEXT NOT NULL, `id` int(11) NOT NULL AUTO_INCREMENT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `channel_id` int(11) NOT NULL,
FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE, `icon` varchar(50) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id) `title` varchar(255) NOT NULL,
); `role_id` int(11) NOT NULL,
`created_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
KEY `channel_id` (`channel_id`),
KEY `role_id` (`role_id`),
CONSTRAINT `channel_autoroles_ibfk_1` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE,
CONSTRAINT `channel_autoroles_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
CREATE TABLE IF NOT EXISTS webhooks ( --
id INT AUTO_INCREMENT PRIMARY KEY, -- Table structure for table `channel_last_read`
name VARCHAR(100) NOT NULL, --
token VARCHAR(64) NOT NULL UNIQUE,
channel_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS roles ( DROP TABLE IF EXISTS `channel_last_read`;
id INT AUTO_INCREMENT PRIMARY KEY, /*!40101 SET @saved_cs_client = @@character_set_client */;
server_id INT NOT NULL, /*!40101 SET character_set_client = utf8mb4 */;
name VARCHAR(50) NOT NULL, CREATE TABLE `channel_last_read` (
color VARCHAR(7) DEFAULT '#99aab5', `channel_id` int(11) NOT NULL,
permissions INT DEFAULT 0, `user_id` int(11) NOT NULL,
position INT DEFAULT 0, `last_read_at` timestamp NULL DEFAULT current_timestamp(),
FOREIGN KEY (server_id) REFERENCES servers(id) ON DELETE CASCADE PRIMARY KEY (`channel_id`,`user_id`),
); KEY `user_id` (`user_id`),
CONSTRAINT `channel_last_read_ibfk_1` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE,
CONSTRAINT `channel_last_read_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
CREATE TABLE IF NOT EXISTS user_roles ( --
user_id INT NOT NULL, -- Table structure for table `channel_members`
role_id INT NOT NULL, --
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS server_members ( DROP TABLE IF EXISTS `channel_members`;
server_id INT NOT NULL, /*!40101 SET @saved_cs_client = @@character_set_client */;
user_id INT NOT NULL, /*!40101 SET character_set_client = utf8mb4 */;
joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, CREATE TABLE `channel_members` (
PRIMARY KEY (server_id, user_id), `channel_id` int(11) NOT NULL,
FOREIGN KEY (server_id) REFERENCES servers(id) ON DELETE CASCADE, `user_id` int(11) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE `joined_at` timestamp NULL DEFAULT current_timestamp(),
); PRIMARY KEY (`channel_id`,`user_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `channel_members_ibfk_1` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE,
CONSTRAINT `channel_members_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `channel_permissions`
--
DROP TABLE IF EXISTS `channel_permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `channel_permissions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`channel_id` int(11) NOT NULL,
`role_id` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
`allow_permissions` int(11) DEFAULT 0,
`deny_permissions` int(11) DEFAULT 0,
`role_id_idx` int(11) GENERATED ALWAYS AS (ifnull(`role_id`,0)) VIRTUAL,
`user_id_idx` int(11) GENERATED ALWAYS AS (ifnull(`user_id`,0)) VIRTUAL,
PRIMARY KEY (`id`),
UNIQUE KEY `channel_role_user_fixed` (`channel_id`,`role_id_idx`,`user_id_idx`),
KEY `role_id` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `channel_rss_feeds`
--
DROP TABLE IF EXISTS `channel_rss_feeds`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `channel_rss_feeds` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`channel_id` int(11) NOT NULL,
`url` varchar(255) NOT NULL,
`last_fetched_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
KEY `channel_id` (`channel_id`),
CONSTRAINT `channel_rss_feeds_ibfk_1` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `channel_rules`
--
DROP TABLE IF EXISTS `channel_rules`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `channel_rules` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`channel_id` int(11) NOT NULL,
`content` text NOT NULL,
`position` int(11) DEFAULT 0,
`created_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
KEY `channel_id` (`channel_id`),
CONSTRAINT `channel_rules_ibfk_1` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `channels`
--
DROP TABLE IF EXISTS `channels`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `channels` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`server_id` int(11) DEFAULT NULL,
`name` varchar(100) NOT NULL,
`type` varchar(50) DEFAULT 'chat',
`created_at` timestamp NULL DEFAULT current_timestamp(),
`allow_file_sharing` tinyint(1) DEFAULT 1,
`theme_color` varchar(20) DEFAULT NULL,
`message_limit` int(11) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`icon` varchar(50) DEFAULT NULL,
`position` int(11) DEFAULT 0,
`category_id` int(11) DEFAULT NULL,
`rules_role_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `server_id` (`server_id`),
CONSTRAINT `channels_ibfk_1` FOREIGN KEY (`server_id`) REFERENCES `servers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `custom_emotes`
--
DROP TABLE IF EXISTS `custom_emotes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `custom_emotes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`path` varchar(255) NOT NULL,
`code` varchar(60) NOT NULL,
`created_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `forum_tags`
--
DROP TABLE IF EXISTS `forum_tags`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `forum_tags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`channel_id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`color` varchar(20) DEFAULT '#7289da',
PRIMARY KEY (`id`),
KEY `channel_id` (`channel_id`),
CONSTRAINT `forum_tags_ibfk_1` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `forum_threads`
--
DROP TABLE IF EXISTS `forum_threads`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `forum_threads` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`channel_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`created_at` timestamp NULL DEFAULT current_timestamp(),
`solution_message_id` int(11) DEFAULT NULL,
`is_pinned` tinyint(1) NOT NULL DEFAULT 0,
`is_locked` tinyint(1) NOT NULL DEFAULT 0,
`last_activity_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
KEY `channel_id` (`channel_id`),
KEY `user_id` (`user_id`),
KEY `solution_message_id` (`solution_message_id`),
CONSTRAINT `forum_threads_ibfk_1` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE,
CONSTRAINT `forum_threads_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
CONSTRAINT `forum_threads_ibfk_3` FOREIGN KEY (`solution_message_id`) REFERENCES `messages` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `message_reactions`
--
DROP TABLE IF EXISTS `message_reactions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `message_reactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`message_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`emoji` varchar(50) NOT NULL,
`created_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
UNIQUE KEY `message_id` (`message_id`,`user_id`,`emoji`),
KEY `user_id` (`user_id`),
CONSTRAINT `message_reactions_ibfk_1` FOREIGN KEY (`message_id`) REFERENCES `messages` (`id`) ON DELETE CASCADE,
CONSTRAINT `message_reactions_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `messages`
--
DROP TABLE IF EXISTS `messages`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`channel_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`content` text NOT NULL,
`attachment_url` varchar(255) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT current_timestamp(),
`updated_at` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp(),
`metadata` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`metadata`)),
`is_pinned` tinyint(1) DEFAULT 0,
`thread_id` int(11) DEFAULT NULL,
`rss_guid` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `channel_id` (`channel_id`),
KEY `user_id` (`user_id`),
KEY `fk_thread` (`thread_id`),
KEY `idx_rss_guid` (`rss_guid`),
CONSTRAINT `fk_thread` FOREIGN KEY (`thread_id`) REFERENCES `forum_threads` (`id`) ON DELETE CASCADE,
CONSTRAINT `messages_ibfk_1` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE,
CONSTRAINT `messages_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `roles`
--
DROP TABLE IF EXISTS `roles`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `roles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`server_id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`color` varchar(7) DEFAULT '#99aab5',
`permissions` int(11) DEFAULT 0,
`position` int(11) DEFAULT 0,
`icon_url` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `server_id` (`server_id`),
CONSTRAINT `roles_ibfk_1` FOREIGN KEY (`server_id`) REFERENCES `servers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `rss_processed_items`
--
DROP TABLE IF EXISTS `rss_processed_items`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `rss_processed_items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`channel_id` int(11) NOT NULL,
`rss_guid` varchar(255) NOT NULL,
`created_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
UNIQUE KEY `idx_channel_guid` (`channel_id`,`rss_guid`),
CONSTRAINT `rss_processed_items_ibfk_1` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `rule_acceptances`
--
DROP TABLE IF EXISTS `rule_acceptances`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `rule_acceptances` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`channel_id` int(11) NOT NULL,
`accepted_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
UNIQUE KEY `user_channel` (`user_id`,`channel_id`),
KEY `channel_id` (`channel_id`),
CONSTRAINT `rule_acceptances_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
CONSTRAINT `rule_acceptances_ibfk_2` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `server_members`
--
DROP TABLE IF EXISTS `server_members`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `server_members` (
`server_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`joined_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`server_id`,`user_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `server_members_ibfk_1` FOREIGN KEY (`server_id`) REFERENCES `servers` (`id`) ON DELETE CASCADE,
CONSTRAINT `server_members_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `servers`
--
DROP TABLE IF EXISTS `servers`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `servers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`owner_id` int(11) NOT NULL,
`icon_url` varchar(255) DEFAULT NULL,
`invite_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`created_at` timestamp NULL DEFAULT current_timestamp(),
`theme_color` varchar(20) DEFAULT NULL,
`invite_code_expires_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `invite_code` (`invite_code`),
UNIQUE KEY `invite_code_2` (`invite_code`),
KEY `owner_id` (`owner_id`),
CONSTRAINT `servers_ibfk_1` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `thread_tags`
--
DROP TABLE IF EXISTS `thread_tags`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `thread_tags` (
`thread_id` int(11) NOT NULL,
`tag_id` int(11) NOT NULL,
PRIMARY KEY (`thread_id`,`tag_id`),
KEY `tag_id` (`tag_id`),
CONSTRAINT `thread_tags_ibfk_1` FOREIGN KEY (`thread_id`) REFERENCES `forum_threads` (`id`) ON DELETE CASCADE,
CONSTRAINT `thread_tags_ibfk_2` FOREIGN KEY (`tag_id`) REFERENCES `forum_tags` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `user_roles`
--
DROP TABLE IF EXISTS `user_roles`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `user_roles` (
`user_id` int(11) NOT NULL,
`role_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`,`role_id`),
KEY `role_id` (`role_id`),
CONSTRAINT `user_roles_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
CONSTRAINT `user_roles_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `users`
--
DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`display_name` varchar(50) DEFAULT NULL,
`email` varchar(100) NOT NULL,
`password_hash` varchar(255) NOT NULL,
`avatar_url` varchar(255) DEFAULT NULL,
`status` varchar(20) DEFAULT 'offline',
`created_at` timestamp NULL DEFAULT current_timestamp(),
`is_bot` tinyint(1) DEFAULT 0,
`bot_token` varchar(64) DEFAULT NULL,
`dnd_mode` tinyint(1) DEFAULT 0,
`theme` varchar(20) DEFAULT 'dark',
`sound_notifications` tinyint(1) DEFAULT 0,
`is_admin` tinyint(1) DEFAULT 0,
`voice_mode` enum('vox','ptt') DEFAULT 'vox',
`voice_ptt_key` varchar(20) DEFAULT 'v',
`voice_vox_threshold` float DEFAULT 0.1,
`voice_echo_cancellation` tinyint(1) DEFAULT 1,
`voice_noise_suppression` tinyint(1) DEFAULT 1,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `bot_token` (`bot_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `voice_sessions`
--
DROP TABLE IF EXISTS `voice_sessions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `voice_sessions` (
`user_id` int(11) NOT NULL,
`channel_id` int(11) NOT NULL,
`joined_at` timestamp NULL DEFAULT current_timestamp(),
`last_seen` bigint(20) DEFAULT 0,
`peer_id` varchar(16) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`is_muted` tinyint(1) DEFAULT 0,
`is_deafened` tinyint(1) DEFAULT 0,
PRIMARY KEY (`user_id`),
KEY `channel_id` (`channel_id`),
CONSTRAINT `voice_sessions_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
CONSTRAINT `voice_sessions_ibfk_2` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `voice_signals`
--
DROP TABLE IF EXISTS `voice_signals`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `voice_signals` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`room_id` varchar(50) NOT NULL,
`from_peer_id` varchar(16) NOT NULL,
`to_peer_id` varchar(16) NOT NULL,
`data` text NOT NULL,
`created_at_ms` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `to_peer_id` (`to_peer_id`),
KEY `room_id` (`room_id`),
KEY `created_at` (`created_at_ms`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `voice_whispers`
--
DROP TABLE IF EXISTS `voice_whispers`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `voice_whispers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`target_type` enum('user','channel') NOT NULL,
`target_id` int(11) NOT NULL,
`whisper_key` varchar(50) NOT NULL,
`created_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`whisper_key`),
CONSTRAINT `voice_whispers_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `webhooks`
--
DROP TABLE IF EXISTS `webhooks`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `webhooks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`token` varchar(64) NOT NULL,
`channel_id` int(11) NOT NULL,
`created_at` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
UNIQUE KEY `token` (`token`),
KEY `channel_id` (`channel_id`),
CONSTRAINT `webhooks_ibfk_1` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Seed initial data -- Seed initial data
INSERT IGNORE INTO users (id, username, email, password_hash, status) VALUES INSERT INTO `users` (id, username, display_name, email, password_hash, status, is_admin) VALUES
(1, 'System', 'system@local', '$2y$10$xyz', 'online'); (1, 'System', 'System Bot', 'system@local', '$2y$10$4DDos6MKhMCbsvw1Yquuj.o0NwWCRlbgy85QCmGIJV6GlL8QC4cWW', 'online', 1);
INSERT IGNORE INTO servers (id, name, owner_id, invite_code) VALUES INSERT INTO `servers` (id, name, owner_id, invite_code) VALUES
(1, 'General Community', 1, 'GEN-123'), (1, 'General Community', 1, 'GEN-123'),
(2, 'Flatlogic Devs', 1, 'DEV-456'); (2, 'Flatlogic Devs', 1, 'DEV-456');
INSERT IGNORE INTO server_members (server_id, user_id) VALUES (1, 1), (2, 1); INSERT INTO `server_members` (server_id, user_id) VALUES (1, 1), (2, 1);
INSERT IGNORE INTO channels (id, server_id, name, type) VALUES INSERT INTO `channels` (id, server_id, name, type) VALUES
(1, 1, 'general', 'text'), (1, 1, 'general', 'chat'),
(2, 1, 'random', 'text'), (2, 1, 'random', 'chat'),
(3, 1, 'Voice General', 'voice'), (3, 1, 'Voice General', 'voice'),
(4, 2, 'announcements', 'text'), (4, 2, 'announcements', 'chat'),
(5, 2, 'coding-help', 'text'); (5, 2, 'coding-help', 'chat');
-- Dump completed on 2026-02-19 16:49:04