-- ============================================================ -- 📦 Схема базы данных модераторов: rasch_content -- Таблицы: users (модераторы), content_blocks (контент), sessions -- Совместимо с MySQL 8.0+ (CHECK-ограничения требуют 8.0.16+) -- Для более старых версий закомментируйте строки с CHECK. -- -- Запуск: mysql -u root -p < schema.sql -- ============================================================ CREATE DATABASE IF NOT EXISTS rasch_content CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE rasch_content; -- ------------------------------------------------------------ -- Модераторы -- ------------------------------------------------------------ CREATE TABLE IF NOT EXISTS users ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(100) NOT NULL, password_hash VARCHAR(255) NOT NULL, -- bcrypt-хэш (60+ символов) created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uq_users_username (username) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ------------------------------------------------------------ -- Модерский контент (вкладки "Информация" и "Профсоюз") -- HTML-разметка из редактора Quill хранится в content -- ------------------------------------------------------------ CREATE TABLE IF NOT EXISTS content_blocks ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, tab VARCHAR(20) NOT NULL, -- 'info' | 'union' type VARCHAR(20) NOT NULL DEFAULT 'text', -- пока только 'text' content MEDIUMTEXT NOT NULL, -- HTML created_by INT UNSIGNED DEFAULT NULL, -- FK -> users.id created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_content_blocks_tab (tab), KEY idx_content_blocks_created_by (created_by), CONSTRAINT fk_content_blocks_created_by FOREIGN KEY (created_by) REFERENCES users (id) ON DELETE SET NULL ON UPDATE CASCADE, -- Ограничения значений (MySQL 8.0.16+) CONSTRAINT chk_content_blocks_tab CHECK (tab IN ('info', 'union')), CONSTRAINT chk_content_blocks_type CHECK (type IN ('text')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ------------------------------------------------------------ -- Сессии (express-mysql-session) -- Точная структура из node_modules/express-mysql-session/schema.sql -- ------------------------------------------------------------ CREATE TABLE IF NOT EXISTS sessions ( session_id varchar(128) COLLATE utf8mb4_bin NOT NULL, expires int(11) unsigned NOT NULL, data mediumtext COLLATE utf8mb4_bin, PRIMARY KEY (session_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ------------------------------------------------------------ -- Демо-модератор -- Пароль: "moderator123" (bcrypt, соль 10 раундов) -- После создания измените пароль через админ-панель. -- ------------------------------------------------------------ INSERT INTO users (username, password_hash) VALUES ('moderator', '$2b$10$7EqJtq98hPqEX7fNZaFWoOhi5SzuYrGTgEdf762vPz0J8wD0GmKMS');