sql
This commit is contained in:
@@ -0,0 +1,69 @@
|
|||||||
|
-- ============================================================
|
||||||
|
-- 📦 Схема базы данных модераторов: 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');
|
||||||
@@ -1354,3 +1354,131 @@
|
|||||||
[2026-08-07T13:07:01.595Z] [INFO] Card logs initialized successfully
|
[2026-08-07T13:07:01.595Z] [INFO] Card logs initialized successfully
|
||||||
[2026-08-07T13:07:06.016Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
|
[2026-08-07T13:07:06.016Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
|
||||||
[2026-08-07T13:07:06.042Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
|
[2026-08-07T13:07:06.042Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
|
||||||
|
[2026-08-07T21:44:22.407Z] [INFO] Server running on http://localhost:3005
|
||||||
|
[2026-08-07T21:44:22.408Z] [INFO] Card logs initialized successfully
|
||||||
|
[2026-08-07T21:44:25.125Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:232:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:44:25.156Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:44:25.160Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:44:25.290Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:44:49.320Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:232:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:44:49.355Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:44:49.359Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:44:50.075Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:45:57.457Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:45:57.477Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:46:08.372Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:46:08.446Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:46:09.322Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:46:28.831Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:46:28.899Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:46:29.739Z] [ERROR] Error: Unknown database 'rasch_content'
|
||||||
|
at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30
|
||||||
|
at new Promise (<anonymous>)
|
||||||
|
at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10)
|
||||||
|
at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16
|
||||||
|
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
||||||
|
[2026-08-07T21:54:01.351Z] [INFO] Server running on http://localhost:3005
|
||||||
|
[2026-08-07T21:54:01.353Z] [INFO] Card logs initialized successfully
|
||||||
|
[2026-08-07T21:54:14.915Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
|
||||||
|
[2026-08-07T21:54:14.927Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
|
||||||
|
[2026-08-07T21:54:33.856Z] [INFO] Login successful
|
||||||
|
[2026-08-07T21:54:35.686Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
|
||||||
|
[2026-08-07T21:54:35.689Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
|
||||||
|
[2026-08-07T21:55:39.411Z] [INFO] [LOGIN] Попытка входа: grivova
|
||||||
|
[2026-08-07T21:55:39.411Z] [INFO] [LOGIN] Проверка подключения к базе...
|
||||||
|
[2026-08-07T21:55:39.412Z] [INFO] [LOGIN] Результат поиска пользователя: найден
|
||||||
|
[2026-08-07T21:55:39.412Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
|
||||||
|
[2026-08-07T21:55:39.461Z] [INFO] [LOGIN] Результат сравнения пароля: true
|
||||||
|
[2026-08-07T21:55:39.462Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":2,"username":"grivova"}
|
||||||
|
[2026-08-07T21:55:39.462Z] [INFO] [LOGIN] Ответ отправлен
|
||||||
|
|||||||
Generated
+2541
-649
File diff suppressed because it is too large
Load Diff
@@ -27,10 +27,12 @@
|
|||||||
"express-session": "^1.18.1",
|
"express-session": "^1.18.1",
|
||||||
"fs-extra": "^11.3.0",
|
"fs-extra": "^11.3.0",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"mssql": "^11.0.1",
|
|
||||||
"multer": "^2.0.1",
|
"multer": "^2.0.1",
|
||||||
"mysql2": "^3.14.2",
|
"mysql2": "^3.14.2",
|
||||||
"quill": "^2.0.3",
|
"quill": "^2.0.3",
|
||||||
"ws": "^8.18.3"
|
"ws": "^8.18.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"electron-builder": "^26.15.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+1
-2040
File diff suppressed because it is too large
Load Diff
Generated
+3606
-3801
File diff suppressed because it is too large
Load Diff
@@ -12,12 +12,10 @@
|
|||||||
"@types/react": "^18.0.0",
|
"@types/react": "^18.0.0",
|
||||||
"@types/react-dom": "^18.0.0",
|
"@types/react-dom": "^18.0.0",
|
||||||
"electron-is-dev": "^2.0.0",
|
"electron-is-dev": "^2.0.0",
|
||||||
"ffi-napi": "^4.0.3",
|
|
||||||
"fs": "^0.0.1-security",
|
"fs": "^0.0.1-security",
|
||||||
"http": "^0.0.1-security",
|
"http": "^0.0.1-security",
|
||||||
"https": "^1.0.0",
|
"https": "^1.0.0",
|
||||||
"mammoth": "^1.9.1",
|
"mammoth": "^1.9.1",
|
||||||
"nfc-pcsc": "^0.8.1",
|
|
||||||
"os": "^0.1.2",
|
"os": "^0.1.2",
|
||||||
"path": "^0.12.7",
|
"path": "^0.12.7",
|
||||||
"pdfjs-dist": "2.16.105",
|
"pdfjs-dist": "2.16.105",
|
||||||
@@ -25,9 +23,6 @@
|
|||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-pdf": "6.2.2",
|
"react-pdf": "6.2.2",
|
||||||
"react-scripts": "5.0.1",
|
"react-scripts": "5.0.1",
|
||||||
"ref-array-napi": "^1.2.2",
|
|
||||||
"ref-napi": "^3.0.3",
|
|
||||||
"ref-struct-napi": "^1.1.1",
|
|
||||||
"serialport": "^13.0.0",
|
"serialport": "^13.0.0",
|
||||||
"stream": "^0.0.3",
|
"stream": "^0.0.3",
|
||||||
"textract": "^2.5.0",
|
"textract": "^2.5.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user