70 lines
3.6 KiB
SQL
70 lines
3.6 KiB
SQL
-- ============================================================
|
||
-- 📦 Схема базы данных модераторов: 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');
|