ntp&modercontent_front

This commit is contained in:
2026-08-10 23:29:34 +03:00
parent e52bfc8f84
commit 204e6a37ed
13 changed files with 628 additions and 192 deletions
+93
View File
@@ -1658,3 +1658,96 @@
[2026-08-10T07:18:02.945Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-10T07:22:25.057Z] [INFO] Server running on http://localhost:3005
[2026-08-10T07:22:25.060Z] [INFO] Card logs initialized successfully
[2026-08-10T17:21:24.568Z] [INFO] Server running on http://localhost:3005
[2026-08-10T17:21:24.572Z] [INFO] Card logs initialized successfully
[2026-08-10T17:38:05.413Z] [INFO] Server running on http://localhost:3005
[2026-08-10T17:38:05.416Z] [INFO] Card logs initialized successfully
[2026-08-10T17:38:24.712Z] [INFO] [LOGIN] Попытка входа: grivova
[2026-08-10T17:38:24.713Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-10T17:38:24.749Z] [INFO] [LOGIN] Результат поиска пользователя: не найден
[2026-08-10T17:38:24.750Z] [WARN] [LOGIN] Пользователь не найден: grivova
[2026-08-10T17:38:29.893Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-10T17:38:29.894Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-10T17:38:29.897Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-10T17:38:29.898Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-10T17:38:30.033Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-10T17:38:30.034Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-10T17:38:30.038Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-10T17:42:06.235Z] [INFO] Server running on http://localhost:3005
[2026-08-10T17:42:06.238Z] [INFO] Card logs initialized successfully
[2026-08-10T17:43:18.054Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
[2026-08-10T17:43:18.068Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
[2026-08-10T17:43:42.744Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-10T17:43:42.745Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-10T17:43:42.751Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-10T17:43:42.752Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-10T17:43:42.833Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-10T17:43:42.834Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-10T17:43:42.835Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-10T17:44:32.453Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
[2026-08-10T17:44:32.465Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
[2026-08-10T17:44:38.654Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-10T17:44:38.655Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-10T17:44:38.657Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-10T17:44:38.658Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-10T17:44:38.794Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-10T17:44:38.795Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-10T17:44:38.798Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-10T17:49:04.372Z] [INFO] Server running on http://localhost:3005
[2026-08-10T17:49:04.376Z] [INFO] Card logs initialized successfully
[2026-08-10T18:07:19.446Z] [INFO] Server running on http://localhost:3005
[2026-08-10T18:07:19.450Z] [INFO] Card logs initialized successfully
[2026-08-10T18:07:21.917Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
[2026-08-10T18:07:21.973Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
[2026-08-10T18:07:22.009Z] [ERROR] [DB CHECK] ❌ Ошибка связи с бэкендом: connect ECONNREFUSED 127.0.0.1:3001; connect ECONNREFUSED ::1:3001
[2026-08-10T18:09:04.717Z] [INFO] Server running on http://localhost:3005
[2026-08-10T18:09:04.720Z] [INFO] Card logs initialized successfully
[2026-08-10T18:11:04.542Z] [INFO] Server running on http://localhost:3005
[2026-08-10T18:11:04.545Z] [INFO] Card logs initialized successfully
[2026-08-10T19:48:50.904Z] [INFO] Server running on http://localhost:3005
[2026-08-10T19:48:50.908Z] [INFO] Card logs initialized successfully
[2026-08-10T19:49:05.177Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
[2026-08-10T19:49:05.244Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
[2026-08-10T19:49:05.309Z] [ERROR] [DB CHECK] ❌ Ошибка связи с бэкендом: connect ECONNREFUSED 127.0.0.1:3001; connect ECONNREFUSED ::1:3001
[2026-08-10T19:52:24.799Z] [INFO] Server running on http://localhost:3005
[2026-08-10T19:52:24.804Z] [INFO] Card logs initialized successfully
[2026-08-10T19:54:26.429Z] [INFO] [LOGIN] Попытка входа: vova
[2026-08-10T19:54:26.430Z] [INFO] [LOGIN] Проверка подключения к базе...
[2026-08-10T19:54:26.437Z] [INFO] [LOGIN] Результат поиска пользователя: найден
[2026-08-10T19:54:26.439Z] [INFO] [LOGIN] Сравнение пароля через bcrypt...
[2026-08-10T19:54:26.774Z] [INFO] [LOGIN] Результат сравнения пароля: true
[2026-08-10T19:54:26.776Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":4,"username":"vova"}
[2026-08-10T19:54:26.780Z] [INFO] [LOGIN] Ответ отправлен
[2026-08-10T19:57:35.827Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content
[2026-08-10T19:57:35.848Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL
[2026-08-10T20:00:31.524Z] [ERROR] PayloadTooLargeError: request entity too large
at readStream (D:\rasch\admin-server1\node_modules\raw-body\index.js:163:17)
at getRawBody (D:\rasch\admin-server1\node_modules\raw-body\index.js:116:12)
at read (D:\rasch\admin-server1\node_modules\body-parser\lib\read.js:113:3)
at jsonParser (D:\rasch\admin-server1\node_modules\body-parser\lib\types\json.js:60:5)
at Layer.handleRequest (D:\rasch\admin-server1\node_modules\router\lib\layer.js:152:17)
at trimPrefix (D:\rasch\admin-server1\node_modules\router\index.js:342:13)
at D:\rasch\admin-server1\node_modules\router\index.js:297:9
at processParams (D:\rasch\admin-server1\node_modules\router\index.js:582:12)
at next (D:\rasch\admin-server1\node_modules\router\index.js:291:5)
at logger (D:\rasch\admin-server1\node_modules\morgan\index.js:170:5)
[2026-08-10T20:02:19.620Z] [INFO] Server running on http://localhost:3005
[2026-08-10T20:02:19.623Z] [INFO] Card logs initialized successfully
[2026-08-10T20:05:33.895Z] [INFO] Server running on http://localhost:3005
[2026-08-10T20:05:33.899Z] [INFO] Card logs initialized successfully
[2026-08-10T20:08:11.744Z] [INFO] Server running on http://localhost:3005
[2026-08-10T20:08:11.746Z] [INFO] Card logs initialized successfully
[2026-08-10T20:09:55.295Z] [INFO] Server running on http://localhost:3005
[2026-08-10T20:09:55.298Z] [INFO] Card logs initialized successfully
[2026-08-10T20:11:38.925Z] [INFO] Server running on http://localhost:3005
[2026-08-10T20:11:38.928Z] [INFO] Card logs initialized successfully
[2026-08-10T20:13:11.668Z] [INFO] Server running on http://localhost:3005
[2026-08-10T20:13:11.671Z] [INFO] Card logs initialized successfully
[2026-08-10T20:13:47.030Z] [INFO] Server running on http://localhost:3005
[2026-08-10T20:13:47.033Z] [INFO] Card logs initialized successfully
[2026-08-10T20:17:59.208Z] [INFO] Server running on http://localhost:3005
[2026-08-10T20:17:59.211Z] [INFO] Card logs initialized successfully
[2026-08-10T20:18:33.110Z] [INFO] Server running on http://localhost:3005
[2026-08-10T20:18:33.113Z] [INFO] Card logs initialized successfully
[2026-08-10T20:24:20.748Z] [INFO] Server running on http://localhost:3005
[2026-08-10T20:24:20.752Z] [INFO] Card logs initialized successfully
+50 -4
View File
@@ -37,7 +37,7 @@ const upload = multer({
// Получить все блоки для вкладки
router.get('/:tab', async (req, res) => {
const { tab } = req.params;
if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
const [rows] = await db.query('SELECT * FROM content_blocks WHERE tab = ? ORDER BY created_at ASC', [tab]);
res.json(rows);
@@ -57,7 +57,7 @@ router.post('/:tab/upload', requireModerator, upload.single('file'), (req, res)
router.post('/:tab', requireModerator, async (req, res) => {
const { tab } = req.params;
const { content } = req.body;
if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
const [result] = await db.query(
'INSERT INTO content_blocks (tab, type, content, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, NOW(), NOW())',
@@ -73,7 +73,7 @@ router.post('/:tab', requireModerator, async (req, res) => {
router.put('/:tab/:id', requireModerator, async (req, res) => {
const { tab, id } = req.params;
const { content } = req.body;
if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
await db.query(
'UPDATE content_blocks SET content = ?, updated_at = NOW() WHERE id = ? AND tab = ?',
@@ -88,7 +88,7 @@ router.put('/:tab/:id', requireModerator, async (req, res) => {
// Удалить блок
router.delete('/:tab/:id', requireModerator, async (req, res) => {
const { tab, id } = req.params;
if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
if (!['info', 'union', 'events', 'help', 'housing'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' });
try {
await db.query('DELETE FROM content_blocks WHERE id = ? AND tab = ?', [id, tab]);
res.json({ message: 'Удалено' });
@@ -96,5 +96,51 @@ router.delete('/:tab/:id', requireModerator, async (req, res) => {
res.status(500).json({ message: 'Ошибка сервера' });
}
});
router.get('/section/:section', async (req, res) => {
const { section } = req.params;
if (!['events', 'help', 'housing'].includes(section)) {
return res.status(400).json({ message: 'Некорректный раздел' });
}
try {
const [rows] = await db.query(
'SELECT * FROM content_blocks WHERE tab = ? ORDER BY created_at ASC',
[section]
);
// Если есть блоки — возвращаем их, иначе пустой массив
res.json(rows);
} catch (err) {
console.error(err);
res.status(500).json({ message: 'Ошибка сервера' });
}
});
// Сохранить контент раздела (очищаем старые и вставляем новый)
router.post('/section/:section', requireModerator, async (req, res) => {
const { section } = req.params;
const { content } = req.body;
if (!['events', 'help', 'housing'].includes(section)) {
return res.status(400).json({ message: 'Некорректный раздел' });
}
try {
// Удаляем старые блоки для этого раздела
await db.query('DELETE FROM content_blocks WHERE tab = ?', [section]);
// Вставляем новый блок
const [result] = await db.query(
'INSERT INTO content_blocks (tab, type, content, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, NOW(), NOW())',
[section, 'text', content, req.session.userId]
);
res.json({
success: true,
id: result.insertId,
message: 'Раздел сохранён'
});
} catch (err) {
console.error(err);
res.status(500).json({ message: 'Ошибка сервера' });
}
});
module.exports = router;
+1 -1
View File
@@ -30,7 +30,7 @@ const sessionConfig = require('./config/session');
app.use(helmet()); // Добавление helmet для защиты
app.use(cors(corsConfig));
app.use(morgan('dev'));
app.use(express.json());
app.use(express.json({ limit: '100mb' }));
app.use(session(sessionConfig(session)));
// Роуты
app.use('/api/auth', authRouter);