ваше сообщение коммита

This commit is contained in:
2025-07-18 11:59:17 +03:00
parent 2ca2827b7d
commit 1a4f2283b7
19 changed files with 5105 additions and 69 deletions

View File

@@ -2,6 +2,8 @@ const express = require('express');
const router = express.Router();
const db = require('../db');
const logger = require('../utils/logger'); // Если используете логгер
const fs = require('fs');
const csv = require('csv-parser');
/**
* @swagger
@@ -72,6 +74,49 @@ router.get('/codes', async (req, res) => {
const page = parseInt(req.query.page, 10) || 1;
const limit = parseInt(req.query.limit, 10) || 25;
const offset = (page - 1) * limit;
const { lang } = req.query;
// Если запрошен русский язык — отдаём из CSV
if (lang === 'ru') {
const { level, parent_code } = req.query;
const results = [];
fs.createReadStream(__dirname + '/../db/data/isic_titles_ru.csv')
.pipe(csv())
.on('data', (data) => {
let pass = true;
// Фильтрация по уровню (по длине кода)
if (level) {
if (level == 1 && data.code.length !== 1) pass = false;
if (level == 2 && data.code.length !== 2) pass = false;
if (level == 3 && data.code.length !== 3) pass = false;
if (level == 4 && data.code.length !== 4) pass = false;
}
// Фильтрация по parent_code
if (parent_code && pass) {
if (level == 2 && !data.code.startsWith(parent_code)) pass = false;
if (level == 3 && !data.code.startsWith(parent_code)) pass = false;
if (level == 4 && !data.code.startsWith(parent_code)) pass = false;
}
if (pass) {
results.push({
code: data.code,
description: data.title,
});
}
})
.on('end', () => {
res.json({
totalItems: results.length,
codes: results,
totalPages: 1,
currentPage: 1,
});
})
.on('error', (err) => {
res.status(500).json({ error: 'Ошибка чтения русских кодов ISIC', details: err.message });
});
return;
}
const baseQuerySelect = `
SELECT c.code, c.description, c.code_level, c.explanatory_note_inclusion, c.explanatory_note_exclusion,

View File

@@ -305,4 +305,45 @@ router.post('/broadcast', async (req, res) => {
}
});
// DELETE /api/messages/history/:userId - удалить историю сообщений пользователя
router.delete('/history/:userId', async (req, res) => {
const userId = req.params.userId;
if (!userId) {
return res.status(400).json({ error: 'userId required' });
}
try {
// Проверяем права администратора
if (!req.user || !req.user.isAdmin) {
return res.status(403).json({ error: 'Only administrators can delete message history' });
}
// Удаляем все сообщения пользователя
const result = await db.getQuery()(
'DELETE FROM messages WHERE user_id = $1 RETURNING id',
[userId]
);
// Удаляем беседы пользователя (если есть)
const conversationResult = await db.getQuery()(
'DELETE FROM conversations WHERE user_id = $1 RETURNING id',
[userId]
);
console.log(`[messages.js] Deleted ${result.rowCount} messages and ${conversationResult.rowCount} conversations for user ${userId}`);
// Отправляем обновление через WebSocket
broadcastMessagesUpdate();
res.json({
success: true,
deletedMessages: result.rowCount,
deletedConversations: conversationResult.rowCount
});
} catch (e) {
console.error('[ERROR] /history/:userId:', e);
res.status(500).json({ error: 'DB error', details: e.message });
}
});
module.exports = router;