diff --git a/backend/app.js b/backend/app.js index d707ad4..7b08e85 100644 --- a/backend/app.js +++ b/backend/app.js @@ -114,13 +114,13 @@ app.use((req, res, next) => sessionConfig.sessionMiddleware(req, res, next)); // Добавим middleware для проверки сессии app.use(async (req, res, next) => { - console.log('Request cookies:', req.headers.cookie); - console.log('Session ID:', req.sessionID); + // console.log('Request cookies:', req.headers.cookie); + // console.log('Session ID:', req.sessionID); // Проверяем сессию в базе данных if (req.sessionID) { const result = await db.getQuery()('SELECT sess FROM session WHERE sid = $1', [req.sessionID]); - console.log('Session from DB:', result.rows[0]?.sess); + // console.log('Session from DB:', result.rows[0]?.sess); } // Если сессия уже есть, используем её @@ -156,7 +156,7 @@ app.use(async (req, res, next) => { await new Promise((resolve) => req.session.save(resolve)); } } catch (error) { - console.error('Error checking auth header:', error); + // console.error('Error checking auth header:', error); } } @@ -188,7 +188,7 @@ app.use( // Логирование запросов app.use((req, res, next) => { - console.log('[APP] Глобальный лог:', req.method, req.originalUrl); + // console.log('[APP] Глобальный лог:', req.method, req.originalUrl); logger.info(`${req.method} ${req.url}`); next(); }); @@ -224,21 +224,21 @@ const nonceStore = new Map(); // или любая другая реализац const redactedValue = '***********'; // Логируем переменные окружения для отладки -console.log('NODE_ENV:', process.env.NODE_ENV); -console.log('PORT:', process.env.PORT); -console.log('POSTGRES_HOST:', process.env.POSTGRES_HOST); -console.log('POSTGRES_PORT:', process.env.POSTGRES_PORT); -console.log('POSTGRES_DB:', process.env.POSTGRES_DB); -console.log('POSTGRES_USER:', redactedValue); -console.log('POSTGRES_PASSWORD:', redactedValue); -console.log('TELEGRAM_BOT_TOKEN:', redactedValue); -console.log('TELEGRAM_BOT_USERNAME:', process.env.TELEGRAM_BOT_USERNAME); -console.log('OPENAI_API_KEY:', redactedValue); +// console.log('NODE_ENV:', process.env.NODE_ENV); +// console.log('PORT:', process.env.PORT); +// console.log('POSTGRES_HOST:', process.env.POSTGRES_HOST); +// console.log('POSTGRES_PORT:', process.env.POSTGRES_PORT); +// console.log('POSTGRES_DB:', process.env.POSTGRES_DB); +// console.log('POSTGRES_USER:', redactedValue); +// console.log('POSTGRES_PASSWORD:', redactedValue); +// console.log('TELEGRAM_BOT_TOKEN:', redactedValue); +// console.log('TELEGRAM_BOT_USERNAME:', process.env.TELEGRAM_BOT_USERNAME); +// console.log('OPENAI_API_KEY:', redactedValue); // console.log('SESSION_SECRET:', process.env.SESSION_SECRET); // Убираем вывод секретного ключа -console.log('EMAIL_USER:', process.env.EMAIL_USER); -console.log('EMAIL_PASSWORD:', redactedValue); +// console.log('EMAIL_USER:', process.env.EMAIL_USER); +// console.log('EMAIL_PASSWORD:', redactedValue); -console.log('typeof errorHandler:', typeof errorHandler, errorHandler.name); +// console.log('typeof errorHandler:', typeof errorHandler, errorHandler.name); // Добавляем обработчик ошибок последним app.use(errorHandler); @@ -303,7 +303,7 @@ setInterval( try { await db.getQuery('DELETE FROM session WHERE expire < NOW()'); } catch (error) { - console.error('Error cleaning old sessions:', error); + // console.error('Error cleaning old sessions:', error); } }, 15 * 60 * 1000 diff --git a/backend/db/init.js b/backend/db/init.js index e07553d..aa3bac4 100644 --- a/backend/db/init.js +++ b/backend/db/init.js @@ -44,7 +44,7 @@ async function initRoles() { (4, 'admin', 'Администратор с полным доступом'); `); - console.log('Таблица roles создана и заполнена'); + // console.log('Таблица roles создана и заполнена'); } else { // Проверяем наличие ролей const rolesExist = await pool.query(` @@ -74,11 +74,11 @@ async function initRoles() { `); } - console.log('Таблица roles обновлена'); + // console.log('Таблица roles обновлена'); } } } catch (error) { - console.error('Ошибка при инициализации таблицы roles:', error); + // console.error('Ошибка при инициализации таблицы roles:', error); throw error; } } diff --git a/backend/middleware/auth.js b/backend/middleware/auth.js index 799f473..34dee3f 100644 --- a/backend/middleware/auth.js +++ b/backend/middleware/auth.js @@ -10,7 +10,7 @@ * GitHub: https://github.com/HB3-ACCELERATOR */ -console.log('[DIAG][auth.js] Файл загружен:', __filename); +// console.log('[DIAG][auth.js] Файл загружен:', __filename); const { createError } = require('../utils/error'); const authService = require('../services/auth-service'); @@ -30,14 +30,14 @@ try { encryptionKey = fs.readFileSync(keyPath, 'utf8').trim(); } } catch (keyError) { - console.error('Error reading encryption key:', keyError); + // console.error('Error reading encryption key:', keyError); } /** * Middleware для проверки аутентификации */ const requireAuth = async (req, res, next) => { - console.log('[DIAG][requireAuth] session:', req.session); + // console.log('[DIAG][requireAuth] session:', req.session); if (!req.session || !req.session.authenticated) { return res.status(401).json({ error: 'Требуется аутентификация' }); } @@ -148,7 +148,7 @@ async function checkRole(req, res, next) { next(); } catch (error) { - console.error('Error in checkRole middleware:', error); + // console.error('Error in checkRole middleware:', error); res.status(500).json({ error: 'Internal server error' }); } } diff --git a/backend/middleware/errorHandler.js b/backend/middleware/errorHandler.js index 78bc909..daad198 100644 --- a/backend/middleware/errorHandler.js +++ b/backend/middleware/errorHandler.js @@ -18,11 +18,11 @@ const { ERROR_CODES } = require('../utils/constants'); * Middleware для обработки ошибок */ const errorHandler = (err, req, res, next) => { - console.log('errorHandler called, arguments:', arguments); - console.log('typeof res:', typeof res, 'isFunction:', typeof res === 'function'); - console.error('errorHandler: err =', err); - console.error('errorHandler: typeof err =', typeof err); - console.error('errorHandler: stack =', err && err.stack); + // console.log('errorHandler called, arguments:', arguments); + // console.log('typeof res:', typeof res, 'isFunction:', typeof res === 'function'); + // console.error('errorHandler: err =', err); + // console.error('errorHandler: typeof err =', typeof err); + // console.error('errorHandler: stack =', err && err.stack); // Логируем ошибку logger.error(`Error: ${err.message}`, { stack: err.stack, diff --git a/backend/routes/messages.js b/backend/routes/messages.js index bc69b1d..d6533e2 100644 --- a/backend/routes/messages.js +++ b/backend/routes/messages.js @@ -146,28 +146,28 @@ router.post('/', async (req, res) => { // 4. Если это исходящее сообщение для Telegram — отправляем через бота if (channel === 'telegram' && direction === 'out') { try { - console.log(`[messages.js] Попытка отправки сообщения в Telegram для user_id=${user_id}`); + // console.log(`[messages.js] Попытка отправки сообщения в Telegram для user_id=${user_id}`); // Получаем Telegram ID пользователя const tgIdentity = await db.getQuery()( 'SELECT decrypt_text(provider_id_encrypted, $3) as provider_id FROM user_identities WHERE user_id = $1 AND provider_encrypted = encrypt_text($2, $3) LIMIT 1', [user_id, 'telegram', encryptionKey] ); - console.log(`[messages.js] Результат поиска Telegram ID:`, tgIdentity.rows); + // console.log(`[messages.js] Результат поиска Telegram ID:`, tgIdentity.rows); if (tgIdentity.rows.length > 0) { const telegramId = tgIdentity.rows[0].provider_id; - console.log(`[messages.js] Отправка сообщения в Telegram ID: ${telegramId}, текст: ${content}`); + // console.log(`[messages.js] Отправка сообщения в Telegram ID: ${telegramId}, текст: ${content}`); const bot = await telegramBot.getBot(); try { const sendResult = await bot.telegram.sendMessage(telegramId, content); - console.log(`[messages.js] Результат отправки в Telegram:`, sendResult); + // console.log(`[messages.js] Результат отправки в Telegram:`, sendResult); } catch (sendErr) { - console.error(`[messages.js] Ошибка при отправке в Telegram:`, sendErr); + // console.error(`[messages.js] Ошибка при отправке в Telegram:`, sendErr); } } else { - console.warn(`[messages.js] Не найден Telegram ID для user_id=${user_id}`); + // console.warn(`[messages.js] Не найден Telegram ID для user_id=${user_id}`); } } catch (err) { - console.error('[messages.js] Ошибка отправки сообщения в Telegram:', err); + // console.error('[messages.js] Ошибка отправки сообщения в Telegram:', err); } } // 5. Если это исходящее сообщение для Email — отправляем email @@ -183,7 +183,7 @@ router.post('/', async (req, res) => { await emailBot.sendEmail(email, 'Новое сообщение', content); } } catch (err) { - console.error('[messages.js] Ошибка отправки email:', err); + // console.error('[messages.js] Ошибка отправки email:', err); } } broadcastMessagesUpdate(); @@ -196,16 +196,16 @@ router.post('/', async (req, res) => { // POST /api/messages/mark-read router.post('/mark-read', async (req, res) => { try { - console.log('[DEBUG] /mark-read req.user:', req.user); - console.log('[DEBUG] /mark-read req.body:', req.body); + // console.log('[DEBUG] /mark-read req.user:', req.user); + // console.log('[DEBUG] /mark-read req.body:', req.body); const adminId = req.user && req.user.id; const { userId, lastReadAt } = req.body; if (!adminId) { - console.error('[ERROR] /mark-read: adminId (req.user.id) is missing'); + // console.error('[ERROR] /mark-read: adminId (req.user.id) is missing'); return res.status(401).json({ error: 'Unauthorized: adminId missing' }); } if (!userId || !lastReadAt) { - console.error('[ERROR] /mark-read: userId or lastReadAt missing'); + // console.error('[ERROR] /mark-read: userId or lastReadAt missing'); return res.status(400).json({ error: 'userId and lastReadAt required' }); } await db.query(` @@ -215,7 +215,7 @@ router.post('/mark-read', async (req, res) => { `, [adminId, userId, lastReadAt]); res.json({ success: true }); } catch (e) { - console.error('[ERROR] /mark-read:', e); + // console.error('[ERROR] /mark-read:', e); res.status(500).json({ error: e.message }); } }); @@ -223,23 +223,23 @@ router.post('/mark-read', async (req, res) => { // GET /api/messages/read-status router.get('/read-status', async (req, res) => { try { - console.log('[DEBUG] /read-status req.user:', req.user); - console.log('[DEBUG] /read-status req.session:', req.session); - console.log('[DEBUG] /read-status req.session.userId:', req.session && req.session.userId); + // console.log('[DEBUG] /read-status req.user:', req.user); + // console.log('[DEBUG] /read-status req.session:', req.session); + // console.log('[DEBUG] /read-status req.session.userId:', req.session && req.session.userId); const adminId = req.user && req.user.id; if (!adminId) { - console.error('[ERROR] /read-status: adminId (req.user.id) is missing'); + // console.error('[ERROR] /read-status: adminId (req.user.id) is missing'); return res.status(401).json({ error: 'Unauthorized: adminId missing' }); } const result = await db.query('SELECT user_id, last_read_at FROM admin_read_messages WHERE admin_id = $1', [adminId]); - console.log('[DEBUG] /read-status SQL result:', result.rows); + // console.log('[DEBUG] /read-status SQL result:', result.rows); const map = {}; for (const row of result.rows) { map[row.user_id] = row.last_read_at; } res.json(map); } catch (e) { - console.error('[ERROR] /read-status:', e); + // console.error('[ERROR] /read-status:', e); res.status(500).json({ error: e.message }); } }); diff --git a/backend/routes/tables.js b/backend/routes/tables.js index 3f35164..9f10a19 100644 --- a/backend/routes/tables.js +++ b/backend/routes/tables.js @@ -10,7 +10,7 @@ * GitHub: https://github.com/HB3-ACCELERATOR */ -console.log('[DIAG][tables.js] Файл загружен:', __filename); +// console.log('[DIAG][tables.js] Файл загружен:', __filename); const express = require('express'); const router = express.Router(); @@ -32,7 +32,7 @@ function getEncryptionKey() { } router.use((req, res, next) => { - console.log('Tables router received:', req.method, req.originalUrl); + // console.log('Tables router received:', req.method, req.originalUrl); next(); }); @@ -44,7 +44,7 @@ router.get('/', async (req, res, next) => { try { encryptionKey = getEncryptionKey(); } catch (keyError) { - console.error('Error reading encryption key:', keyError); + // console.error('Error reading encryption key:', keyError); return res.status(500).json({ error: 'Database encryption error' }); } @@ -65,7 +65,7 @@ router.post('/', async (req, res, next) => { try { encryptionKey = getEncryptionKey(); } catch (keyError) { - console.error('Error reading encryption key:', keyError); + // console.error('Error reading encryption key:', keyError); return res.status(500).json({ error: 'Database encryption error' }); } @@ -98,7 +98,7 @@ router.get('/rag-sources', async (req, res, next) => { res.json(result.rows); } catch (err) { - console.error('[RAG Sources] Error:', err); + // console.error('[RAG Sources] Error:', err); next(err); } }); @@ -236,7 +236,7 @@ router.post('/:id/rows', async (req, res, next) => { 'INSERT INTO user_rows (table_id) VALUES ($1) RETURNING *', [tableId] ); - console.log('[DEBUG][addRow] result.rows[0]:', result.rows[0]); + // console.log('[DEBUG][addRow] result.rows[0]:', result.rows[0]); // Получаем ключ шифрования const fs = require('fs'); const path = require('path'); @@ -260,11 +260,11 @@ router.post('/:id/rows', async (req, res, next) => { // Получаем все строки и значения для upsert const rows = (await db.getQuery()('SELECT r.id as row_id, decrypt_text(c.value_encrypted, $2) as text, decrypt_text(c2.value_encrypted, $2) as answer FROM user_rows r LEFT JOIN user_cell_values c ON c.row_id = r.id AND c.column_id = 1 LEFT JOIN user_cell_values c2 ON c2.row_id = r.id AND c2.column_id = 2 WHERE r.table_id = $1', [tableId, encryptionKey])).rows; const upsertRows = rows.filter(r => r.row_id && r.text).map(r => ({ row_id: r.row_id, text: r.text, metadata: { answer: r.answer } })); - console.log('[DEBUG][upsertRows]', upsertRows); + // console.log('[DEBUG][upsertRows]', upsertRows); if (upsertRows.length > 0) { await vectorSearchClient.upsert(tableId, upsertRows); } - console.log('[DEBUG][addRow] res.json:', result.rows[0]); + // console.log('[DEBUG][addRow] res.json:', result.rows[0]); res.json(result.rows[0]); broadcastTableUpdate(tableId); } catch (err) { diff --git a/backend/routes/tags.js b/backend/routes/tags.js index dc79f22..51843ed 100644 --- a/backend/routes/tags.js +++ b/backend/routes/tags.js @@ -16,10 +16,10 @@ const db = require('../db'); const { requireAuth } = require('../middleware/auth'); const { broadcastTagsUpdate } = require('../wsHub'); -console.log('[tags.js] ROUTER LOADED'); +// console.log('[tags.js] ROUTER LOADED'); router.use((req, res, next) => { - console.log('[tags.js] ROUTER REQUEST:', req.method, req.originalUrl); + // console.log('[tags.js] ROUTER REQUEST:', req.method, req.originalUrl); next(); }); @@ -100,15 +100,15 @@ router.post('/user/:rowId/multirelations', async (req, res) => { encryptionKey = fs.readFileSync(keyPath, 'utf8').trim(); } } catch (keyError) { - console.error('Error reading encryption key:', keyError); + // console.error('Error reading encryption key:', keyError); } // Проверяем, является ли это обновлением тегов (проверяем связанную таблицу) const relatedTableName = (await db.getQuery()('SELECT decrypt_text(name_encrypted, $2) as name FROM user_tables WHERE id = $1', [to_table_id, encryptionKey])).rows[0]; - console.log('🔄 [Tags] Multirelations: проверяем связанную таблицу:', { to_table_id, tableName: relatedTableName?.name }); + // console.log('🔄 [Tags] Multirelations: проверяем связанную таблицу:', { to_table_id, tableName: relatedTableName?.name }); if (relatedTableName && relatedTableName.name === 'Теги клиентов') { - console.log('🔄 [Tags] Multirelations: обновление тегов для строки:', rowId); + // console.log('🔄 [Tags] Multirelations: обновление тегов для строки:', rowId); // Удаляем старые связи для этой строки/столбца await db.getQuery()('DELETE FROM user_table_relations WHERE from_row_id = $1 AND column_id = $2', [rowId, column_id]); diff --git a/backend/routes/users.js b/backend/routes/users.js index 2a99d0b..3aad09e 100644 --- a/backend/routes/users.js +++ b/backend/routes/users.js @@ -19,10 +19,10 @@ const { deleteUserById } = require('../services/userDeleteService'); const { broadcastContactsUpdate } = require('../wsHub'); // const userService = require('../services/userService'); -console.log('[users.js] ROUTER LOADED'); +// console.log('[users.js] ROUTER LOADED'); router.use((req, res, next) => { - console.log('[users.js] ROUTER REQUEST:', req.method, req.originalUrl); + // console.log('[users.js] ROUTER REQUEST:', req.method, req.originalUrl); next(); }); @@ -42,7 +42,7 @@ router.get('/profile', requireAuth, async (req, res) => { } res.json({ success: true, user }); } catch (error) { - console.error('Error getting user profile:', error); + // console.error('Error getting user profile:', error); res.status(500).json({ success: false, message: 'Internal server error' }); } }); @@ -57,7 +57,7 @@ router.put('/profile', requireAuth, async (req, res) => { const updatedUser = await userService.updateUserProfile(userId, profileData); res.json({ success: true, user: updatedUser, message: 'Profile updated successfully' }); } catch (error) { - console.error('Error updating user profile:', error); + // console.error('Error updating user profile:', error); // Можно добавить более специфичную обработку ошибок, например, если данные невалидны res.status(500).json({ success: false, message: 'Internal server error' }); } @@ -382,19 +382,19 @@ router.patch('/:id', requireAuth, async (req, res) => { // DELETE /api/users/:id — удалить контакт и все связанные данные router.delete('/:id', requireAuth, async (req, res) => { - console.log('[users.js] DELETE HANDLER', req.params.id); + // console.log('[users.js] DELETE HANDLER', req.params.id); const userId = Number(req.params.id); - console.log('[ROUTER] Перед вызовом deleteUserById для userId:', userId); + // console.log('[ROUTER] Перед вызовом deleteUserById для userId:', userId); try { const deletedCount = await deleteUserById(userId); - console.log('[ROUTER] deleteUserById вернул:', deletedCount); + // console.log('[ROUTER] deleteUserById вернул:', deletedCount); if (deletedCount === 0) { return res.status(404).json({ success: false, deleted: 0, error: 'User not found' }); } broadcastContactsUpdate(); res.json({ success: true, deleted: deletedCount }); } catch (e) { - console.error('[DELETE] Ошибка при удалении пользователя:', e); + // console.error('[DELETE] Ошибка при удалении пользователя:', e); res.status(500).json({ error: 'DB error', details: e.message }); } }); diff --git a/backend/scripts/check-dependencies.js b/backend/scripts/check-dependencies.js index 14e3f6f..357fa29 100644 --- a/backend/scripts/check-dependencies.js +++ b/backend/scripts/check-dependencies.js @@ -21,9 +21,9 @@ const requiredDependencies = ['express-rate-limit', 'winston', 'helmet', 'csurf' const missingDependencies = requiredDependencies.filter((dep) => !dependencies[dep]); if (missingDependencies.length > 0) { - console.error('Missing dependencies:', missingDependencies); - console.error('Please install them with: yarn add ' + missingDependencies.join(' ')); + // console.error('Missing dependencies:', missingDependencies); + // console.error('Please install them with: yarn add ' + missingDependencies.join(' ')); process.exit(1); } -console.log('All required dependencies are installed.'); + // console.log('All required dependencies are installed.'); diff --git a/backend/scripts/cleanup-sessions.js b/backend/scripts/cleanup-sessions.js index 070d75a..75f7fff 100644 --- a/backend/scripts/cleanup-sessions.js +++ b/backend/scripts/cleanup-sessions.js @@ -15,19 +15,19 @@ const db = require('../db'); async function cleanupSessions() { try { - console.log('Starting session cleanup...'); + // console.log('Starting session cleanup...'); const result = await sessionService.cleanupProcessedGuestIds(); if (result) { - console.log('Session cleanup completed successfully'); + // console.log('Session cleanup completed successfully'); } else { - console.log('Session cleanup failed'); + // console.log('Session cleanup failed'); } process.exit(0); } catch (error) { - console.error('Error during cleanup:', error); + // console.error('Error during cleanup:', error); process.exit(1); } } diff --git a/backend/scripts/test-ai-queue-docker.js b/backend/scripts/test-ai-queue-docker.js index 2392e53..76a443c 100644 --- a/backend/scripts/test-ai-queue-docker.js +++ b/backend/scripts/test-ai-queue-docker.js @@ -17,14 +17,14 @@ process.env.OLLAMA_MODEL = 'qwen2.5:7b'; const aiQueueService = require('../services/ai-queue'); async function testQueueInDocker() { - console.log('🐳 Тестирование AI очереди в Docker...\n'); + // console.log('🐳 Тестирование AI очереди в Docker...\n'); try { // Проверяем инициализацию - console.log('1. Проверка инициализации очереди...'); + // console.log('1. Проверка инициализации очереди...'); const stats = aiQueueService.getStats(); - console.log('✅ Очередь инициализирована:', stats.isInitialized); - console.log('📊 Статистика:', { + // console.log('✅ Очередь инициализирована:', stats.isInitialized); + // console.log('📊 Статистика:', { totalProcessed: stats.totalProcessed, totalFailed: stats.totalFailed, currentQueueSize: stats.currentQueueSize, diff --git a/backend/scripts/warmup-model.js b/backend/scripts/warmup-model.js index 20c90ec..1edc135 100644 --- a/backend/scripts/warmup-model.js +++ b/backend/scripts/warmup-model.js @@ -11,7 +11,7 @@ const OLLAMA_URL = process.env.OLLAMA_URL || 'http://ollama:11434'; const MODEL_NAME = process.env.OLLAMA_MODEL || 'qwen2.5:7b'; async function warmupModel() { - console.log('🔥 Разогрев модели Ollama...'); + // console.log('🔥 Разогрев модели Ollama...'); try { // Проверяем доступность Ollama @@ -20,7 +20,7 @@ async function warmupModel() { throw new Error(`Ollama недоступен: ${healthResponse.status}`); } - console.log('✅ Ollama доступен'); + // console.log('✅ Ollama доступен'); // Отправляем простой запрос для разогрева const warmupResponse = await fetch(`${OLLAMA_URL}/v1/chat/completions`, { @@ -54,11 +54,11 @@ async function warmupModel() { } const data = await warmupResponse.json(); - console.log('✅ Модель разогрета успешно'); - console.log(`📝 Ответ модели: ${data.choices?.[0]?.message?.content?.substring(0, 100)}...`); + // console.log('✅ Модель разогрета успешно'); + // console.log(`📝 Ответ модели: ${data.choices?.[0]?.message?.content?.substring(0, 100)}...`); } catch (error) { - console.error('❌ Ошибка разогрева модели:', error.message); + // console.error('❌ Ошибка разогрева модели:', error.message); // Не прерываем запуск приложения } } diff --git a/backend/server.js b/backend/server.js index 57c39f6..e2c1491 100644 --- a/backend/server.js +++ b/backend/server.js @@ -22,41 +22,41 @@ const { warmupModel } = require('./scripts/warmup-model'); // Добавляем const PORT = process.env.PORT || 8000; -console.log('Начало выполнения server.js'); -console.log('Переменная окружения PORT:', process.env.PORT); -console.log('Используемый порт:', process.env.PORT || 8000); +// console.log('Начало выполнения server.js'); +// console.log('Переменная окружения PORT:', process.env.PORT); +// console.log('Используемый порт:', process.env.PORT || 8000); // Инициализация сервисов async function initServices() { try { - console.log('Инициализация сервисов...'); - console.log('[initServices] Запуск Email-бота...'); - console.log('[initServices] Создаю экземпляр EmailBotService...'); + // console.log('Инициализация сервисов...'); + // console.log('[initServices] Запуск Email-бота...'); + // console.log('[initServices] Создаю экземпляр EmailBotService...'); let emailBot; try { emailBot = new EmailBotService(); - console.log('[initServices] Экземпляр EmailBotService создан'); + // console.log('[initServices] Экземпляр EmailBotService создан'); } catch (err) { - console.error('[initServices] Ошибка при создании экземпляра EmailBotService:', err); + // console.error('[initServices] Ошибка при создании экземпляра EmailBotService:', err); throw err; } - console.log('[initServices] Перед вызовом emailBot.start()'); + // console.log('[initServices] Перед вызовом emailBot.start()'); try { await emailBot.start(); - console.log('[initServices] Email-бот успешно запущен'); + // console.log('[initServices] Email-бот успешно запущен'); } catch (err) { - console.error('[initServices] Ошибка при запуске emailBot:', err); + // console.error('[initServices] Ошибка при запуске emailBot:', err); } - console.log('[initServices] Запуск Telegram-бота...'); + // console.log('[initServices] Запуск Telegram-бота...'); try { await getBot(); - console.log('[initServices] Telegram-бот успешно запущен'); + // console.log('[initServices] Telegram-бот успешно запущен'); } catch (err) { - console.error('[initServices] Ошибка при запуске Telegram-бота:', err); + // console.error('[initServices] Ошибка при запуске Telegram-бота:', err); + } + } catch (error) { + // console.error('Ошибка при инициализации сервисов:', error); } - } catch (error) { - console.error('Ошибка при инициализации сервисов:', error); - } } const server = http.createServer(app); @@ -67,22 +67,22 @@ async function startServer() { await seedAIAssistantSettings(); // Инициализация ассистента после загрузки модели Ollama // Разогрев модели Ollama - console.log('🔥 Запуск разогрева модели...'); + // console.log('🔥 Запуск разогрева модели...'); setTimeout(() => { warmupModel().catch(err => { - console.error('❌ Ошибка разогрева модели:', err.message); + // console.error('❌ Ошибка разогрева модели:', err.message); }); }, 10000); // Задержка 10 секунд для полной инициализации await initServices(); // Только теперь запускать сервисы - console.log(`Server is running on port ${PORT}`); + // console.log(`Server is running on port ${PORT}`); } server.listen(PORT, async () => { try { await startServer(); } catch (error) { - console.error('Error starting server:', error); + // console.error('Error starting server:', error); process.exit(1); } }); diff --git a/backend/services/admin-role.js b/backend/services/admin-role.js index 4b1746d..f3d3c5b 100644 --- a/backend/services/admin-role.js +++ b/backend/services/admin-role.js @@ -44,9 +44,9 @@ async function checkAdminRole(address) { if (fs.existsSync(keyPath)) { encryptionKey = fs.readFileSync(keyPath, 'utf8').trim(); } - } catch (keyError) { - console.error('Error reading encryption key:', keyError); - } + } catch (keyError) { + // console.error('Error reading encryption key:', keyError); + } // Получаем токены и RPC из базы с расшифровкой const tokensResult = await db.getQuery()( diff --git a/backend/services/ai-assistant.js b/backend/services/ai-assistant.js index a0cec11..29df701 100644 --- a/backend/services/ai-assistant.js +++ b/backend/services/ai-assistant.js @@ -10,7 +10,7 @@ * GitHub: https://github.com/HB3-ACCELERATOR */ -console.log('[ai-assistant] loaded'); +// console.log('[ai-assistant] loaded'); const { ChatOllama } = require('@langchain/ollama'); const { HNSWLib } = require('@langchain/community/vectorstores/hnswlib'); @@ -51,7 +51,7 @@ class AIAssistant { this.isModelLoaded = false; } } catch (error) { - console.error('Model health check failed:', error); + // console.error('Model health check failed:', error); this.isModelLoaded = false; } @@ -142,7 +142,7 @@ class AIAssistant { // Основной метод для получения ответа async getResponse(message, language = 'auto', history = null, systemPrompt = '', rules = null) { try { - console.log('getResponse called with:', { message, language, history, systemPrompt, rules }); + // console.log('getResponse called with:', { message, language, history, systemPrompt, rules }); // Очищаем старый кэш this.cleanupCache(); @@ -150,7 +150,7 @@ class AIAssistant { // Проверяем здоровье модели const isHealthy = await this.checkModelHealth(); if (!isHealthy) { - console.warn('Model is not healthy, returning fallback response'); + // console.warn('Model is not healthy, returning fallback response'); return 'Извините, модель временно недоступна. Пожалуйста, попробуйте позже.'; } @@ -161,7 +161,7 @@ class AIAssistant { }); const cachedResponse = aiCache.get(cacheKey); if (cachedResponse) { - console.log('Returning cached response'); + // console.log('Returning cached response'); return cachedResponse; } @@ -207,7 +207,7 @@ class AIAssistant { // Определяем язык, если не указан явно const detectedLanguage = language === 'auto' ? this.detectLanguage(message) : language; - console.log('Detected language:', detectedLanguage); + // console.log('Detected language:', detectedLanguage); // Формируем system prompt с учётом правил let fullSystemPrompt = systemPrompt || ''; @@ -234,22 +234,22 @@ class AIAssistant { // Пробуем прямой API запрос (OpenAI-совместимый endpoint) try { - console.log('Trying direct API request...'); + // console.log('Trying direct API request...'); response = await this.fallbackRequestOpenAI(messages, detectedLanguage, fullSystemPrompt); - console.log('Direct API response received:', response); + // console.log('Direct API response received:', response); } catch (error) { - console.error('Error in direct API request:', error); + // console.error('Error in direct API request:', error); // Если прямой запрос не удался, пробуем через ChatOllama (склеиваем сообщения в текст) const chat = this.createChat(detectedLanguage, fullSystemPrompt); try { const prompt = messages.map(m => `${m.role === 'user' ? 'Пользователь' : m.role === 'assistant' ? 'Ассистент' : 'Система'}: ${m.content}`).join('\n'); - console.log('Sending request to ChatOllama...'); + // console.log('Sending request to ChatOllama...'); const chatResponse = await chat.invoke(prompt); - console.log('ChatOllama response:', chatResponse); + // console.log('ChatOllama response:', chatResponse); response = chatResponse.content; } catch (chatError) { - console.error('Error using ChatOllama:', chatError); + // console.error('Error using ChatOllama:', chatError); throw chatError; } } @@ -261,7 +261,7 @@ class AIAssistant { return response; } catch (error) { - console.error('Error in getResponse:', error); + // console.error('Error in getResponse:', error); return 'Извините, я не смог обработать ваш запрос. Пожалуйста, попробуйте позже.'; } } @@ -269,7 +269,7 @@ class AIAssistant { // Новый метод для OpenAI/Qwen2.5 совместимого endpoint async fallbackRequestOpenAI(messages, language, systemPrompt = '') { try { - console.log('Using fallbackRequestOpenAI with:', { messages, language, systemPrompt }); + // console.log('Using fallbackRequestOpenAI with:', { messages, language, systemPrompt }); const model = this.defaultModel; // Создаем AbortController для таймаута @@ -315,7 +315,7 @@ class AIAssistant { } return data.response || ''; } catch (error) { - console.error('Error in fallbackRequestOpenAI:', error); + // console.error('Error in fallbackRequestOpenAI:', error); if (error.name === 'AbortError') { throw new Error('Request timeout - модель не ответила в течение 120 секунд'); } diff --git a/backend/services/aiAssistantSettingsService.js b/backend/services/aiAssistantSettingsService.js index b759291..11840d0 100644 --- a/backend/services/aiAssistantSettingsService.js +++ b/backend/services/aiAssistantSettingsService.js @@ -30,7 +30,7 @@ async function getSettings() { encryptionKey = fs.readFileSync(keyPath, 'utf8').trim(); } } catch (keyError) { - console.error('Error reading encryption key:', keyError); + // console.error('Error reading encryption key:', keyError); } // Получаем связанные данные из telegram_settings и email_settings diff --git a/backend/services/aiProviderSettingsService.js b/backend/services/aiProviderSettingsService.js index 9caa6dc..852ce09 100644 --- a/backend/services/aiProviderSettingsService.js +++ b/backend/services/aiProviderSettingsService.js @@ -148,7 +148,7 @@ async function getAllLLMModels() { } } } catch (ollamaError) { - console.error('Error checking Ollama models:', ollamaError); + // console.error('Error checking Ollama models:', ollamaError); // Если не удалось проверить Ollama, добавляем базовые модели allModels.push({ id: 'qwen2.5:7b', provider: 'ollama' }); } @@ -167,7 +167,7 @@ async function getAllLLMModels() { return uniqueModels; } catch (error) { - console.error('Error getting LLM models:', error); + // console.error('Error getting LLM models:', error); return []; } } @@ -213,7 +213,7 @@ async function getAllEmbeddingModels() { } } } catch (ollamaError) { - console.error('Error checking Ollama embedding models:', ollamaError); + // console.error('Error checking Ollama embedding models:', ollamaError); // Если не удалось проверить Ollama, добавляем базовые embedding модели allModels.push({ id: 'mxbai-embed-large:latest', provider: 'ollama' }); } @@ -232,7 +232,7 @@ async function getAllEmbeddingModels() { return uniqueModels; } catch (error) { - console.error('Error getting embedding models:', error); + // console.error('Error getting embedding models:', error); return []; } } diff --git a/backend/services/emailBot.js b/backend/services/emailBot.js index 72a4371..8c4d324 100644 --- a/backend/services/emailBot.js +++ b/backend/services/emailBot.js @@ -10,7 +10,7 @@ * GitHub: https://github.com/HB3-ACCELERATOR */ -console.log('[EmailBot] emailBot.js loaded'); +// console.log('[EmailBot] emailBot.js loaded'); const encryptedDb = require('./encryptedDatabaseService'); const db = require('../db'); const nodemailer = require('nodemailer'); @@ -28,7 +28,7 @@ const { isUserBlocked } = require('../utils/userUtils'); class EmailBotService { constructor() { - console.log('[EmailBot] constructor called'); + // console.log('[EmailBot] constructor called'); } async getSettingsFromDb() { @@ -43,7 +43,7 @@ class EmailBotService { encryptionKey = fs.readFileSync(keyPath, 'utf8').trim(); } } catch (keyError) { - console.error('Error reading encryption key:', keyError); + // console.error('Error reading encryption key:', keyError); } const { rows } = await db.getQuery()( @@ -530,7 +530,7 @@ class EmailBotService { async start() { try { - console.log('[EmailBot] start() called'); + // console.log('[EmailBot] start() called'); logger.info('[EmailBot] start() called'); const imapConfig = await this.getImapConfig(); // Логируем IMAP-конфиг (без пароля) @@ -580,7 +580,7 @@ class EmailBotService { }; tryConnect(); } catch (err) { - console.error('[EmailBot] Ошибка при старте:', err); + // console.error('[EmailBot] Ошибка при старте:', err); logger.error('[EmailBot] Ошибка при старте:', err); throw err; } @@ -592,5 +592,5 @@ class EmailBotService { } } -console.log('[EmailBot] module.exports = EmailBotService'); +// console.log('[EmailBot] module.exports = EmailBotService'); module.exports = EmailBotService; diff --git a/backend/services/encryptedDatabaseService.js b/backend/services/encryptedDatabaseService.js index def2c96..7efc672 100644 --- a/backend/services/encryptedDatabaseService.js +++ b/backend/services/encryptedDatabaseService.js @@ -20,34 +20,34 @@ class EncryptedDataService { this.isEncryptionEnabled = !!this.encryptionKey; if (this.isEncryptionEnabled) { - console.log('🔐 Шифрование базы данных активировано'); - console.log('📋 Автоматическое определение зашифрованных колонок'); + // console.log('🔐 Шифрование базы данных активировано'); + // console.log('📋 Автоматическое определение зашифрованных колонок'); } else { - console.log('⚠️ Шифрование базы данных отключено - ключ не найден'); + // console.log('⚠️ Шифрование базы данных отключено - ключ не найден'); } } loadEncryptionKey() { try { const keyPath = path.join(__dirname, '../../ssl/keys/full_db_encryption.key'); - console.log(`[EncryptedDB] Trying key path: ${keyPath}`); + // console.log(`[EncryptedDB] Trying key path: ${keyPath}`); if (fs.existsSync(keyPath)) { const key = fs.readFileSync(keyPath, 'utf8').trim(); - console.log(`[EncryptedDB] Key loaded from: ${keyPath}, length: ${key.length}`); + // console.log(`[EncryptedDB] Key loaded from: ${keyPath}, length: ${key.length}`); return key; } // Попробуем альтернативный путь относительно корня приложения const altKeyPath = '/app/ssl/keys/full_db_encryption.key'; - console.log(`[EncryptedDB] Trying alternative key path: ${altKeyPath}`); + // console.log(`[EncryptedDB] Trying alternative key path: ${altKeyPath}`); if (fs.existsSync(altKeyPath)) { const key = fs.readFileSync(altKeyPath, 'utf8').trim(); - console.log(`[EncryptedDB] Key loaded from: ${altKeyPath}, length: ${key.length}`); + // console.log(`[EncryptedDB] Key loaded from: ${altKeyPath}, length: ${key.length}`); return key; } - console.log(`[EncryptedDB] No key file found, using default key`); + // console.log(`[EncryptedDB] No key file found, using default key`); return 'default-key'; } catch (error) { - console.error('❌ Ошибка загрузки ключа шифрования:', error); + // console.error('❌ Ошибка загрузки ключа шифрования:', error); return 'default-key'; } } @@ -75,7 +75,7 @@ class EncryptedDataService { const selectFields = columns.map(col => { if (col.column_name.endsWith('_encrypted')) { const originalName = col.column_name.replace('_encrypted', ''); - console.log(`🔓 Расшифровываем поле ${col.column_name} -> ${originalName}`); + // console.log(`🔓 Расшифровываем поле ${col.column_name} -> ${originalName}`); if (col.data_type === 'jsonb') { return `decrypt_json(${col.column_name}, $1) as "${originalName}"`; } else { @@ -89,7 +89,7 @@ class EncryptedDataService { // Если есть зашифрованная версия, пропускаем незашифрованную if (hasEncryptedVersion) { - console.log(`⚠️ Пропускаем незашифрованное поле ${col.column_name} (есть зашифрованная версия)`); + // console.log(`⚠️ Пропускаем незашифрованное поле ${col.column_name} (есть зашифрованная версия)`); return null; } @@ -171,16 +171,16 @@ class EncryptedDataService { query += ` LIMIT ${limit}`; } - console.log(`🔍 [getData] Выполняем запрос:`, query); - console.log(`🔍 [getData] Параметры:`, params); + // console.log(`🔍 [getData] Выполняем запрос:`, query); + // console.log(`🔍 [getData] Параметры:`, params); const { rows } = await db.getQuery()(query, params); - console.log(`📊 Результат запроса из ${tableName}:`, rows); + // console.log(`📊 Результат запроса из ${tableName}:`, rows); return rows; } catch (error) { - console.error(`❌ Ошибка получения данных из ${tableName}:`, error); + // console.error(`❌ Ошибка получения данных из ${tableName}:`, error); throw error; } } @@ -223,19 +223,19 @@ class EncryptedDataService { const encryptedColumn = columns.find(col => col.column_name === `${key}_encrypted`); const unencryptedColumn = columns.find(col => col.column_name === key); - console.log(`🔍 Обрабатываем поле ${key} = "${value}" (тип: ${typeof value})`); + // console.log(`🔍 Обрабатываем поле ${key} = "${value}" (тип: ${typeof value})`); if (encryptedColumn) { // Если есть зашифрованная колонка, шифруем данные // Проверяем, что значение не пустое перед шифрованием if (value === null || value === undefined || (typeof value === 'string' && value.trim() === '')) { // Пропускаем пустые значения - console.log(`⚠️ Пропускаем пустое зашифрованное поле ${key}`); + // console.log(`⚠️ Пропускаем пустое зашифрованное поле ${key}`); continue; } const currentParamIndex = paramIndex++; filteredData[key] = value; // Добавляем в отфильтрованные данные - console.log(`✅ Добавили зашифрованное поле ${key} в filteredData`); + // console.log(`✅ Добавили зашифрованное поле ${key} в filteredData`); if (encryptedColumn.data_type === 'jsonb') { encryptedData[`${key}_encrypted`] = `encrypt_json($${currentParamIndex}, ${hasEncryptedFields ? '$1::text' : 'NULL'})`; } else { @@ -247,15 +247,15 @@ class EncryptedDataService { if ((value === null || value === undefined || (typeof value === 'string' && value.trim() === '')) && key !== 'role' && key !== 'sender_type') { // Пропускаем пустые значения, кроме role и sender_type - console.log(`⚠️ Пропускаем пустое незашифрованное поле ${key}`); + // console.log(`⚠️ Пропускаем пустое незашифрованное поле ${key}`); continue; } filteredData[key] = value; // Добавляем в отфильтрованные данные unencryptedData[key] = `$${paramIndex++}`; - console.log(`✅ Добавили незашифрованное поле ${key} в filteredData и unencryptedData`); + // console.log(`✅ Добавили незашифрованное поле ${key} в filteredData и unencryptedData`); } else { // Если колонка не найдена, пропускаем - console.warn(`⚠️ Колонка ${key} не найдена в таблице ${tableName}`); + // console.warn(`⚠️ Колонка ${key} не найдена в таблице ${tableName}`); } } @@ -263,9 +263,9 @@ class EncryptedDataService { // Проверяем, есть ли данные для сохранения if (Object.keys(allData).length === 0) { - console.warn(`⚠️ Нет данных для сохранения в таблице ${tableName} - все значения пустые`); - console.warn(`⚠️ Исходные данные:`, data); - console.warn(`⚠️ Отфильтрованные данные:`, filteredData); + // console.warn(`⚠️ Нет данных для сохранения в таблице ${tableName} - все значения пустые`); + // console.warn(`⚠️ Исходные данные:`, data); + // console.warn(`⚠️ Отфильтрованные данные:`, filteredData); return null; } @@ -301,7 +301,7 @@ class EncryptedDataService { return rows[0]; } } catch (error) { - console.error(`❌ Ошибка сохранения данных в ${tableName}:`, error); + // console.error(`❌ Ошибка сохранения данных в ${tableName}:`, error); throw error; } } @@ -352,7 +352,7 @@ class EncryptedDataService { const result = await db.getQuery()(query, params); return result.rows; } catch (error) { - console.error(`❌ Ошибка удаления данных из ${tableName}:`, error); + // console.error(`❌ Ошибка удаления данных из ${tableName}:`, error); throw error; } } diff --git a/backend/services/identity-service.js b/backend/services/identity-service.js index ab91b17..ec94c0e 100644 --- a/backend/services/identity-service.js +++ b/backend/services/identity-service.js @@ -10,7 +10,7 @@ * GitHub: https://github.com/HB3-ACCELERATOR */ -console.log('[identity-service] loaded'); +// console.log('[identity-service] loaded'); const encryptedDb = require('./encryptedDatabaseService'); const db = require('../db'); diff --git a/backend/services/ragService.js b/backend/services/ragService.js index 30c2837..1d8a8ab 100644 --- a/backend/services/ragService.js +++ b/backend/services/ragService.js @@ -14,23 +14,23 @@ const encryptedDb = require('./encryptedDatabaseService'); const vectorSearch = require('./vectorSearchClient'); const { getProviderSettings } = require('./aiProviderSettingsService'); -console.log('[RAG] ragService.js loaded'); +// console.log('[RAG] ragService.js loaded'); // Простой кэш для RAG результатов const ragCache = new Map(); const RAG_CACHE_TTL = 5 * 60 * 1000; // 5 минут async function getTableData(tableId) { - console.log(`[RAG] getTableData called for tableId: ${tableId}`); + // console.log(`[RAG] getTableData called for tableId: ${tableId}`); const columns = await encryptedDb.getData('user_columns', { table_id: tableId }); - console.log(`[RAG] Found ${columns.length} columns:`, columns.map(col => ({ id: col.id, name: col.name, purpose: col.options?.purpose }))); + // console.log(`[RAG] Found ${columns.length} columns:`, columns.map(col => ({ id: col.id, name: col.name, purpose: col.options?.purpose }))); const rows = await encryptedDb.getData('user_rows', { table_id: tableId }); - console.log(`[RAG] Found ${rows.length} rows:`, rows.map(row => ({ id: row.id, name: row.name }))); + // console.log(`[RAG] Found ${rows.length} rows:`, rows.map(row => ({ id: row.id, name: row.name }))); const cellValues = await encryptedDb.getData('user_cell_values', { row_id: { $in: rows.map(row => row.id) } }); - console.log(`[RAG] Found ${cellValues.length} cell values`); + // console.log(`[RAG] Found ${cellValues.length} cell values`); const getColId = purpose => columns.find(col => col.options?.purpose === purpose)?.id; const questionColId = getColId('question'); @@ -40,14 +40,14 @@ async function getTableData(tableId) { const priorityColId = getColId('priority'); const dateColId = getColId('date'); - console.log(`[RAG] Column IDs:`, { - question: questionColId, - answer: answerColId, - context: contextColId, - product: productColId, - priority: priorityColId, - date: dateColId - }); + // console.log(`[RAG] Column IDs:`, { + // question: questionColId, + // answer: answerColId, + // context: contextColId, + // product: productColId, + // priority: priorityColId, + // date: dateColId + // }); const data = rows.map(row => { const cells = cellValues.filter(cell => cell.row_id === row.id); @@ -61,34 +61,34 @@ async function getTableData(tableId) { priority: cells.find(c => c.column_id === priorityColId)?.value, date: cells.find(c => c.column_id === dateColId)?.value, }; - console.log(`[RAG] Processed row ${row.id}:`, result); + // console.log(`[RAG] Processed row ${row.id}:`, result); return result; }); return data; } async function ragAnswer({ tableId, userQuestion, product = null, threshold = 10 }) { - console.log(`[RAG] ragAnswer called: tableId=${tableId}, userQuestion="${userQuestion}"`); + // console.log(`[RAG] ragAnswer called: tableId=${tableId}, userQuestion="${userQuestion}"`); // Проверяем кэш const cacheKey = `${tableId}:${userQuestion}:${product}`; const cached = ragCache.get(cacheKey); if (cached && (Date.now() - cached.timestamp) < RAG_CACHE_TTL) { - console.log(`[RAG] Returning cached result for: ${cacheKey}`); + // console.log(`[RAG] Returning cached result for: ${cacheKey}`); return cached.result; } const data = await getTableData(tableId); - console.log(`[RAG] Got ${data.length} rows from database`); + // console.log(`[RAG] Got ${data.length} rows from database`); // Подробное логирование данных data.forEach((row, index) => { - console.log(`[RAG] Row ${index}:`, { - id: row.id, - question: row.question, - answer: row.answer, - product: row.product - }); + // console.log(`[RAG] Row ${index}:`, { + // id: row.id, + // question: row.question, + // answer: row.answer, + // product: row.product + // }); }); const questions = data.map(row => row.question && typeof row.question === 'string' ? row.question.trim() : row.question); @@ -108,61 +108,61 @@ async function ragAnswer({ tableId, userQuestion, product = null, threshold = 10 } })); - console.log(`[RAG] Prepared ${rowsForUpsert.length} rows for upsert`); - console.log(`[RAG] First row:`, rowsForUpsert[0]); + // console.log(`[RAG] Prepared ${rowsForUpsert.length} rows for upsert`); + // console.log(`[RAG] First row:`, rowsForUpsert[0]); // Upsert все вопросы в индекс (можно оптимизировать по изменению) if (rowsForUpsert.length > 0) { await vectorSearch.upsert(tableId, rowsForUpsert); - console.log(`[RAG] Upsert completed`); + // console.log(`[RAG] Upsert completed`); } else { - console.log(`[RAG] No rows to upsert, skipping`); + // console.log(`[RAG] No rows to upsert, skipping`); } // Поиск let results = []; if (rowsForUpsert.length > 0) { results = await vectorSearch.search(tableId, userQuestion, 2); // Уменьшаем до 2 результатов - console.log(`[RAG] Search completed, got ${results.length} results`); + // console.log(`[RAG] Search completed, got ${results.length} results`); // Подробное логирование результатов поиска results.forEach((result, index) => { - console.log(`[RAG] Search result ${index}:`, { - row_id: result.row_id, - score: result.score, - metadata: result.metadata - }); + // console.log(`[RAG] Search result ${index}:`, { + // row_id: result.row_id, + // score: result.score, + // metadata: result.metadata + // }); }); } else { - console.log(`[RAG] No data in table, skipping search`); + // console.log(`[RAG] No data in table, skipping search`); } // Фильтрация по тегам/продукту let filtered = results; - console.log(`[RAG] Before filtering: ${filtered.length} results`); + // console.log(`[RAG] Before filtering: ${filtered.length} results`); if (product) { - console.log(`[RAG] Filtering by product:`, product); + // console.log(`[RAG] Filtering by product:`, product); filtered = filtered.filter(row => Array.isArray(row.metadata.product) ? row.metadata.product.includes(product) : row.metadata.product === product); - console.log(`[RAG] After product filtering: ${filtered.length} results`); + // console.log(`[RAG] After product filtering: ${filtered.length} results`); } // Берём ближайший результат с учётом порога (по модулю) - console.log(`[RAG] Looking for best result with abs(threshold): ${threshold}`); + // console.log(`[RAG] Looking for best result with abs(threshold): ${threshold}`); const best = filtered.reduce((acc, row) => { if (Math.abs(row.score) <= threshold && (acc === null || Math.abs(row.score) < Math.abs(acc.score))) { return row; } return acc; }, null); - console.log(`[RAG] Best result:`, best); + // console.log(`[RAG] Best result:`, best); // Логируем все результаты с их score для диагностики if (filtered.length > 0) { - console.log(`[RAG] All filtered results with scores:`); - filtered.forEach((result, index) => { - console.log(`[RAG] ${index}: score=${result.score}, meets_threshold=${Math.abs(result.score) <= threshold}`); - }); + // console.log(`[RAG] All filtered results with scores:`); + // filtered.forEach((result, index) => { + // console.log(`[RAG] ${index}: score=${result.score}, meets_threshold=${Math.abs(result.score) <= threshold}`); + // }); } const result = { @@ -238,18 +238,18 @@ async function generateLLMResponse({ model, language }) { - console.log(`[RAG] generateLLMResponse called with:`, { - userQuestion, - context, - answer, - systemPrompt, - userTags, - product, - priority, - date, - model, - language - }); + // console.log(`[RAG] generateLLMResponse called with:`, { + // userQuestion, + // context, + // answer, + // systemPrompt, + // userTags, + // product, + // priority, + // date, + // model, + // language + // }); try { const aiAssistant = require('./ai-assistant'); @@ -286,10 +286,10 @@ async function generateLLMResponse({ rules ); - console.log(`[RAG] LLM response generated:`, llmResponse); + // console.log(`[RAG] LLM response generated:`, llmResponse); return llmResponse; } catch (error) { - console.error(`[RAG] Error generating LLM response:`, error); + // console.error(`[RAG] Error generating LLM response:`, error); return 'Извините, произошла ошибка при генерации ответа.'; } } diff --git a/backend/services/telegramBot.js b/backend/services/telegramBot.js index b8dfd79..f234ec7 100644 --- a/backend/services/telegramBot.js +++ b/backend/services/telegramBot.js @@ -40,13 +40,13 @@ async function getTelegramSettings() { // Создание и настройка бота async function getBot() { - console.log('[TelegramBot] getBot() called'); + // console.log('[TelegramBot] getBot() called'); if (!botInstance) { - console.log('[TelegramBot] Creating new bot instance...'); + // console.log('[TelegramBot] Creating new bot instance...'); const settings = await getTelegramSettings(); - console.log('[TelegramBot] Got settings, creating Telegraf instance...'); + // console.log('[TelegramBot] Got settings, creating Telegraf instance...'); botInstance = new Telegraf(settings.bot_token); - console.log('[TelegramBot] Telegraf instance created'); + // console.log('[TelegramBot] Telegraf instance created'); // Обработка команды /start botInstance.command('start', (ctx) => { @@ -489,7 +489,7 @@ async function getBot() { }); // Запуск бота с таймаутом - console.log('[TelegramBot] Before botInstance.launch()'); + // console.log('[TelegramBot] Before botInstance.launch()'); try { // Запускаем бота с таймаутом const launchPromise = botInstance.launch(); @@ -498,12 +498,12 @@ async function getBot() { }); await Promise.race([launchPromise, timeoutPromise]); - console.log('[TelegramBot] After botInstance.launch()'); + // console.log('[TelegramBot] After botInstance.launch()'); logger.info('[TelegramBot] Бот запущен'); } catch (error) { - console.error('[TelegramBot] Error launching bot:', error); + // console.error('[TelegramBot] Error launching bot:', error); // Не выбрасываем ошибку, чтобы не блокировать запуск сервера - console.log('[TelegramBot] Bot launch failed, but continuing...'); + // console.log('[TelegramBot] Bot launch failed, but continuing...'); } } diff --git a/backend/services/userDeleteService.js b/backend/services/userDeleteService.js index 01fac05..9c1bd64 100644 --- a/backend/services/userDeleteService.js +++ b/backend/services/userDeleteService.js @@ -13,23 +13,23 @@ const encryptedDb = require('./encryptedDatabaseService'); async function deleteUserById(userId) { - console.log('[DELETE] Вызван deleteUserById для userId:', userId); + // console.log('[DELETE] Вызван deleteUserById для userId:', userId); try { - console.log('[DELETE] Начинаем удаление user_identities для userId:', userId); + // console.log('[DELETE] Начинаем удаление user_identities для userId:', userId); const resIdentities = await encryptedDb.deleteData('user_identities', { user_id: userId }); - console.log('[DELETE] Удалено user_identities:', resIdentities.length); + // console.log('[DELETE] Удалено user_identities:', resIdentities.length); - console.log('[DELETE] Начинаем удаление messages для userId:', userId); + // console.log('[DELETE] Начинаем удаление messages для userId:', userId); const resMessages = await encryptedDb.deleteData('messages', { user_id: userId }); - console.log('[DELETE] Удалено messages:', resMessages.length); + // console.log('[DELETE] Удалено messages:', resMessages.length); - console.log('[DELETE] Начинаем удаление пользователя из users:', userId); + // console.log('[DELETE] Начинаем удаление пользователя из users:', userId); const result = await encryptedDb.deleteData('users', { id: userId }); - console.log('[DELETE] Результат удаления пользователя:', result.length, result); + // console.log('[DELETE] Результат удаления пользователя:', result.length, result); return result.length; } catch (e) { - console.error('[DELETE] Ошибка при удалении пользователя:', e); + // console.error('[DELETE] Ошибка при удалении пользователя:', e); throw e; } } diff --git a/backend/wsHub.js b/backend/wsHub.js index 6c8ff65..46e3725 100644 --- a/backend/wsHub.js +++ b/backend/wsHub.js @@ -28,10 +28,10 @@ function initWSS(server) { wss = new WebSocket.Server({ server, path: '/ws' }); wss.on('connection', (ws, req) => { - console.log('🔌 [WebSocket] Новое подключение'); - console.log('🔌 [WebSocket] IP клиента:', req.socket.remoteAddress); - console.log('🔌 [WebSocket] User-Agent:', req.headers['user-agent']); - console.log('🔌 [WebSocket] Origin:', req.headers.origin); + // console.log('🔌 [WebSocket] Новое подключение'); + // console.log('🔌 [WebSocket] IP клиента:', req.socket.remoteAddress); + // console.log('🔌 [WebSocket] User-Agent:', req.headers['user-agent']); + // console.log('🔌 [WebSocket] Origin:', req.headers.origin); // Добавляем клиента в общий список if (!wsClients.has('anonymous')) { @@ -43,7 +43,7 @@ function initWSS(server) { ws.on('message', (message) => { try { const data = JSON.parse(message); - console.log('📨 [WebSocket] Получено сообщение:', data); + // console.log('📨 [WebSocket] Получено сообщение:', data); if (data.type === 'auth' && data.userId) { // Аутентификация пользователя @@ -58,12 +58,12 @@ function initWSS(server) { })); } } catch (error) { - console.error('❌ [WebSocket] Ошибка парсинга сообщения:', error); + // console.error('❌ [WebSocket] Ошибка парсинга сообщения:', error); } }); ws.on('close', (code, reason) => { - console.log('🔌 [WebSocket] Соединение закрыто', { code, reason: reason.toString() }); + // console.log('🔌 [WebSocket] Соединение закрыто', { code, reason: reason.toString() }); // Удаляем клиента из всех списков for (const [userId, clients] of wsClients.entries()) { clients.delete(ws); @@ -74,15 +74,15 @@ function initWSS(server) { }); ws.on('error', (error) => { - console.error('❌ [WebSocket] Ошибка соединения:', error.message); + // console.error('❌ [WebSocket] Ошибка соединения:', error.message); }); }); - console.log('🚀 [WebSocket] Сервер запущен на /ws'); + // console.log('🚀 [WebSocket] Сервер запущен на /ws'); } function authenticateUser(ws, userId) { - console.log(`🔐 [WebSocket] Аутентификация пользователя ${userId}`); + // console.log(`🔐 [WebSocket] Аутентификация пользователя ${userId}`); // Удаляем из анонимных if (wsClients.has('anonymous')) { @@ -103,7 +103,7 @@ function authenticateUser(ws, userId) { } function broadcastContactsUpdate() { - console.log('📢 [WebSocket] Отправка обновления контактов всем клиентам'); + // console.log('📢 [WebSocket] Отправка обновления контактов всем клиентам'); for (const [userId, clients] of wsClients.entries()) { for (const ws of clients) { if (ws.readyState === WebSocket.OPEN) { @@ -114,7 +114,7 @@ function broadcastContactsUpdate() { } function broadcastMessagesUpdate() { - console.log('📢 [WebSocket] Отправка обновления сообщений всем клиентам'); + // console.log('📢 [WebSocket] Отправка обновления сообщений всем клиентам'); for (const [userId, clients] of wsClients.entries()) { for (const ws of clients) { if (ws.readyState === WebSocket.OPEN) { @@ -125,10 +125,10 @@ function broadcastMessagesUpdate() { } function broadcastChatMessage(message, targetUserId = null) { - console.log(`📢 [WebSocket] Отправка сообщения чата`, { - messageId: message.id, - targetUserId - }); + // console.log(`📢 [WebSocket] Отправка сообщения чата`, { + // messageId: message.id, + // targetUserId + // }); if (targetUserId) { // Отправляем конкретному пользователю @@ -159,10 +159,10 @@ function broadcastChatMessage(message, targetUserId = null) { } function broadcastConversationUpdate(conversationId, targetUserId = null) { - console.log(`📢 [WebSocket] Отправка обновления диалога`, { - conversationId, - targetUserId - }); + // console.log(`📢 [WebSocket] Отправка обновления диалога`, { + // conversationId, + // targetUserId + // }); const payload = { type: 'conversation-updated', @@ -192,7 +192,7 @@ function broadcastConversationUpdate(conversationId, targetUserId = null) { } function broadcastTableUpdate(tableId) { - console.log('📢 [WebSocket] Отправка обновления таблицы', tableId); + // console.log('📢 [WebSocket] Отправка обновления таблицы', tableId); const payload = { type: 'table-updated', tableId }; for (const [userId, clients] of wsClients.entries()) { for (const ws of clients) { @@ -204,11 +204,11 @@ function broadcastTableUpdate(tableId) { } function broadcastTableRelationsUpdate(tableId, rowId, targetUserId = null) { - console.log(`📢 [WebSocket] Отправка обновления связей таблицы`, { - tableId, - rowId, - targetUserId - }); + // console.log(`📢 [WebSocket] Отправка обновления связей таблицы`, { + // tableId, + // rowId, + // targetUserId + // }); const payload = { type: 'table-relations-updated', @@ -246,7 +246,7 @@ function broadcastTagsUpdate(targetUserId = null, rowId = null) { // Устанавливаем новый таймаут tagsUpdateTimeout = setTimeout(() => { - console.log('🔔 [WebSocket] Отправляем уведомление об обновлении тегов', rowId ? `для строки ${rowId}` : ''); + // console.log('🔔 [WebSocket] Отправляем уведомление об обновлении тегов', rowId ? `для строки ${rowId}` : ''); const message = JSON.stringify({ type: 'tags-updated', timestamp: Date.now(), @@ -262,7 +262,7 @@ function broadcastTagsUpdate(targetUserId = null, rowId = null) { } }); - console.log(`🔔 [WebSocket] Отправлено tags-updated ${sentCount} клиентам`); + // console.log(`🔔 [WebSocket] Отправлено tags-updated ${sentCount} клиентам`); }, TAGS_UPDATE_DEBOUNCE); } @@ -300,7 +300,7 @@ function getStats() { // Функция для отправки уведомлений о статусе AI function broadcastAIStatus(status) { - console.log('📢 [WebSocket] Отправка статуса AI всем клиентам'); + // console.log('📢 [WebSocket] Отправка статуса AI всем клиентам'); for (const [userId, clients] of wsClients.entries()) { for (const ws of clients) { if (ws.readyState === WebSocket.OPEN) { diff --git a/frontend/src/App.vue b/frontend/src/App.vue index d1d149f..6343262 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -74,14 +74,14 @@ isLoadingTokens.value = true; try { const walletAddress = getIdentityValue('wallet'); - console.log('[App] Обновление балансов для адреса:', walletAddress); + // console.log('[App] Обновление балансов для адреса:', walletAddress); const balances = await fetchTokenBalances(walletAddress); - console.log('[App] Полученные балансы:', balances); + // console.log('[App] Полученные балансы:', balances); tokenBalances.value = balances || {}; } catch (error) { - console.error('[App] Ошибка при получении балансов:', error); + // console.error('[App] Ошибка при получении балансов:', error); tokenBalances.value = {}; } finally { isLoadingTokens.value = false; @@ -96,11 +96,11 @@ const oldWalletId = oldWalletIdentity ? oldWalletIdentity.provider_id : null; if (newWalletId !== oldWalletId) { - console.log('[App] Обнаружено изменение идентификатора кошелька, обновляем балансы'); + // console.log('[App] Обнаружено изменение идентификатора кошелька, обновляем балансы'); refreshTokenBalances(); } else if (hasIdentityType('wallet') && Object.keys(tokenBalances.value).length === 0 && !isLoadingTokens.value) { // Если кошелек есть, но баланс пустой и не грузится - пробуем загрузить - console.log('[App] Кошелек есть, но баланс пуст, пытаемся загрузить.'); + // console.log('[App] Кошелек есть, но баланс пуст, пытаемся загрузить.'); refreshTokenBalances(); } } @@ -108,7 +108,7 @@ // Мониторинг изменений состояния аутентификации watch(auth.isAuthenticated, (isAuth) => { - console.log('[App] Состояние аутентификации изменилось:', isAuth); + // console.log('[App] Состояние аутентификации изменилось:', isAuth); if (isAuth) { // Убираем задержку, полагаемся на watch(identities) или прямо вызываем // setTimeout(refreshTokenBalances, 500); @@ -121,16 +121,16 @@ // --- Возвращаем и улучшаем функцию-обработчик --- const handleAuthActionCompleted = async () => { - console.log('[App] Auth action completed, triggering updates...'); + // console.log('[App] Auth action completed, triggering updates...'); isLoading.value = true; // Показываем индикатор загрузки try { // 1. Проверяем аутентификацию (обновит identities и isAuthenticated) await auth.checkAuth(); - console.log('[App] auth.checkAuth() completed. isAuthenticated:', auth.isAuthenticated.value); + // console.log('[App] auth.checkAuth() completed. isAuthenticated:', auth.isAuthenticated.value); // 2. Обновляем баланс (использует обновленные identities) await refreshTokenBalances(); - console.log('[App] refreshTokenBalances() completed.'); + // console.log('[App] refreshTokenBalances() completed.'); // 3. Явно оповещаем компоненты об изменении состояния авторизации // Передаем актуальное состояние из useAuth @@ -140,10 +140,10 @@ userId: auth.userId.value, // Предполагаем, что userId есть в useAuth fromApp: true // Флаг, что событие от App.vue }); - console.log('[App] auth-state-changed event emitted.'); + // console.log('[App] auth-state-changed event emitted.'); } catch (error) { - console.error("[App] Error during auth action handling:", error); + // console.error("[App] Error during auth action handling:", error); } finally { isLoading.value = false; // Скрываем индикатор загрузки } @@ -157,7 +157,7 @@ // Подписываемся на событие изменения настроек аутентификации const unsubscribe = eventBus.on('auth-settings-saved', () => { - console.log('[App] Получено событие сохранения настроек аутентификации, обновляем балансы'); + // console.log('[App] Получено событие сохранения настроек аутентификации, обновляем балансы'); if (auth.isAuthenticated.value) { refreshTokenBalances(); } diff --git a/frontend/src/api/axios.js b/frontend/src/api/axios.js index 652e9cb..54848f3 100644 --- a/frontend/src/api/axios.js +++ b/frontend/src/api/axios.js @@ -37,7 +37,7 @@ api.interceptors.response.use( // Проверяем, что ответ действительно JSON if (response.headers['content-type'] && !response.headers['content-type'].includes('application/json')) { - console.warn('Server returned non-JSON response:', response.headers['content-type']); + // console.warn('Server returned non-JSON response:', response.headers['content-type']); // Если это HTML, значит, запрос ушёл не туда if (response.headers['content-type'].includes('text/html')) { throw new Error('Server returned HTML instead of JSON. Check API endpoint.'); @@ -50,7 +50,7 @@ api.interceptors.response.use( if (error.response && error.response.data && typeof error.response.data === 'string' && error.response.data.includes(' { // language: userLanguage.value, // TODO: Реализовать получение языка пользователя }, { withCredentials: true }); } catch (error) { - console.error('Ошибка при отправке гостевого сообщения на сервер:', error); + // console.error('Ошибка при отправке гостевого сообщения на сервер:', error); } }; diff --git a/frontend/src/components/AIQueueMonitor.vue b/frontend/src/components/AIQueueMonitor.vue index 31f7cfc..350d706 100644 --- a/frontend/src/components/AIQueueMonitor.vue +++ b/frontend/src/components/AIQueueMonitor.vue @@ -193,7 +193,7 @@ export default { stats.value = response.data.data } } catch (error) { - console.error('Error fetching queue stats:', error) + // console.error('Error fetching queue stats:', error) } finally { loading.value = false } @@ -210,7 +210,7 @@ export default { await fetchStats() } } catch (error) { - console.error(`Error controlling queue (${action}):`, error) + // console.error(`Error controlling queue (${action}):`, error) } } diff --git a/frontend/src/components/BaseLayout.vue b/frontend/src/components/BaseLayout.vue index f0c5bb8..019c78e 100644 --- a/frontend/src/components/BaseLayout.vue +++ b/frontend/src/components/BaseLayout.vue @@ -81,7 +81,7 @@ const emit = defineEmits(['auth-action-completed']); // Callback после успешной аутентификации/привязки через Email/Telegram const handleAuthFlowSuccess = (authType) => { - console.log(`[BaseLayout] Auth flow success: ${authType}`); + // console.log(`[BaseLayout] Auth flow success: ${authType}`); // Отправляем событие для обновления данных на страницах eventBus.emit('auth-success', { authType }); }; @@ -116,7 +116,7 @@ const handleWalletAuth = async () => { isConnectingWallet.value = true; try { const result = await connectWithWallet(); - console.log('[BaseLayout] Результат подключения кошелька:', result); + // console.log('[BaseLayout] Результат подключения кошелька:', result); if (result.success) { if (auth.isAuthenticated.value) { @@ -132,7 +132,7 @@ const handleWalletAuth = async () => { // Новая аутентификация через кошелек const authResponse = await auth.checkAuth(); if (authResponse.authenticated && authResponse.authType === 'wallet') { - console.log('[BaseLayout] Кошелёк успешно подключен и аутентифицирован'); + // console.log('[BaseLayout] Кошелёк успешно подключен и аутентифицирован'); showSuccessMessage('Кошелёк успешно подключен!'); emit('auth-action-completed'); } else { @@ -140,11 +140,11 @@ const handleWalletAuth = async () => { } } } else { - console.error('[BaseLayout] Не удалось подключить кошелёк:', result.error); + // console.error('[BaseLayout] Не удалось подключить кошелёк:', result.error); showErrorMessage(result.error || 'Не удалось подключить кошелёк'); } } catch (error) { - console.error('[BaseLayout] Ошибка при подключении кошелька:', error); + // console.error('[BaseLayout] Ошибка при подключении кошелька:', error); showErrorMessage('Произошла ошибка при подключении кошелька'); } finally { isConnectingWallet.value = false; @@ -155,7 +155,7 @@ const handleWalletAuth = async () => { * Выполняет выход из аккаунта */ const disconnectWallet = async () => { - console.log('[BaseLayout] Выполняется выход из системы...'); + // console.log('[BaseLayout] Выполняется выход из системы...'); try { await api.post('/auth/logout'); showSuccessMessage('Вы успешно вышли из системы'); @@ -163,7 +163,7 @@ const disconnectWallet = async () => { removeFromStorage('hasUserSentMessage'); emit('auth-action-completed'); } catch (error) { - console.error('[BaseLayout] Ошибка при выходе из системы:', error); + // console.error('[BaseLayout] Ошибка при выходе из системы:', error); showErrorMessage('Произошла ошибка при выходе из системы'); } }; @@ -181,7 +181,7 @@ const toggleWalletSidebar = () => { // ===================================================================== onMounted(() => { - console.log('[BaseLayout] Компонент загружен'); + // console.log('[BaseLayout] Компонент загружен'); // Загружаем сохраненное состояние боковой панели const savedSidebarState = getFromStorage('showWalletSidebar'); diff --git a/frontend/src/components/ChatInterface.vue b/frontend/src/components/ChatInterface.vue index f1b5161..0141664 100644 --- a/frontend/src/components/ChatInterface.vue +++ b/frontend/src/components/ChatInterface.vue @@ -166,26 +166,26 @@ const videoStream = ref(null); const recordedAudioChunks = ref([]); const recordedVideoChunks = ref([]); -const startAudioRecording = async () => { - console.log('[ChatInterface] startAudioRecording called'); + const startAudioRecording = async () => { + // console.log('[ChatInterface] startAudioRecording called'); try { if (isAudioRecording.value) return; audioStream.value = await navigator.mediaDevices.getUserMedia({ audio: true }); - console.log('[ChatInterface] Got audio stream:', audioStream.value); + // console.log('[ChatInterface] Got audio stream:', audioStream.value); recordedAudioChunks.value = []; audioRecorder.value = new MediaRecorder(audioStream.value); audioRecorder.value.ondataavailable = (event) => { - console.log('[ChatInterface] audioRecorder.ondataavailable fired'); + // console.log('[ChatInterface] audioRecorder.ondataavailable fired'); if (event.data.size > 0) recordedAudioChunks.value.push(event.data); }; audioRecorder.value.onstop = () => { - console.log('[ChatInterface] audioRecorder.onstop fired'); + // console.log('[ChatInterface] audioRecorder.onstop fired'); setTimeout(() => { if (recordedAudioChunks.value.length === 0) { - console.warn('[ChatInterface] No audio chunks recorded.'); + // console.warn('[ChatInterface] No audio chunks recorded.'); return; } - console.log(`[ChatInterface] Creating audio Blob from ${recordedAudioChunks.value.length} chunks.`); + // console.log(`[ChatInterface] Creating audio Blob from ${recordedAudioChunks.value.length} chunks.`); const audioBlob = new Blob(recordedAudioChunks.value, { type: 'audio/webm' }); const audioFile = new File([audioBlob], `audio-${Date.now()}.webm`, { type: 'audio/webm' }); addAttachment(audioFile); @@ -194,64 +194,64 @@ const startAudioRecording = async () => { }; audioRecorder.value.start(); isAudioRecording.value = true; - console.log('[ChatInterface] Audio recording started, recorder state:', audioRecorder.value.state); + // console.log('[ChatInterface] Audio recording started, recorder state:', audioRecorder.value.state); } catch (error) { - console.error('[ChatInterface] Error starting audio recording:', error); + // console.error('[ChatInterface] Error starting audio recording:', error); } }; const stopAudioRecording = async () => { - console.log('[ChatInterface] stopAudioRecording called'); + // console.log('[ChatInterface] stopAudioRecording called'); if (!isAudioRecording.value || !audioRecorder.value || audioRecorder.value.state === 'inactive') { - console.log('[ChatInterface] stopAudioRecording: Not recording or recorder inactive, state:', audioRecorder.value?.state); + // console.log('[ChatInterface] stopAudioRecording: Not recording or recorder inactive, state:', audioRecorder.value?.state); return; } try { audioRecorder.value.stop(); - console.log('[ChatInterface] audioRecorder.stop() called'); + // console.log('[ChatInterface] audioRecorder.stop() called'); isAudioRecording.value = false; if (audioStream.value) { audioStream.value.getTracks().forEach(track => track.stop()); - console.log('[ChatInterface] Audio stream tracks stopped.'); + // console.log('[ChatInterface] Audio stream tracks stopped.'); } } catch (error) { - console.error('[ChatInterface] Error stopping audio recording:', error); + // console.error('[ChatInterface] Error stopping audio recording:', error); isAudioRecording.value = false; if (audioStream.value) audioStream.value.getTracks().forEach(track => track.stop()); } }; const startVideoRecording = async () => { - console.log('[ChatInterface] startVideoRecording called'); + // console.log('[ChatInterface] startVideoRecording called'); try { if (isVideoRecording.value) return; videoStream.value = await navigator.mediaDevices.getUserMedia({ video: true, audio: true }); - console.log('[ChatInterface] Got video stream:', videoStream.value); + // console.log('[ChatInterface] Got video stream:', videoStream.value); recordedVideoChunks.value = []; let options = { mimeType: 'video/webm;codecs=vp9,opus' }; if (!MediaRecorder.isTypeSupported(options.mimeType)) { - console.warn(`MIME type ${options.mimeType} not supported, trying video/webm...`); + // console.warn(`MIME type ${options.mimeType} not supported, trying video/webm...`); options = { mimeType: 'video/webm' }; if (!MediaRecorder.isTypeSupported(options.mimeType)) { - console.warn(`MIME type ${options.mimeType} not supported, using default.`); + // console.warn(`MIME type ${options.mimeType} not supported, using default.`); options = {}; } } - console.log('[ChatInterface] Using MediaRecorder options:', options); + // console.log('[ChatInterface] Using MediaRecorder options:', options); videoRecorder.value = new MediaRecorder(videoStream.value, options); videoRecorder.value.ondataavailable = (event) => { - console.log('[ChatInterface] videoRecorder.ondataavailable fired'); + // console.log('[ChatInterface] videoRecorder.ondataavailable fired'); if (event.data.size > 0) recordedVideoChunks.value.push(event.data); }; videoRecorder.value.onstop = () => { - console.log('[ChatInterface] videoRecorder.onstop fired'); + // console.log('[ChatInterface] videoRecorder.onstop fired'); setTimeout(() => { if (recordedVideoChunks.value.length === 0) { - console.warn('[ChatInterface] No video chunks recorded.'); + // console.warn('[ChatInterface] No video chunks recorded.'); return; } - console.log(`[ChatInterface] Creating video Blob from ${recordedVideoChunks.value.length} chunks.`); + // console.log(`[ChatInterface] Creating video Blob from ${recordedVideoChunks.value.length} chunks.`); const videoBlob = new Blob(recordedVideoChunks.value, { type: videoRecorder.value.mimeType || 'video/webm' }); const videoFile = new File([videoBlob], `video-${Date.now()}.webm`, { type: videoRecorder.value.mimeType || 'video/webm' }); addAttachment(videoFile); @@ -260,28 +260,28 @@ const startVideoRecording = async () => { }; videoRecorder.value.start(); isVideoRecording.value = true; - console.log('[ChatInterface] Video recording started, recorder state:', videoRecorder.value.state); + // console.log('[ChatInterface] Video recording started, recorder state:', videoRecorder.value.state); } catch (error) { - console.error('[ChatInterface] Error starting video recording:', error); + // console.error('[ChatInterface] Error starting video recording:', error); } }; const stopVideoRecording = async () => { - console.log('[ChatInterface] stopVideoRecording called'); + // console.log('[ChatInterface] stopVideoRecording called'); if (!isVideoRecording.value || !videoRecorder.value || videoRecorder.value.state === 'inactive') { - console.log('[ChatInterface] stopVideoRecording: Not recording or recorder inactive, state:', videoRecorder.value?.state); + // console.log('[ChatInterface] stopVideoRecording: Not recording or recorder inactive, state:', videoRecorder.value?.state); return; } try { videoRecorder.value.stop(); - console.log('[ChatInterface] videoRecorder.stop() called'); + // console.log('[ChatInterface] videoRecorder.stop() called'); isVideoRecording.value = false; if (videoStream.value) { videoStream.value.getTracks().forEach(track => track.stop()); - console.log('[ChatInterface] Video stream tracks stopped.'); + // console.log('[ChatInterface] Video stream tracks stopped.'); } } catch (error) { - console.error('[ChatInterface] Error stopping video recording:', error); + // console.error('[ChatInterface] Error stopping video recording:', error); isVideoRecording.value = false; if (videoStream.value) videoStream.value.getTracks().forEach(track => track.stop()); } diff --git a/frontend/src/components/ContactTable.vue b/frontend/src/components/ContactTable.vue index 56d2481..83b6232 100644 --- a/frontend/src/components/ContactTable.vue +++ b/frontend/src/components/ContactTable.vue @@ -336,7 +336,7 @@ async function deleteMessagesSelected() { deletedConversations += result.deletedConversations || 0; } } catch (error) { - console.error(`Ошибка при удалении сообщений для контакта ${id}:`, error); + // console.error(`Ошибка при удалении сообщений для контакта ${id}:`, error); } } diff --git a/frontend/src/components/EmbeddedDLEInterface.vue b/frontend/src/components/EmbeddedDLEInterface.vue index d823ad3..763910f 100644 --- a/frontend/src/components/EmbeddedDLEInterface.vue +++ b/frontend/src/components/EmbeddedDLEInterface.vue @@ -242,7 +242,7 @@ const connectToDLE = async () => { connectionStatus.value = 'connecting'; // Здесь будет подключение к DLE через Web3 - console.log('Подключение к DLE:', props.dleAddress); + // console.log('Подключение к DLE:', props.dleAddress); // Имитация подключения await new Promise(resolve => setTimeout(resolve, 1000)); @@ -252,7 +252,7 @@ const connectToDLE = async () => { connectionStatus.value = 'connected'; } catch (error) { - console.error('Ошибка подключения к DLE:', error); + // console.error('Ошибка подключения к DLE:', error); connectionStatus.value = 'error'; } }; @@ -312,7 +312,7 @@ const loadDLEData = async () => { ]; } catch (error) { - console.error('Ошибка загрузки данных DLE:', error); + // console.error('Ошибка загрузки данных DLE:', error); } }; @@ -351,7 +351,7 @@ const signProposal = async (proposalId) => { isSigning.value = true; // Здесь будет подписание предложения - console.log('Подписание предложения:', proposalId); + // console.log('Подписание предложения:', proposalId); const proposal = proposals.value.find(p => p.id === proposalId); if (proposal) { @@ -362,7 +362,7 @@ const signProposal = async (proposalId) => { emit('proposal-signed', { proposalId, dleAddress: props.dleAddress }); } catch (error) { - console.error('Ошибка подписания предложения:', error); + // console.error('Ошибка подписания предложения:', error); } finally { isSigning.value = false; } @@ -375,7 +375,7 @@ const executeProposal = async (proposalId) => { isExecuting.value = true; // Здесь будет выполнение предложения - console.log('Выполнение предложения:', proposalId); + // console.log('Выполнение предложения:', proposalId); const proposal = proposals.value.find(p => p.id === proposalId); if (proposal) { @@ -385,7 +385,7 @@ const executeProposal = async (proposalId) => { emit('proposal-executed', { proposalId, dleAddress: props.dleAddress }); } catch (error) { - console.error('Ошибка выполнения предложения:', error); + // console.error('Ошибка выполнения предложения:', error); } finally { isExecuting.value = false; } diff --git a/frontend/src/components/Header.vue b/frontend/src/components/Header.vue index 103dd5b..7e6393c 100644 --- a/frontend/src/components/Header.vue +++ b/frontend/src/components/Header.vue @@ -56,7 +56,7 @@ onMounted(() => { // Следим за изменениями авторизации и сообщаем о них через eventBus unwatch = watch(isAuthenticated, (newValue, oldValue) => { if (newValue !== oldValue) { - console.log('[Header] Состояние аутентификации изменилось:', newValue); + // console.log('[Header] Состояние аутентификации изменилось:', newValue); // Оповещаем остальные компоненты через шину событий eventBus.emit('auth-state-changed', { isAuthenticated: newValue, diff --git a/frontend/src/components/Message.vue b/frontend/src/components/Message.vue index 606eadf..5ae8176 100644 --- a/frontend/src/components/Message.vue +++ b/frontend/src/components/Message.vue @@ -106,7 +106,7 @@ const base64ToBlob = (base64, mimetype) => { const byteArray = new Uint8Array(byteNumbers); return new Blob([byteArray], { type: mimetype }); } catch (e) { - console.error("Error decoding base64 string:", e); + // console.error("Error decoding base64 string:", e); return null; } }; @@ -161,7 +161,7 @@ const formattedTime = computed(() => { try { const date = new Date(timestamp); if (isNaN(date.getTime())) { - console.warn('Invalid timestamp in Message.vue:', timestamp); + // console.warn('Invalid timestamp in Message.vue:', timestamp); return ''; } return date.toLocaleString([], { @@ -172,7 +172,7 @@ const formattedTime = computed(() => { minute: '2-digit', }); } catch (error) { - console.error('Error formatting time in Message.vue:', error, timestamp); + // console.error('Error formatting time in Message.vue:', error, timestamp); return ''; } }); diff --git a/frontend/src/components/OllamaModelManager.vue b/frontend/src/components/OllamaModelManager.vue index 3e5381c..36a5ffa 100644 --- a/frontend/src/components/OllamaModelManager.vue +++ b/frontend/src/components/OllamaModelManager.vue @@ -135,7 +135,7 @@ async function checkConnection() { await loadInstalledModels(); } } catch (error) { - console.error('Ошибка проверки подключения:', error); + // console.error('Ошибка проверки подключения:', error); isConnected.value = false; } finally { checking.value = false; @@ -148,7 +148,7 @@ async function loadInstalledModels() { const response = await axios.get('/ollama/models'); installedModels.value = response.data.models || []; } catch (error) { - console.error('Ошибка загрузки моделей:', error); + // console.error('Ошибка загрузки моделей:', error); } } @@ -162,7 +162,7 @@ async function searchModels() { // Пока просто устанавливаем модель напрямую await installModel(searchQuery.value.trim()); } catch (error) { - console.error('Ошибка поиска моделей:', error); + // console.error('Ошибка поиска моделей:', error); } finally { searching.value = false; } @@ -176,7 +176,7 @@ async function installModel(modelName) { await loadInstalledModels(); searchQuery.value = ''; } catch (error) { - console.error('Ошибка установки модели:', error); + // console.error('Ошибка установки модели:', error); } finally { installing.value = ''; } @@ -189,7 +189,7 @@ async function removeModel(modelName) { await axios.delete(`/ollama/models/${encodeURIComponent(modelName)}`); await loadInstalledModels(); } catch (error) { - console.error('Ошибка удаления модели:', error); + // console.error('Ошибка удаления модели:', error); } finally { removing.value = ''; } diff --git a/frontend/src/components/Sidebar.vue b/frontend/src/components/Sidebar.vue index 018142e..9261a11 100644 --- a/frontend/src/components/Sidebar.vue +++ b/frontend/src/components/Sidebar.vue @@ -197,7 +197,7 @@ const closeSidebar = () => { // Обработка события изменения авторизации const handleAuthEvent = (event) => { - console.log('[Sidebar] Получено событие изменения авторизации:', event); + // console.log('[Sidebar] Получено событие изменения авторизации:', event); // Здесь можно обновить данные, если нужно дополнительное обновление }; @@ -239,11 +239,11 @@ const handleDeleteIdentity = async (provider, providerId) => { // Добавляем watch для отслеживания props watch(() => props.tokenBalances, (newVal, oldVal) => { - console.log('[Sidebar] tokenBalances prop changed:', JSON.stringify(newVal)); + // console.log('[Sidebar] tokenBalances prop changed:', JSON.stringify(newVal)); }, { deep: true }); watch(() => props.isLoadingTokens, (newVal, oldVal) => { - console.log(`[Sidebar] isLoadingTokens prop changed: ${newVal}`); + // console.log(`[Sidebar] isLoadingTokens prop changed: ${newVal}`); }); diff --git a/frontend/src/components/identity/WalletConnection.vue b/frontend/src/components/identity/WalletConnection.vue index 760b7cc..1640958 100644 --- a/frontend/src/components/identity/WalletConnection.vue +++ b/frontend/src/components/identity/WalletConnection.vue @@ -66,7 +66,7 @@ error.value = result.error || 'Не удалось подключить кошелек'; } } catch (err) { - console.error('Error connecting wallet:', err); + // console.error('Error connecting wallet:', err); error.value = err.message || 'Произошла ошибка при подключении кошелька'; } finally { isLoading.value = false; diff --git a/frontend/src/components/tables/TableCell.vue b/frontend/src/components/tables/TableCell.vue index 93e06d4..70491d5 100644 --- a/frontend/src/components/tables/TableCell.vue +++ b/frontend/src/components/tables/TableCell.vue @@ -180,7 +180,7 @@ watch(editing, (val) => { // Добавляем watch для отслеживания изменений в мультисвязях с дебаунсингом let debounceTimer = null; watch(editMultiRelationValues, (newValues, oldValues) => { - console.log('[editMultiRelationValues] changed from:', oldValues, 'to:', newValues); + // console.log('[editMultiRelationValues] changed from:', oldValues, 'to:', newValues); // Очищаем предыдущий таймер if (debounceTimer) { @@ -204,7 +204,7 @@ let unsubscribeFromWebSocket = null; // Функция для очистки кэша function clearCache() { cacheService.clearAll(); - console.log('[TableCell] Кэш очищен'); + // console.log('[TableCell] Кэш очищен'); } // WebSocket для тегов @@ -223,7 +223,7 @@ let isMultiRelationValuesLoaded = false; onMounted(async () => { const startTime = Date.now(); - console.log(`[TableCell] 🚀 Начало монтирования ячейки row:${props.rowId} col:${props.column.id} в ${startTime}`); + // console.log(`[TableCell] 🚀 Начало монтирования ячейки row:${props.rowId} col:${props.column.id} в ${startTime}`); if (props.column.type === 'multiselect') { multiOptions.value = (props.column.options && props.column.options.options) || []; @@ -250,14 +250,14 @@ onMounted(async () => { } else if (props.column.type === 'multiselect-relation') { // Загружаем опции только один раз if (!isInitialized) { - console.log(`[TableCell] 📥 Загружаем опции для row:${props.rowId} col:${props.column.id}`); + // console.log(`[TableCell] 📥 Загружаем опции для row:${props.rowId} col:${props.column.id}`); await loadMultiRelationOptions(); isInitialized = true; } // Загружаем relations только один раз для каждой комбинации rowId + columnId if (!isMultiRelationValuesLoaded) { - console.log(`[TableCell] 📥 Загружаем relations для row:${props.rowId} col:${props.column.id}`); + // console.log(`[TableCell] 📥 Загружаем relations для row:${props.rowId} col:${props.column.id}`); await loadMultiRelationValues(); isMultiRelationValuesLoaded = true; } @@ -265,7 +265,7 @@ onMounted(async () => { // Подписываемся на обновления таблицы if (props.column.type === 'multiselect-relation') { unsubscribeFromWebSocket = subscribeToTableRelationsUpdates(props.column.table_id, async () => { - console.log('[TableCell] Получено обновление таблицы, перезагружаем relations'); + // console.log('[TableCell] Получено обновление таблицы, перезагружаем relations'); // Сбрасываем флаг загрузки isMultiRelationValuesLoaded = false; // Очищаем кэш relations для текущей строки @@ -277,7 +277,7 @@ onMounted(async () => { // Подписываемся на обновления тегов, если это связанная таблица тегов if (props.column.options && props.column.options.relatedTableId) { unsubscribeFromTags = onTagsUpdate(async () => { - console.log('[TableCell] Получено обновление тегов, перезагружаем опции'); + // console.log('[TableCell] Получено обновление тегов, перезагружаем опции'); // Сбрасываем флаги загрузки isInitialized = false; isMultiRelationValuesLoaded = false; @@ -300,7 +300,7 @@ onMounted(async () => { localValue.value = cell ? cell.value : ''; } const endTime = Date.now(); - console.log(`[TableCell] ✅ Завершено монтирование ячейки row:${props.rowId} col:${props.column.id} за ${endTime - startTime}ms`); + // console.log(`[TableCell] ✅ Завершено монтирование ячейки row:${props.rowId} col:${props.column.id} за ${endTime - startTime}ms`); }); onUnmounted(() => { @@ -487,7 +487,7 @@ async function loadLookupValues() { async function loadMultiRelationOptions() { // Проверяем, не загружены ли уже опции if (multiRelationOptions.value.length > 0) { - console.log('[loadMultiRelationOptions] Опции уже загружены, пропускаем'); + // console.log('[loadMultiRelationOptions] Опции уже загружены, пропускаем'); return; } @@ -499,10 +499,10 @@ async function loadMultiRelationOptions() { let tableData; if (cachedTableData) { - console.log(`[loadMultiRelationOptions] ✅ Используем предварительно загруженные данные таблицы ${rel.relatedTableId}`); + // console.log(`[loadMultiRelationOptions] ✅ Используем предварительно загруженные данные таблицы ${rel.relatedTableId}`); tableData = cachedTableData; } else { - console.log(`[loadMultiRelationOptions] ⚠️ Данные таблицы ${rel.relatedTableId} не найдены в кэше, загружаем заново`); + // console.log(`[loadMultiRelationOptions] ⚠️ Данные таблицы ${rel.relatedTableId} не найдены в кэше, загружаем заново`); const response = await fetch(`/api/tables/${rel.relatedTableId}`); tableData = await response.json(); // Сохраняем в кэш @@ -517,9 +517,9 @@ async function loadMultiRelationOptions() { opts.push({ id: row.id, display: cell ? cell.value : `ID ${row.id}` }); } multiRelationOptions.value = opts; - console.log(`[loadMultiRelationOptions] Загружено ${opts.length} опций для таблицы ${rel.relatedTableId}`); + // console.log(`[loadMultiRelationOptions] Загружено ${opts.length} опций для таблицы ${rel.relatedTableId}`); } catch (e) { - console.error('[loadMultiRelationOptions] Error:', e); + // console.error('[loadMultiRelationOptions] Error:', e); } } } @@ -531,7 +531,7 @@ const LOAD_DEBOUNCE_DELAY = 50; // 50ms (уменьшено для ускоре async function loadMultiRelationValues() { // Проверяем, не загружены ли уже данные if (isMultiRelationValuesLoaded) { - console.log('[loadMultiRelationValues] Данные уже загружены, пропускаем'); + // console.log('[loadMultiRelationValues] Данные уже загружены, пропускаем'); return; } @@ -543,7 +543,7 @@ async function loadMultiRelationValues() { // Устанавливаем новый таймер loadMultiRelationValuesTimer = setTimeout(async () => { // Получаем связи для текущей строки - console.log('[loadMultiRelationValues] called for row:', props.rowId, 'column:', props.column.id); + // console.log('[loadMultiRelationValues] called for row:', props.rowId, 'column:', props.column.id); try { const rel = props.column.options || {}; @@ -554,10 +554,10 @@ async function loadMultiRelationValues() { const cachedRelations = cacheService.getRelationsData(props.rowId, props.column.id); if (cachedRelations) { - console.log('[loadMultiRelationValues] ✅ Используем предварительно загруженные relations для строки', props.rowId); + // console.log('[loadMultiRelationValues] ✅ Используем предварительно загруженные relations для строки', props.rowId); relations = cachedRelations; } else { - console.log('[loadMultiRelationValues] ⚠️ Relations не найдены в кэше, загружаем заново для строки', props.rowId); + // console.log('[loadMultiRelationValues] ⚠️ Relations не найдены в кэше, загружаем заново для строки', props.rowId); // Выполняем запросы параллельно const [relationsRes, tableRes] = await Promise.all([ fetch(`/api/tables/${props.column.table_id}/row/${props.rowId}/relations`), @@ -573,13 +573,13 @@ async function loadMultiRelationValues() { cacheService.setRelationsData(props.rowId, props.column.id, relations); } - console.log('[loadMultiRelationValues] API response status: 200 relations:', relations); + // console.log('[loadMultiRelationValues] API response status: 200 relations:', relations); // Приводим все id к строке для корректного сравнения const relatedRowIds = relations .filter(r => String(r.column_id) === String(props.column.id) && String(r.to_table_id) === String(rel.relatedTableId)) .map(r => String(r.to_row_id)); - console.log('[loadMultiRelationValues] filtered related row ids:', relatedRowIds); + // console.log('[loadMultiRelationValues] filtered related row ids:', relatedRowIds); // Обновляем значения editMultiRelationValues.value = relatedRowIds; @@ -603,48 +603,48 @@ async function loadMultiRelationValues() { selectedMultiRelationNames.value = multiRelationOptions.value .filter(opt => relatedRowIds.includes(String(opt.id))) .map(opt => opt.display); - console.log('[loadMultiRelationValues] selectedMultiRelationNames:', selectedMultiRelationNames.value); + // console.log('[loadMultiRelationValues] selectedMultiRelationNames:', selectedMultiRelationNames.value); // Отмечаем, что данные загружены isMultiRelationValuesLoaded = true; } } catch (e) { - console.error('[loadMultiRelationValues] Error:', e); + // console.error('[loadMultiRelationValues] Error:', e); } }, LOAD_DEBOUNCE_DELAY); } async function saveMultiRelation() { - console.log('[saveMultiRelation] called'); + // console.log('[saveMultiRelation] called'); const rel = props.column.options || {}; - console.log('[saveMultiRelation] editMultiRelationValues:', editMultiRelationValues.value); + // console.log('[saveMultiRelation] editMultiRelationValues:', editMultiRelationValues.value); try { const payload = { column_id: props.column.id, to_table_id: rel.relatedTableId, to_row_ids: editMultiRelationValues.value }; - console.log('[saveMultiRelation] POST payload:', payload); - console.log('[TableCell] Отправляем запрос на обновление relations для строки:', props.rowId); - console.log('[TableCell] Данные запроса:', payload); + // console.log('[saveMultiRelation] POST payload:', payload); + // console.log('[TableCell] Отправляем запрос на обновление relations для строки:', props.rowId); + // console.log('[TableCell] Данные запроса:', payload); const response = await fetch(`/api/tables/${props.column.table_id}/row/${props.rowId}/relations`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); const result = await response.json().catch(() => ({})); - console.log('[TableCell] Ответ сервера для строки:', props.rowId, 'статус:', response.status, 'результат:', result); + // console.log('[TableCell] Ответ сервера для строки:', props.rowId, 'статус:', response.status, 'результат:', result); if (response.ok) { - console.log('[TableCell] Успешно сохранены теги для строки:', props.rowId); + // console.log('[TableCell] Успешно сохранены теги для строки:', props.rowId); } else { - console.error('[TableCell] Ошибка сохранения тегов для строки:', props.rowId, 'статус:', response.status); + // console.error('[TableCell] Ошибка сохранения тегов для строки:', props.rowId, 'статус:', response.status); } editing.value = false; await loadMultiRelationValues(); - console.log('[saveMultiRelation] emitting update with:', editMultiRelationValues.value); + // console.log('[saveMultiRelation] emitting update with:', editMultiRelationValues.value); emit('update', editMultiRelationValues.value); } catch (e) { - console.error('[saveMultiRelation] Ошибка при сохранении мультисвязи:', e); + // console.error('[saveMultiRelation] Ошибка при сохранении мультисвязи:', e); } } @@ -653,7 +653,7 @@ async function addTag() { const rel = props.column.options || {}; try { - console.log('[addTag] Добавляем новый тег:', newTagName.value); + // console.log('[addTag] Добавляем новый тег:', newTagName.value); // 1. Создаем новую пустую строку в связанной таблице const rowResponse = await fetch(`/api/tables/${rel.relatedTableId}/rows`, { @@ -662,7 +662,7 @@ async function addTag() { }); const newRow = await rowResponse.json(); - console.log('[addTag] Новая строка создана:', newRow); + // console.log('[addTag] Новая строка создана:', newRow); // 2. Добавляем значение в ячейку через POST /cell const cellResponse = await fetch(`/api/tables/cell`, { @@ -676,7 +676,7 @@ async function addTag() { }); const cellResult = await cellResponse.json(); - console.log('[addTag] Значение ячейки сохранено:', cellResult); + // console.log('[addTag] Значение ячейки сохранено:', cellResult); // Очищаем форму newTagName.value = ''; @@ -688,12 +688,12 @@ async function addTag() { Promise.resolve(editMultiRelationValues.value.push(String(newRow.id))) ]); - console.log('[addTag] Тег добавлен в выбранные:', editMultiRelationValues.value); + // console.log('[addTag] Тег добавлен в выбранные:', editMultiRelationValues.value); // Сохраняем изменения, чтобы отправить WebSocket уведомление await saveMultiRelation(); } catch (e) { - console.error('[addTag] Ошибка при добавлении тега:', e); + // console.error('[addTag] Ошибка при добавлении тега:', e); } } @@ -702,13 +702,13 @@ async function deleteTag(tagId) { if (!confirm('Удалить этот тег?')) return; try { - console.log('[deleteTag] Удаляем тег с ID:', tagId); + // console.log('[deleteTag] Удаляем тег с ID:', tagId); // Удаляем тег из связанной таблицы const response = await fetch(`/api/tables/row/${tagId}`, { method: 'DELETE' }); const result = await response.json(); - console.log('[deleteTag] Ответ сервера:', response.status, result); + // console.log('[deleteTag] Ответ сервера:', response.status, result); // Убираем тег из выбранных значений, если он был выбран editMultiRelationValues.value = editMultiRelationValues.value.filter(id => String(id) !== String(tagId)); @@ -716,12 +716,12 @@ async function deleteTag(tagId) { // Обновляем список опций await loadMultiRelationOptions(); - console.log('[deleteTag] Тег удален:', tagId); + // console.log('[deleteTag] Тег удален:', tagId); // Сохраняем изменения, чтобы отправить WebSocket уведомление await saveMultiRelation(); } catch (e) { - console.error('[deleteTag] Ошибка при удалении тега:', e); + // console.error('[deleteTag] Ошибка при удалении тега:', e); } } diff --git a/frontend/src/components/tables/UserTableView.vue b/frontend/src/components/tables/UserTableView.vue index 9ac98fa..077ba39 100644 --- a/frontend/src/components/tables/UserTableView.vue +++ b/frontend/src/components/tables/UserTableView.vue @@ -361,7 +361,7 @@ async function fetchFilteredRows() { params.append(def.filterKey, Array.isArray(val) ? val.join(',') : val); } } - console.log('fetchFilteredRows params:', params.toString()); // Для отладки + // console.log('fetchFilteredRows params:', params.toString()); // Для отладки const data = await tablesService.getFilteredRows(props.tableId, params); // Локальная фильтрация по multiselect-relation (если backend не фильтрует) filteredRows.value = data.filter(row => { @@ -387,7 +387,7 @@ async function fetchFilteredRows() { // Основная загрузка таблицы async function fetchTable() { const startTime = Date.now(); - console.log(`[UserTableView] 🚀 Начало загрузки таблицы ${props.tableId} в ${startTime}`); + // console.log(`[UserTableView] 🚀 Начало загрузки таблицы ${props.tableId} в ${startTime}`); const data = await tablesService.getTable(props.tableId); columns.value = data.columns; @@ -395,12 +395,12 @@ async function fetchTable() { cellValues.value = data.cellValues; tableMeta.value = { name: data.name, description: data.description }; - console.log(`[UserTableView] 📊 Загружено ${rows.value.length} строк, ${columns.value.length} столбцов`); + // console.log(`[UserTableView] 📊 Загружено ${rows.value.length} строк, ${columns.value.length} столбцов`); // Предварительно загружаем все relations для всех строк параллельно const relationColumns = columns.value.filter(col => col.type === 'multiselect-relation'); if (relationColumns.length > 0) { - console.log(`[UserTableView] 🔄 Предварительно загружаем relations для ${relationColumns.length} столбцов`); + // console.log(`[UserTableView] 🔄 Предварительно загружаем relations для ${relationColumns.length} столбцов`); const relationPromises = []; for (const row of rows.value) { @@ -413,7 +413,7 @@ async function fetchTable() { return { rowId: row.id, colId: col.id, relations }; }) .catch(error => { - console.error(`[UserTableView] Ошибка загрузки relations для row:${row.id} col:${col.id}:`, error); + // console.error(`[UserTableView] Ошибка загрузки relations для row:${row.id} col:${col.id}:`, error); return { rowId: row.id, colId: col.id, relations: [] }; }); relationPromises.push(promise); @@ -422,7 +422,7 @@ async function fetchTable() { // Ждем загрузки всех relations const results = await Promise.all(relationPromises); - console.log(`[UserTableView] ✅ Предварительно загружено ${results.length} relations`); + // console.log(`[UserTableView] ✅ Предварительно загружено ${results.length} relations`); } // Предварительно загружаем данные связанных таблиц для опций @@ -434,7 +434,7 @@ async function fetchTable() { } if (relatedTableIds.size > 0) { - console.log(`[UserTableView] 🔄 Предварительно загружаем данные ${relatedTableIds.size} связанных таблиц для опций`); + // console.log(`[UserTableView] 🔄 Предварительно загружаем данные ${relatedTableIds.size} связанных таблиц для опций`); const tablePromises = Array.from(relatedTableIds).map(tableId => fetch(`/api/tables/${tableId}`) @@ -445,13 +445,13 @@ async function fetchTable() { return { tableId, tableData }; }) .catch(error => { - console.error(`[UserTableView] Ошибка загрузки таблицы ${tableId}:`, error); + // console.error(`[UserTableView] Ошибка загрузки таблицы ${tableId}:`, error); return { tableId, tableData: null }; }) ); const tableResults = await Promise.all(tablePromises); - console.log(`[UserTableView] ✅ Предварительно загружено ${tableResults.length} связанных таблиц`); + // console.log(`[UserTableView] ✅ Предварительно загружено ${tableResults.length} связанных таблиц`); } // Выполняем обновление фильтров и фильтрацию строк параллельно @@ -462,15 +462,15 @@ async function fetchTable() { // Выводим статистику кэша для отладки const cacheStats = cacheService.getStats(); - console.log('[UserTableView] Статистика кэша после загрузки таблицы:', { - tableCacheSize: cacheStats.tableCacheSize, - relationsCacheSize: cacheStats.relationsCacheSize, - tableCacheKeys: cacheStats.tableCacheKeys, - relationsCacheKeys: cacheStats.relationsCacheKeys.slice(0, 5) // Показываем только первые 5 ключей - }); + // console.log('[UserTableView] Статистика кэша после загрузки таблицы:', { + // tableCacheSize: cacheStats.tableCacheSize, + // relationsCacheSize: cacheStats.relationsCacheSize, + // tableCacheKeys: cacheStats.tableCacheKeys, + // relationsCacheKeys: cacheStats.relationsCacheKeys.slice(0, 5) // Показываем только первые 5 ключей + // }); const endTime = Date.now(); - console.log(`[UserTableView] ✅ Завершена загрузка таблицы ${props.tableId} за ${endTime - startTime}ms`); + // console.log(`[UserTableView] ✅ Завершена загрузка таблицы ${props.tableId} за ${endTime - startTime}ms`); } async function updateRelationFilterDefs() { @@ -485,7 +485,7 @@ async function updateRelationFilterDefs() { // Проверяем кэш const cached = cacheService.getTableData(tableId); if (cached) { - console.log(`[updateRelationFilterDefs] Используем кэшированные данные таблицы ${tableId}`); + // console.log(`[updateRelationFilterDefs] Используем кэшированные данные таблицы ${tableId}`); relatedTableMap.set(tableId, Promise.resolve(cached)); } else { relatedTableMap.set(tableId, tablesService.getTable(tableId)); @@ -536,7 +536,7 @@ async function updateRelationFilterDefs() { }); } } - console.log('relationFilterDefs:', defs); // Для отладки + // console.log('relationFilterDefs:', defs); // Для отладки relationFilterDefs.value = defs; } @@ -553,7 +553,7 @@ onMounted(() => { fetchTable(); // Подписка на WebSocket обновления таблицы unsubscribeFromTableUpdate = websocketService.onTableUpdate(props.tableId, () => { - console.log('[UserTableView] Получено событие table-updated, перезагружаем данные'); + // console.log('[UserTableView] Получено событие table-updated, перезагружаем данные'); // Очищаем кэш текущей таблицы cacheService.clearTableCache(props.tableId); fetchTable(); @@ -561,15 +561,15 @@ onMounted(() => { // Подписка на WebSocket обновления тегов const { onTagsUpdate } = useTagsWebSocket(); - console.log('[UserTableView] Подписываемся на обновления тегов для таблицы:', props.tableId); - console.log('[UserTableView] onTagsUpdate функция:', typeof onTagsUpdate); + // console.log('[UserTableView] Подписываемся на обновления тегов для таблицы:', props.tableId); + // console.log('[UserTableView] onTagsUpdate функция:', typeof onTagsUpdate); unsubscribeFromTagsUpdate = onTagsUpdate(async (data) => { - console.log('[UserTableView] 🔔 ПОЛУЧЕНО СОБЫТИЕ TAGS-UPDATED!'); - console.log('[UserTableView] Получено событие tags-updated, обновляем данные для таблицы:', props.tableId, data); + // console.log('[UserTableView] 🔔 ПОЛУЧЕНО СОБЫТИЕ TAGS-UPDATED!'); + // console.log('[UserTableView] Получено событие tags-updated, обновляем данные для таблицы:', props.tableId, data); // Если есть информация о конкретной строке, обновляем только её if (data && data.rowId) { - console.log('[UserTableView] Точечное обновление для строки:', data.rowId); + // console.log('[UserTableView] Точечное обновление для строки:', data.rowId); try { // Очищаем кэш relations только для конкретной строки const tagColumns = columns.value.filter(col => @@ -581,19 +581,19 @@ onMounted(() => { cacheService.clearRelationsData(data.rowId, col.id); } - console.log('[UserTableView] Кэш relations очищен для строки, обновляем данные строки:', data.rowId); + // console.log('[UserTableView] Кэш relations очищен для строки, обновляем данные строки:', data.rowId); // Обновляем только данные конкретной строки await updateRowData(data.rowId); - console.log('[UserTableView] Данные строки обновлены:', data.rowId); + // console.log('[UserTableView] Данные строки обновлены:', data.rowId); } catch (error) { - console.error('[UserTableView] Ошибка при точечном обновлении:', error); + // console.error('[UserTableView] Ошибка при точечном обновлении:', error); // Fallback: полная перезагрузка при ошибке await fetchTable(); } } else { // Если нет информации о строке, используем старую логику - console.log('[UserTableView] Общее обновление тегов'); + // console.log('[UserTableView] Общее обновление тегов'); try { // Очищаем кэш relations для всех строк этой таблицы const tableRows = rows.value || []; @@ -609,11 +609,11 @@ onMounted(() => { } } - console.log('[UserTableView] Кэш relations очищен, перезагружаем данные таблицы:', props.tableId); + // console.log('[UserTableView] Кэш relations очищен, перезагружаем данные таблицы:', props.tableId); await fetchTable(); - console.log('[UserTableView] Данные таблицы перезагружены:', props.tableId); + // console.log('[UserTableView] Данные таблицы перезагружены:', props.tableId); } catch (error) { - console.error('[UserTableView] Ошибка при обновлении после tags-updated:', error); + // console.error('[UserTableView] Ошибка при обновлении после tags-updated:', error); // Fallback: полная перезагрузка при ошибке cacheService.clearTableCache(props.tableId); await fetchTable(); @@ -764,13 +764,13 @@ async function rebuildIndex() { // Функция для точечного обновления данных конкретной строки async function updateRowData(rowId) { const startTime = Date.now(); - console.log(`[UserTableView] 🔄 Начало обновления данных строки ${rowId}`); + // console.log(`[UserTableView] 🔄 Начало обновления данных строки ${rowId}`); try { // Находим строку в текущих данных const rowIndex = rows.value.findIndex(row => row.id === rowId); if (rowIndex === -1) { - console.log(`[UserTableView] Строка ${rowId} не найдена в текущих данных`); + // console.log(`[UserTableView] Строка ${rowId} не найдена в текущих данных`); return; } @@ -781,7 +781,7 @@ async function updateRowData(rowId) { ); if (tagColumns.length > 0) { - console.log(`[UserTableView] 🔄 Загружаем relations для строки ${rowId} (${tagColumns.length} столбцов)`); + // console.log(`[UserTableView] 🔄 Загружаем relations для строки ${rowId} (${tagColumns.length} столбцов)`); const relationPromises = tagColumns.map(col => fetch(`/api/tables/${col.table_id}/row/${rowId}/relations`) @@ -792,19 +792,19 @@ async function updateRowData(rowId) { return { rowId, colId: col.id, relations }; }) .catch(error => { - console.error(`[UserTableView] Ошибка загрузки relations для row:${rowId} col:${col.id}:`, error); + // console.error(`[UserTableView] Ошибка загрузки relations для row:${rowId} col:${col.id}:`, error); return { rowId, colId: col.id, relations: [] }; }) ); await Promise.all(relationPromises); - console.log(`[UserTableView] ✅ Relations для строки ${rowId} обновлены`); + // console.log(`[UserTableView] ✅ Relations для строки ${rowId} обновлены`); } const endTime = Date.now(); - console.log(`[UserTableView] ✅ Завершено обновление строки ${rowId} за ${endTime - startTime}ms`); + // console.log(`[UserTableView] ✅ Завершено обновление строки ${rowId} за ${endTime - startTime}ms`); } catch (error) { - console.error(`[UserTableView] ❌ Ошибка при обновлении строки ${rowId}:`, error); + // console.error(`[UserTableView] ❌ Ошибка при обновлении строки ${rowId}:`, error); throw error; } } diff --git a/frontend/src/composables/useAuthFlow.js b/frontend/src/composables/useAuthFlow.js index 6b1df2d..bb859f8 100644 --- a/frontend/src/composables/useAuthFlow.js +++ b/frontend/src/composables/useAuthFlow.js @@ -50,7 +50,7 @@ export function useAuthFlow(options = {}) { if (telegramAuth.value.checkInterval) { clearInterval(telegramAuth.value.checkInterval); telegramAuth.value.checkInterval = null; - console.log('[useAuthFlow] Интервал проверки Telegram авторизации очищен'); + // console.log('[useAuthFlow] Интервал проверки Telegram авторизации очищен'); } }; @@ -69,13 +69,13 @@ export function useAuthFlow(options = {}) { clearTelegramInterval(); // На всякий случай telegramAuth.value.checkInterval = setInterval(async () => { try { - console.log('[useAuthFlow] Проверка статуса Telegram...'); + // console.log('[useAuthFlow] Проверка статуса Telegram...'); // Используем checkAuth из useAuth для обновления состояния const checkResponse = await auth.checkAuth(); const telegramId = auth.telegramId.value; if (auth.isAuthenticated.value && telegramId) { - console.log('[useAuthFlow] Telegram успешно связан/подтвержден.'); + // console.log('[useAuthFlow] Telegram успешно связан/подтвержден.'); clearTelegramInterval(); telegramAuth.value.showVerification = false; telegramAuth.value.verificationCode = ''; @@ -87,7 +87,7 @@ export function useAuthFlow(options = {}) { return; } } catch (intervalError) { - console.error('[useAuthFlow] Ошибка при проверке статуса Telegram в интервале:', intervalError); + // console.error('[useAuthFlow] Ошибка при проверке статуса Telegram в интервале:', intervalError); // Решаем, останавливать ли интервал при ошибке // telegramAuth.value.error = 'Ошибка проверки статуса Telegram.'; // clearTelegramInterval(); @@ -99,7 +99,7 @@ export function useAuthFlow(options = {}) { showErrorMessage(telegramAuth.value.error); } } catch (error) { - console.error('[useAuthFlow] Ошибка инициализации Telegram аутентификации:', error); + // console.error('[useAuthFlow] Ошибка инициализации Telegram аутентификации:', error); const message = error?.response?.data?.error || 'Ошибка при инициализации аутентификации через Telegram'; telegramAuth.value.error = message; showErrorMessage(message); @@ -114,7 +114,7 @@ export function useAuthFlow(options = {}) { telegramAuth.value.verificationCode = ''; telegramAuth.value.error = ''; telegramAuth.value.isLoading = false; - console.log('[useAuthFlow] Аутентификация Telegram отменена'); + // console.log('[useAuthFlow] Аутентификация Telegram отменена'); }; // --- Email --- @@ -148,13 +148,13 @@ export function useAuthFlow(options = {}) { emailAuth.value.showForm = false; emailAuth.value.showVerification = true; emailAuth.value.verificationCode = ''; // Очищаем поле кода - console.log('[useAuthFlow] Код верификации Email отправлен на:', emailAuth.value.verificationEmail); + // console.log('[useAuthFlow] Код верификации Email отправлен на:', emailAuth.value.verificationEmail); } else { emailAuth.value.error = response.data.error || 'Ошибка инициализации аутентификации по email'; showErrorMessage(emailAuth.value.error); } } catch (error) { - console.error('[useAuthFlow] Ошибка при запросе инициализации Email:', error); + // console.error('[useAuthFlow] Ошибка при запросе инициализации Email:', error); const message = error?.response?.data?.error || 'Ошибка при запросе кода подтверждения'; emailAuth.value.error = message; showErrorMessage(message); diff --git a/frontend/src/composables/useChat.js b/frontend/src/composables/useChat.js index c432b33..f7831ca 100644 --- a/frontend/src/composables/useChat.js +++ b/frontend/src/composables/useChat.js @@ -64,14 +64,14 @@ export function useChat(auth) { const { silent = false, initial = false, authType = null } = options; if (messageLoading.value.isHistoryLoadingInProgress) { - console.warn('[useChat] Загрузка истории уже идет, пропуск.'); + // console.warn('[useChat] Загрузка истории уже идет, пропуск.'); return; } messageLoading.value.isHistoryLoadingInProgress = true; // Если initial=true, сбрасываем offset и hasMoreMessages if (initial) { - console.log('[useChat] Начальная загрузка истории...'); + // console.log('[useChat] Начальная загрузка истории...'); messageLoading.value.offset = 0; messageLoading.value.hasMoreMessages = false; messages.value = []; // Очищаем текущие сообщения перед начальной загрузкой @@ -86,17 +86,17 @@ export function useChat(auth) { messageLoading.value.isLoadingHistory = true; if (!silent && initial) isLoading.value = true; // Показываем общий лоадер только при начальной загрузке - console.log( - `[useChat] Загрузка истории сообщений (initial: ${initial}, authType: ${authType}, offset: ${messageLoading.value.offset})...` - ); + // console.log( + // `[useChat] Загрузка истории сообщений (initial: ${initial}, authType: ${authType}, offset: ${messageLoading.value.offset})...` + // ); try { // --- Логика ожидания привязки гостя (упрощенная) --- // TODO: Рассмотреть более надежный механизм, если это необходимо if (authType) { - console.log(`[useChat] Ожидание после ${authType} аутентификации...`); + // console.log(`[useChat] Ожидание после ${authType} аутентификации...`); await new Promise((resolve) => setTimeout(resolve, 1500)); // Увеличена задержка - console.log('[useChat] Ожидание завершено, продолжаем загрузку истории.'); + // console.log('[useChat] Ожидание завершено, продолжаем загрузку истории.'); } // --- Конец логики ожидания --- @@ -107,9 +107,9 @@ export function useChat(auth) { const countResponse = await api.get('/chat/history', { params: { count_only: true } }); if (!countResponse.data.success) throw new Error('Не удалось получить количество сообщений'); totalMessages = countResponse.data.total || countResponse.data.count || 0; - console.log(`[useChat] Всего сообщений в истории: ${totalMessages}`); + // console.log(`[useChat] Всего сообщений в истории: ${totalMessages}`); } catch(countError) { - console.error('[useChat] Ошибка получения количества сообщений:', countError); + // console.error('[useChat] Ошибка получения количества сообщений:', countError); // Не прерываем выполнение, попробуем загрузить без total } } @@ -118,7 +118,7 @@ export function useChat(auth) { // Если это первая загрузка и мы знаем total, рассчитаем смещение для последних сообщений if (initial && totalMessages > 0 && totalMessages > messageLoading.value.limit) { effectiveOffset = Math.max(0, totalMessages - messageLoading.value.limit); - console.log(`[useChat] Рассчитано начальное смещение: ${effectiveOffset}`); + // console.log(`[useChat] Рассчитано начальное смещение: ${effectiveOffset}`); } const response = await api.get('/chat/history', { @@ -130,7 +130,7 @@ export function useChat(auth) { if (response.data.success) { const loadedMessages = response.data.messages || []; - console.log(`[useChat] Загружено ${loadedMessages.length} сообщений.`); + // console.log(`[useChat] Загружено ${loadedMessages.length} сообщений.`); if (loadedMessages.length > 0) { // Добавляем к существующим (в начало для истории, в конец для начальной загрузки) @@ -147,7 +147,7 @@ export function useChat(auth) { } else { messageLoading.value.offset += loadedMessages.length; } - console.log(`[useChat] Новое смещение: ${messageLoading.value.offset}`); + // console.log(`[useChat] Новое смещение: ${messageLoading.value.offset}`); // Проверяем, есть ли еще сообщения для загрузки // Используем totalMessages, если он был успешно получен @@ -157,7 +157,7 @@ export function useChat(auth) { // Если total не известен, считаем, что есть еще, если загрузили полный лимит messageLoading.value.hasMoreMessages = loadedMessages.length === messageLoading.value.limit; } - console.log(`[useChat] Есть еще сообщения: ${messageLoading.value.hasMoreMessages}`); + // console.log(`[useChat] Есть еще сообщения: ${messageLoading.value.hasMoreMessages}`); } else { // Если сообщений не пришло, значит, больше нет messageLoading.value.hasMoreMessages = false; @@ -177,11 +177,11 @@ export function useChat(auth) { } } else { - console.error('[useChat] API вернул ошибку при загрузке истории:', response.data.error); + // console.error('[useChat] API вернул ошибку при загрузке истории:', response.data.error); messageLoading.value.hasMoreMessages = false; // Считаем, что больше нет при ошибке } } catch (error) { - console.error('[useChat] Ошибка загрузки истории сообщений:', error); + // console.error('[useChat] Ошибка загрузки истории сообщений:', error); messageLoading.value.hasMoreMessages = false; // Считаем, что больше нет при ошибке } finally { messageLoading.value.isLoadingHistory = false; @@ -193,12 +193,12 @@ export function useChat(auth) { // --- Отправка сообщения --- const handleSendMessage = async (payload) => { // --- НАЧАЛО ДОБАВЛЕННЫХ ЛОГОВ --- - console.log('[useChat] handleSendMessage called. Payload:', payload); - console.log('[useChat] Current auth state:', { - isAuthenticated: auth.isAuthenticated.value, - userId: auth.userId.value, - authType: auth.authType.value, - }); + // console.log('[useChat] handleSendMessage called. Payload:', payload); + // console.log('[useChat] Current auth state:', { + // isAuthenticated: auth.isAuthenticated.value, + // userId: auth.userId.value, + // authType: auth.authType.value, + // }); // --- КОНЕЦ ДОБАВЛЕННЫХ ЛОГОВ --- const { message: text, attachments: files } = payload; // files - массив File объектов @@ -206,7 +206,7 @@ export function useChat(auth) { // Проверка на пустое сообщение (если нет ни текста, ни файлов) if (!userMessageContent && (!files || files.length === 0)) { - console.warn('[useChat] Попытка отправить пустое сообщение.'); + // console.warn('[useChat] Попытка отправить пустое сообщение.'); return; } @@ -268,7 +268,7 @@ export function useChat(auth) { const userMsgIndex = messages.value.findIndex((m) => m.id === tempId); if (response.data.success) { - console.log('[useChat] Сообщение успешно отправлено:', response.data); + // console.log('[useChat] Сообщение успешно отправлено:', response.data); // Обновляем локальное сообщение данными с сервера if (userMsgIndex !== -1) { const serverUserMessage = response.data.userMessage || { id: response.data.messageId }; @@ -317,7 +317,7 @@ export function useChat(auth) { }); setToStorage('guestMessages', storedMessages); } catch (storageError) { - console.error('[useChat] Ошибка сохранения гостевого сообщения в localStorage:', storageError); + // console.error('[useChat] Ошибка сохранения гостевого сообщения в localStorage:', storageError); } } @@ -329,7 +329,7 @@ export function useChat(auth) { } } catch (error) { - console.error('[useChat] Ошибка отправки сообщения:', error); + // console.error('[useChat] Ошибка отправки сообщения:', error); const userMsgIndex = messages.value.findIndex((m) => m.id === tempId); if (userMsgIndex !== -1) { messages.value[userMsgIndex].hasError = true; @@ -354,7 +354,7 @@ export function useChat(auth) { try { const storedMessages = getFromStorage('guestMessages'); if (storedMessages && Array.isArray(storedMessages) && storedMessages.length > 0) { - console.log(`[useChat] Найдено ${storedMessages.length} сохраненных гостевых сообщений`); + // console.log(`[useChat] Найдено ${storedMessages.length} сохраненных гостевых сообщений`); // Добавляем только если текущий список пуст (чтобы не дублировать при HMR) if(messages.value.length === 0) { messages.value = storedMessages.map(m => ({ ...m, isGuest: true })); // Помечаем как гостевые @@ -362,7 +362,7 @@ export function useChat(auth) { } } } catch (e) { - console.error('[useChat] Ошибка загрузки гостевых сообщений из localStorage:', e); + // console.error('[useChat] Ошибка загрузки гостевых сообщений из localStorage:', e); removeFromStorage('guestMessages'); // Очистить при ошибке парсинга } } @@ -381,7 +381,7 @@ export function useChat(auth) { guestId.value = ''; } } catch (error) { - console.error('[useChat] Ошибка связывания гостевых сообщений:', error); + // console.error('[useChat] Ошибка связывания гостевых сообщений:', error); } }; @@ -401,7 +401,7 @@ export function useChat(auth) { // Сброс чата при выходе пользователя watch(() => auth.isAuthenticated.value, (isAuth, wasAuth) => { if (!isAuth && wasAuth) { // Если пользователь разлогинился - console.log('[useChat] Пользователь вышел, сброс состояния чата.'); + // console.log('[useChat] Пользователь вышел, сброс состояния чата.'); messages.value = []; messageLoading.value.offset = 0; messageLoading.value.hasMoreMessages = false; @@ -413,7 +413,7 @@ export function useChat(auth) { // Гостевые данные очищаются при успешной аутентификации в loadMessages // или если пользователь сам очистит localStorage } else if (isAuth && !wasAuth) { // Если пользователь вошел - console.log('[useChat] Пользователь вошел, подключаем WebSocket.'); + // console.log('[useChat] Пользователь вошел, подключаем WebSocket.'); // Отложенное подключение, чтобы дождаться загрузки данных пользователя setTimeout(() => setupChatWebSocket(), 100); } @@ -422,7 +422,7 @@ export function useChat(auth) { // Отслеживаем загрузку данных пользователя для подключения WebSocket watch(() => auth.user?.value, (newUser, oldUser) => { if (newUser && newUser.id && auth.isAuthenticated.value) { - console.log('[useChat] Данные пользователя загружены, подключаем WebSocket:', newUser.id); + // console.log('[useChat] Данные пользователя загружены, подключаем WebSocket:', newUser.id); setupChatWebSocket(); } }, { immediate: false }); @@ -431,12 +431,12 @@ export function useChat(auth) { function setupChatWebSocket() { // Подключаемся к WebSocket только если пользователь аутентифицирован if (auth.isAuthenticated.value && auth.user && auth.user.value && auth.user.value.id) { - console.log('[useChat] Подключение к WebSocket для пользователя:', auth.user.value.id); + // console.log('[useChat] Подключение к WebSocket для пользователя:', auth.user.value.id); websocketService.connect(auth.user.value.id); // Создаем и сохраняем callback функции wsCallbacks.chatMessage = (message) => { - console.log('[useChat] Получено новое сообщение через WebSocket:', message); + // console.log('[useChat] Получено новое сообщение через WebSocket:', message); // Проверяем, что сообщение не дублируется const existingMessage = messages.value.find(m => m.id === message.id); if (!existingMessage) { @@ -445,20 +445,20 @@ export function useChat(auth) { }; wsCallbacks.conversationUpdated = (conversationId) => { - console.log('[useChat] Обновление диалога через WebSocket:', conversationId); + // console.log('[useChat] Обновление диалога через WebSocket:', conversationId); // Можно добавить логику обновления списка диалогов }; wsCallbacks.connected = () => { - console.log('[useChat] WebSocket подключен'); + // console.log('[useChat] WebSocket подключен'); }; wsCallbacks.disconnected = () => { - console.log('[useChat] WebSocket отключен'); + // console.log('[useChat] WebSocket отключен'); }; wsCallbacks.error = (error) => { - console.error('[useChat] WebSocket ошибка:', error); + // console.error('[useChat] WebSocket ошибка:', error); }; // Подписываемся на события @@ -468,7 +468,7 @@ export function useChat(auth) { websocketService.on('disconnected', wsCallbacks.disconnected); websocketService.on('error', wsCallbacks.error); } else { - console.log('[useChat] WebSocket не подключен: пользователь не аутентифицирован или данные не загружены'); + // console.log('[useChat] WebSocket не подключен: пользователь не аутентифицирован или данные не загружены'); } } diff --git a/frontend/src/composables/useTokenBalances.js b/frontend/src/composables/useTokenBalances.js index 51994e9..41587f7 100644 --- a/frontend/src/composables/useTokenBalances.js +++ b/frontend/src/composables/useTokenBalances.js @@ -33,30 +33,30 @@ export function useTokenBalances() { if (walletAddress) { try { isLoadingTokens.value = true; - console.log('[useTokenBalances] Запрос балансов для адреса:', walletAddress); + // console.log('[useTokenBalances] Запрос балансов для адреса:', walletAddress); const response = await fetchTokenBalances(walletAddress); // Ожидаем, что response — это массив объектов tokenBalances.value = Array.isArray(response) ? response : (response?.data || []); - console.log('[useTokenBalances] Обновленные балансы:', tokenBalances.value); - } catch (error) { - console.error('[useTokenBalances] Ошибка при обновлении балансов:', error); + // console.log('[useTokenBalances] Обновленные балансы:', tokenBalances.value); + } catch (error) { + // console.error('[useTokenBalances] Ошибка при обновлении балансов:', error); tokenBalances.value = []; } finally { isLoadingTokens.value = false; } } else { - console.log('[useTokenBalances] Не найден адрес кошелька для запроса балансов.'); + // console.log('[useTokenBalances] Не найден адрес кошелька для запроса балансов.'); tokenBalances.value = []; } } else { - console.log('[useTokenBalances] Пользователь не аутентифицирован, сброс балансов.'); + // console.log('[useTokenBalances] Пользователь не аутентифицирован, сброс балансов.'); tokenBalances.value = []; } }; const startBalanceUpdates = (intervalMs = 300000) => { stopBalanceUpdates(); // Остановить предыдущий интервал, если он был - console.log('[useTokenBalances] Запуск обновления балансов...'); + // console.log('[useTokenBalances] Запуск обновления балансов...'); updateBalances(); // Обновить сразу balanceUpdateInterval = setInterval(updateBalances, intervalMs); }; diff --git a/frontend/src/main.js b/frontend/src/main.js index bd8291f..39f4c39 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -40,8 +40,8 @@ app.use(ElementPlus); // ]).catch(err => console.error('Failed to load API mocks:', err)); // } -console.log('API URL:', axios.defaults.baseURL); -console.log('main.js: Starting application with router'); +// console.log('API URL:', axios.defaults.baseURL); +// console.log('main.js: Starting application with router'); app.mount('#app'); -console.log('main.js: Application with router mounted'); +// console.log('main.js: Application with router mounted'); diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index c1d5982..33ce8f3 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -14,14 +14,13 @@ import { createRouter, createWebHistory } from 'vue-router'; import HomeView from '../views/HomeView.vue'; // Импортируем (пока не созданные) компоненты для подстраниц настроек const SettingsAiView = () => import('../views/settings/AiSettingsView.vue'); -const SettingsBlockchainView = () => import('../views/settings/BlockchainSettingsView.vue'); const SettingsSecurityView = () => import('../views/settings/SecuritySettingsView.vue'); const SettingsInterfaceView = () => import('../views/settings/Interface/InterfaceSettingsView.vue'); import axios from 'axios'; import { setToStorage } from '../utils/storage.js'; -console.log('router/index.js: Script loaded'); +// console.log('router/index.js: Script loaded'); const routes = [ { @@ -50,16 +49,7 @@ const routes = [ name: 'settings-ai', component: SettingsAiView, }, - { - path: 'blockchain', - name: 'settings-blockchain', - component: SettingsBlockchainView, - }, - { - path: 'blockchain/dle-deploy', - name: 'settings-blockchain-dle-deploy', - component: () => import('../views/settings/BlockchainSettingsView.vue'), - }, + { path: 'dle-v2-deploy', name: 'settings-dle-v2-deploy', @@ -286,7 +276,7 @@ const router = createRouter({ routes, }); -console.log('router/index.js: Router created'); +// console.log('router/index.js: Router created'); // Защита маршрутов router.beforeEach(async (to, from, next) => { diff --git a/frontend/src/services/cacheService.js b/frontend/src/services/cacheService.js index 0559ab2..b35fb67 100644 --- a/frontend/src/services/cacheService.js +++ b/frontend/src/services/cacheService.js @@ -16,14 +16,14 @@ class CacheService { const cached = this.tableCache.get(cacheKey); if (cached && Date.now() - cached.timestamp < this.tableCacheTimeout) { - console.log(`[CacheService] ✅ КЭШ ПОПАДАНИЕ для таблицы ${tableId} (${cacheKey})`); + // console.log(`[CacheService] ✅ КЭШ ПОПАДАНИЕ для таблицы ${tableId} (${cacheKey})`); return cached.data; } if (cached) { - console.log(`[CacheService] ⏰ Кэш истек для таблицы ${tableId} (${cacheKey})`); + // console.log(`[CacheService] ⏰ Кэш истек для таблицы ${tableId} (${cacheKey})`); } else { - console.log(`[CacheService] ❌ Кэш отсутствует для таблицы ${tableId} (${cacheKey})`); + // console.log(`[CacheService] ❌ Кэш отсутствует для таблицы ${tableId} (${cacheKey})`); } return null; @@ -35,7 +35,7 @@ class CacheService { data, timestamp: Date.now() }); - console.log(`[CacheService] Сохранены данные таблицы ${tableId} в кэш`); + // console.log(`[CacheService] Сохранены данные таблицы ${tableId} в кэш`); } // Кэширование relations @@ -44,7 +44,7 @@ class CacheService { const cached = this.relationsCache.get(cacheKey); if (cached && Date.now() - cached.timestamp < this.relationsCacheTimeout) { - console.log(`[CacheService] Используем кэшированные relations для строки ${rowId}`); + // console.log(`[CacheService] Используем кэшированные relations для строки ${rowId}`); return cached.data; } @@ -57,7 +57,7 @@ class CacheService { data, timestamp: Date.now() }); - console.log(`[CacheService] Сохранены relations строки ${rowId} в кэш`); + // console.log(`[CacheService] Сохранены relations строки ${rowId} в кэш`); } // Очистка кэша @@ -69,11 +69,11 @@ class CacheService { this.tableCache.delete(key); } } - console.log(`[CacheService] Очищен кэш таблицы ${tableId}`); + // console.log(`[CacheService] Очищен кэш таблицы ${tableId}`); } else { // Очищаем весь кэш таблиц this.tableCache.clear(); - console.log('[CacheService] Очищен весь кэш таблиц'); + // console.log('[CacheService] Очищен весь кэш таблиц'); } } @@ -85,11 +85,11 @@ class CacheService { this.relationsCache.delete(key); } } - console.log(`[CacheService] Очищен кэш relations строки ${rowId}`); + // console.log(`[CacheService] Очищен кэш relations строки ${rowId}`); } else { // Очищаем весь кэш relations this.relationsCache.clear(); - console.log('[CacheService] Очищен весь кэш relations'); + // console.log('[CacheService] Очищен весь кэш relations'); } } @@ -97,7 +97,7 @@ class CacheService { clearAll() { this.tableCache.clear(); this.relationsCache.clear(); - console.log('[CacheService] Очищены все кэши'); + // console.log('[CacheService] Очищены все кэши'); } // Получение статистики кэша diff --git a/frontend/src/services/contactsService.js b/frontend/src/services/contactsService.js index 75ff1fd..17fe59b 100644 --- a/frontend/src/services/contactsService.js +++ b/frontend/src/services/contactsService.js @@ -27,10 +27,10 @@ export default { async deleteContact(id) { try { const res = await api.delete(`/users/${id}`); - console.log('Ответ на удаление контакта:', res.status, res.data); + // console.log('Ответ на удаление контакта:', res.status, res.data); return res.data; } catch (err) { - console.error('Ошибка при удалении контакта:', err.response?.status, err.response?.data, err); + // console.error('Ошибка при удалении контакта:', err.response?.status, err.response?.data, err); // Если пользователь уже удален (404), считаем это успехом if (err.response?.status === 404) { diff --git a/frontend/src/services/dleV2Service.js b/frontend/src/services/dleV2Service.js index ca60eb8..37bf480 100644 --- a/frontend/src/services/dleV2Service.js +++ b/frontend/src/services/dleV2Service.js @@ -27,7 +27,7 @@ class DLEV2Service { const response = await api.post('/dle-v2', dleParams); return response.data; } catch (error) { - console.error('Ошибка при создании DLE v2:', error); + // console.error('Ошибка при создании DLE v2:', error); throw error; } } @@ -41,7 +41,7 @@ class DLEV2Service { const response = await api.get('/dle-v2'); return response.data.data || []; } catch (error) { - console.error('Ошибка при получении списка DLE v2:', error); + // console.error('Ошибка при получении списка DLE v2:', error); return []; } } @@ -55,7 +55,7 @@ class DLEV2Service { const response = await api.get('/dle-v2/defaults'); return response.data.data; } catch (error) { - console.error('Ошибка при получении настроек по умолчанию DLE v2:', error); + // console.error('Ошибка при получении настроек по умолчанию DLE v2:', error); return { votingDelay: 1, votingPeriod: 45818, @@ -76,7 +76,7 @@ class DLEV2Service { const response = await api.delete(`/dle-v2/${dleAddress}`); return response.data; } catch (error) { - console.error('Ошибка при удалении DLE v2:', error); + // console.error('Ошибка при удалении DLE v2:', error); throw error; } } diff --git a/frontend/src/services/tablesService.js b/frontend/src/services/tablesService.js index 89b8bd9..14dcba4 100644 --- a/frontend/src/services/tablesService.js +++ b/frontend/src/services/tablesService.js @@ -56,13 +56,13 @@ export default { return res.data; }, async deleteTable(id) { - console.log('tablesService.deleteTable called with id:', id); + // console.log('tablesService.deleteTable called with id:', id); try { const res = await api.delete(`${tablesApi}/${id}`); - console.log('Delete response:', res.data); + // console.log('Delete response:', res.data); return res.data; } catch (error) { - console.error('Error in deleteTable service:', error); + // console.error('Error in deleteTable service:', error); throw error; } }, diff --git a/frontend/src/services/tokens.js b/frontend/src/services/tokens.js index f7264af..90a777b 100644 --- a/frontend/src/services/tokens.js +++ b/frontend/src/services/tokens.js @@ -18,14 +18,14 @@ export const fetchTokenBalances = async (address = null) => { let url = '/tokens/balances'; if (address) { url += `?address=${encodeURIComponent(address)}`; - console.log(`Fetching token balances for specific address: ${address}`); + // console.log(`Fetching token balances for specific address: ${address}`); } else { - console.log('Fetching token balances for session user'); + // console.log('Fetching token balances for session user'); } const response = await api.get(url); return response.data; } catch (error) { - console.error('Error fetching token balances:', error); + // console.error('Error fetching token balances:', error); return { eth: '0', bsc: '0', diff --git a/frontend/src/services/wallet.js b/frontend/src/services/wallet.js index 7bd933e..17f7cd9 100644 --- a/frontend/src/services/wallet.js +++ b/frontend/src/services/wallet.js @@ -15,7 +15,7 @@ import axios from '../api/axios'; import { SiweMessage } from 'siwe'; export async function connectWithWallet() { - console.log('Starting wallet connection...'); + // console.log('Starting wallet connection...'); try { // Проверяем наличие MetaMask @@ -23,12 +23,12 @@ export async function connectWithWallet() { throw new Error('MetaMask not detected. Please install MetaMask.'); } - console.log('MetaMask detected, requesting accounts...'); + // console.log('MetaMask detected, requesting accounts...'); // Запрашиваем доступ к аккаунтам const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' }); - console.log('Got accounts:', accounts); + // console.log('Got accounts:', accounts); if (!accounts || accounts.length === 0) { throw new Error('No accounts found. Please unlock MetaMask.'); @@ -36,13 +36,13 @@ export async function connectWithWallet() { // Берем первый аккаунт const address = ethers.getAddress(accounts[0]); - console.log('Normalized address:', address); + // console.log('Normalized address:', address); // Запрашиваем nonce с сервера - console.log('Requesting nonce...'); + // console.log('Requesting nonce...'); const nonceResponse = await axios.get(`/auth/nonce?address=${address}`); const nonce = nonceResponse.data.nonce; - console.log('Got nonce:', nonce); + // console.log('Got nonce:', nonce); // Создаем сообщение для подписи const domain = window.location.host; @@ -63,30 +63,30 @@ export async function connectWithWallet() { }); const message = siweMessage.prepareMessage(); - console.log('SIWE message:', message); - console.log('SIWE message details:', { - domain, - address, - statement, - uri: origin, - version: '1', - chainId: 1, - nonce, - issuedAt, - resources: [`${origin}/api/auth/verify`], - }); + // console.log('SIWE message:', message); + // console.log('SIWE message details:', { + // domain, + // address, + // statement, + // uri: origin, + // version: '1', + // chainId: 1, + // nonce, + // issuedAt, + // resources: [`${origin}/api/auth/verify`], + // }); // Запрашиваем подпись - console.log('Requesting signature...'); + // console.log('Requesting signature...'); const signature = await window.ethereum.request({ method: 'personal_sign', params: [message, address.toLowerCase()], }); - console.log('Got signature:', signature); + // console.log('Got signature:', signature); // Отправляем подпись на сервер для верификации - console.log('Sending verification request...'); + // console.log('Sending verification request...'); const verificationResponse = await axios.post('/auth/verify', { signature, address, @@ -94,7 +94,7 @@ export async function connectWithWallet() { issuedAt, }); - console.log('Verification response:', verificationResponse.data); + // console.log('Verification response:', verificationResponse.data); // Обновляем состояние аутентификации if (verificationResponse.data.success) { @@ -107,7 +107,7 @@ export async function connectWithWallet() { return verificationResponse.data; } catch (error) { - console.error('Error connecting wallet:', error); + // console.error('Error connecting wallet:', error); throw error; } } diff --git a/frontend/src/services/webSshService.js b/frontend/src/services/webSshService.js index f728cda..4b1c429 100644 --- a/frontend/src/services/webSshService.js +++ b/frontend/src/services/webSshService.js @@ -47,7 +47,7 @@ class WebSshService { this.isAgentRunning = false; return { running: false }; } catch (error) { - console.error('Агент не доступен:', error); + // console.error('Агент не доступен:', error); this.isAgentRunning = false; return { running: false, error: error.message }; } @@ -84,7 +84,7 @@ class WebSshService { return await this.downloadAndInstallAgent(); } } catch (error) { - console.error('Ошибка при установке агента:', error); + // console.error('Ошибка при установке агента:', error); return await this.downloadAndInstallAgent(); } } @@ -154,7 +154,7 @@ EOF requiresManualInstall: true }; } catch (error) { - console.error('Ошибка при создании установочного скрипта:', error); + // console.error('Ошибка при создании установочного скрипта:', error); return { success: false, message: 'Ошибка при подготовке установки агента', @@ -216,7 +216,7 @@ EOF }; } } catch (error) { - console.error('Ошибка при создании туннеля:', error); + // console.error('Ошибка при создании туннеля:', error); return { success: false, message: `Ошибка подключения к агенту: ${error.message}` @@ -259,7 +259,7 @@ EOF }; } } catch (error) { - console.error('Ошибка при отключении туннеля:', error); + // console.error('Ошибка при отключении туннеля:', error); return { success: false, message: `Ошибка подключения к агенту: ${error.message}` @@ -291,7 +291,7 @@ EOF }; } } catch (error) { - console.error('Ошибка при получении статуса:', error); + // console.error('Ошибка при получении статуса:', error); return { connected: false, domain: null, @@ -337,7 +337,7 @@ app.post('/tunnel/create', async (req, res) => { try { const { domain, email, sshHost, sshUser, sshKey, localPort, serverPort, sshPort } = req.body; - console.log('Создание туннеля для домена:', domain); + // console.log('Создание туннеля для домена:', domain); // Сохраняем SSH ключ во временный файл const keyPath = path.join(__dirname, 'temp_ssh_key'); @@ -395,11 +395,11 @@ server { const sshProcess = spawn('ssh', sshArgs); sshProcess.on('error', (error) => { - console.error('SSH процесс ошибка:', error); + // console.error('SSH процесс ошибка:', error); }); sshProcess.on('close', (code) => { - console.log('SSH процесс завершен с кодом:', code); + // console.log('SSH процесс завершен с кодом:', code); tunnelState.connected = false; }); @@ -419,7 +419,7 @@ server { }); } catch (error) { - console.error('Ошибка создания туннеля:', error); + // console.error('Ошибка создания туннеля:', error); res.status(500).json({ success: false, message: error.message @@ -446,7 +446,7 @@ app.post('/tunnel/disconnect', (req, res) => { message: 'Туннель отключен' }); } catch (error) { - console.error('Ошибка отключения туннеля:', error); + // console.error('Ошибка отключения туннеля:', error); res.status(500).json({ success: false, message: error.message @@ -465,7 +465,7 @@ app.get('/tunnel/status', (req, res) => { // Запуск сервера app.listen(PORT, 'localhost', () => { - console.log(\`WebSSH Agent запущен на порту \${PORT}\`); + // console.log(\`WebSSH Agent запущен на порту \${PORT}\`); }); `; } diff --git a/frontend/src/services/websocketService.js b/frontend/src/services/websocketService.js index ed41fda..03b3ea6 100644 --- a/frontend/src/services/websocketService.js +++ b/frontend/src/services/websocketService.js @@ -16,7 +16,7 @@ class WebSocketService { constructor() { - console.log('🔌 [WebSocket] Конструктор вызван'); + // console.log('🔌 [WebSocket] Конструктор вызван'); this.ws = null; this.isConnected = false; this.reconnectAttempts = 0; @@ -24,14 +24,14 @@ class WebSocketService { this.reconnectDelay = 1000; // 1 секунда this.listeners = new Map(); this.userId = null; - console.log('🔌 [WebSocket] Конструктор завершен'); + // console.log('🔌 [WebSocket] Конструктор завершен'); } // Подключение к WebSocket серверу connect(userId = null) { - console.log('🔌 [WebSocket] Попытка подключения, userId:', userId); + // console.log('🔌 [WebSocket] Попытка подключения, userId:', userId); if (this.ws && this.ws.readyState === WebSocket.OPEN) { - console.log('🔌 [WebSocket] Уже подключен'); + // console.log('🔌 [WebSocket] Уже подключен'); return; } @@ -43,13 +43,13 @@ class WebSocketService { // В Docker окружении используем тот же хост, что и для HTTP const wsUrl = `${protocol}//${window.location.host}/ws`; - console.log('🔌 [WebSocket] Подключение к:', wsUrl); - console.log('🔌 [WebSocket] Текущий хост:', window.location.host); + // console.log('🔌 [WebSocket] Подключение к:', wsUrl); + // console.log('🔌 [WebSocket] Текущий хост:', window.location.host); this.ws = new WebSocket(wsUrl); this.ws.onopen = () => { - console.log('✅ [WebSocket] Подключение установлено'); + // console.log('✅ [WebSocket] Подключение установлено'); this.isConnected = true; this.reconnectAttempts = 0; @@ -65,66 +65,42 @@ class WebSocketService { }; this.ws.onclose = (event) => { - console.log('🔌 [WebSocket] Соединение закрыто:', event.code, event.reason); + // console.log('🔌 [WebSocket] Соединение закрыто:', event.code, event.reason); this.isConnected = false; this.emit('disconnected', event); // Попытка переподключения if (this.reconnectAttempts < this.maxReconnectAttempts) { this.reconnectAttempts++; - console.log(`🔄 [WebSocket] Попытка переподключения ${this.reconnectAttempts}/${this.maxReconnectAttempts}`); + // console.log(`🔄 [WebSocket] Попытка переподключения ${this.reconnectAttempts}/${this.maxReconnectAttempts}`); setTimeout(() => { this.connect(this.userId); }, this.reconnectDelay * this.reconnectAttempts); } else { - console.error('❌ [WebSocket] Превышено максимальное количество попыток переподключения'); + // console.error('❌ [WebSocket] Превышено максимальное количество попыток переподключения'); this.emit('reconnect-failed'); } }; this.ws.onerror = (error) => { - console.error('❌ [WebSocket] Ошибка соединения:', error); + // console.error('❌ [WebSocket] Ошибка соединения:', error); this.emit('error', error); }; this.ws.onmessage = (event) => { try { const data = JSON.parse(event.data); - console.log('📨 [WebSocket] Получено сообщение:', data); - console.log('📨 [WebSocket] Тип сообщения:', data.type); + // console.log('📨 [WebSocket] Получено сообщение:', data); + // console.log('📨 [WebSocket] Тип сообщения:', data.type); this.handleMessage(data); } catch (error) { - console.error('❌ [WebSocket] Ошибка парсинга сообщения:', error); + // console.error('❌ [WebSocket] Ошибка парсинга сообщения:', error); } }; - this.ws.onclose = (event) => { - console.log('🔌 [WebSocket] Соединение закрыто:', event.code, event.reason); - this.isConnected = false; - this.emit('disconnected', event); - - // Попытка переподключения - if (this.reconnectAttempts < this.maxReconnectAttempts) { - this.reconnectAttempts++; - console.log(`🔄 [WebSocket] Попытка переподключения ${this.reconnectAttempts}/${this.maxReconnectAttempts}`); - - setTimeout(() => { - this.connect(this.userId); - }, this.reconnectDelay * this.reconnectAttempts); - } else { - console.error('❌ [WebSocket] Превышено максимальное количество попыток переподключения'); - this.emit('reconnect-failed'); - } - }; - - this.ws.onerror = (error) => { - console.error('❌ [WebSocket] Ошибка соединения:', error); - this.emit('error', error); - }; - } catch (error) { - console.error('❌ [WebSocket] Ошибка создания соединения:', error); + // console.error('❌ [WebSocket] Ошибка создания соединения:', error); this.emit('error', error); } } @@ -134,7 +110,7 @@ class WebSocketService { if (this.ws && this.ws.readyState === WebSocket.OPEN) { this.ws.send(JSON.stringify(data)); } else { - console.warn('⚠️ [WebSocket] Соединение не установлено, сообщение не отправлено:', data); + // console.warn('⚠️ [WebSocket] Соединение не установлено, сообщение не отправлено:', data); } } @@ -142,57 +118,57 @@ class WebSocketService { handleMessage(data) { switch (data.type) { case 'auth-success': - console.log('✅ [WebSocket] Аутентификация успешна для пользователя:', data.userId); + // console.log('✅ [WebSocket] Аутентификация успешна для пользователя:', data.userId); this.emit('auth-success', data); break; case 'chat-message': - console.log('💬 [WebSocket] Новое сообщение чата:', data.message); + // console.log('💬 [WebSocket] Новое сообщение чата:', data.message); this.emit('chat-message', data.message); break; case 'conversation-updated': - console.log('📝 [WebSocket] Обновление диалога:', data.conversationId); + // console.log('📝 [WebSocket] Обновление диалога:', data.conversationId); this.emit('conversation-updated', data.conversationId); break; case 'messages-updated': - console.log('📨 [WebSocket] Обновление сообщений'); + // console.log('📨 [WebSocket] Обновление сообщений'); this.emit('messages-updated'); break; case 'contacts-updated': - console.log('👥 [WebSocket] Обновление контактов'); + // console.log('👥 [WebSocket] Обновление контактов'); this.emit('contacts-updated'); break; case 'tags-updated': - console.log('🔔 [websocketService] Получено сообщение tags-updated:', data); - console.log('🔔 [websocketService] Количество слушателей tags-updated:', this.listeners.get('tags-updated')?.length || 0); + // console.log('🔔 [websocketService] Получено сообщение tags-updated:', data); + // console.log('🔔 [websocketService] Количество слушателей tags-updated:', this.listeners.get('tags-updated')?.length || 0); this.emit('tags-updated', data); break; case 'table-updated': - console.log('[WebSocket] table-updated:', data.tableId); + // console.log('[WebSocket] table-updated:', data.tableId); if (tableUpdateSubscribers[data.tableId]) { tableUpdateSubscribers[data.tableId].forEach(cb => cb(data)); } break; default: - console.log('❓ [WebSocket] Неизвестный тип сообщения:', data.type); + // console.log('❓ [WebSocket] Неизвестный тип сообщения:', data.type); this.emit('unknown-message', data); } } // Подписка на события on(event, callback) { - console.log('🔌 [WebSocket] Подписка на событие:', event); + // console.log('🔌 [WebSocket] Подписка на событие:', event); if (!this.listeners.has(event)) { this.listeners.set(event, []); } this.listeners.get(event).push(callback); - console.log('🔌 [WebSocket] Количество слушателей для', event, ':', this.listeners.get(event).length); + // console.log('🔌 [WebSocket] Количество слушателей для', event, ':', this.listeners.get(event).length); } // Отписка от событий @@ -208,20 +184,20 @@ class WebSocketService { // Эмиссия событий emit(event, data) { - console.log('🔌 [WebSocket] Эмиссия события:', event, 'с данными:', data); + // console.log('🔌 [WebSocket] Эмиссия события:', event, 'с данными:', data); if (this.listeners.has(event)) { const callbacks = this.listeners.get(event); - console.log('🔌 [WebSocket] Количество колбэков для', event, ':', callbacks.length); + // console.log('🔌 [WebSocket] Количество колбэков для', event, ':', callbacks.length); callbacks.forEach((callback, index) => { try { - console.log('🔌 [WebSocket] Выполняем колбэк #', index, 'для события', event); + // console.log('🔌 [WebSocket] Выполняем колбэк #', index, 'для события', event); callback(data); } catch (error) { - console.error(`❌ [WebSocket] Ошибка в обработчике события ${event}:`, error); + // console.error(`❌ [WebSocket] Ошибка в обработчике события ${event}:`, error); } }); } else { - console.log('🔌 [WebSocket] Нет слушателей для события:', event); + // console.log('🔌 [WebSocket] Нет слушателей для события:', event); } } @@ -233,7 +209,7 @@ class WebSocketService { } this.isConnected = false; this.listeners.clear(); - console.log('🔌 [WebSocket] Отключен'); + // console.log('🔌 [WebSocket] Отключен'); } // Получение статуса соединения @@ -249,7 +225,7 @@ class WebSocketService { // Создаем единственный экземпляр const websocketService = new WebSocketService(); -console.log('🔌 [WebSocket] Сервис создан'); + // console.log('🔌 [WebSocket] Сервис создан'); // Подписчики на обновления таблиц: tableId -> [callback] const tableUpdateSubscribers = {}; @@ -269,17 +245,17 @@ export default { websocketService, onTableUpdate, }; -console.log('🔌 [WebSocket] Экспорт завершен'); + // console.log('🔌 [WebSocket] Экспорт завершен'); // Автоматически подключаемся при загрузке модуля -console.log('🔌 [WebSocket] Автоматическое подключение...'); + // console.log('🔌 [WebSocket] Автоматическое подключение...'); setTimeout(() => { - console.log('🔌 [WebSocket] Подключаемся через 1 секунду...'); + // console.log('🔌 [WebSocket] Подключаемся через 1 секунду...'); websocketService.connect(); }, 1000); // Добавляем периодическую проверку состояния соединения setInterval(() => { const status = websocketService.getStatus(); - console.log('🔌 [WebSocket] Статус соединения:', status); + // console.log('🔌 [WebSocket] Статус соединения:', status); }, 10000); // Проверяем каждые 10 секунд \ No newline at end of file diff --git a/frontend/src/utils/storage.js b/frontend/src/utils/storage.js index d698340..709caa0 100644 --- a/frontend/src/utils/storage.js +++ b/frontend/src/utils/storage.js @@ -17,7 +17,7 @@ export const isLocalStorageAvailable = () => { window.localStorage.removeItem(test); return true; } catch (e) { - console.error('localStorage is not available:', e); + // console.error('localStorage is not available:', e); return false; } }; @@ -33,7 +33,7 @@ export const getFromStorage = (key, defaultValue = null) => { return item || defaultValue; } } catch (e) { - console.error(`Error getting ${key} from localStorage:`, e); + // console.error(`Error getting ${key} from localStorage:`, e); return defaultValue; } }; @@ -48,7 +48,7 @@ export const setToStorage = (key, value) => { window.localStorage.setItem(key, valueToStore); return true; } catch (e) { - console.error(`Error setting ${key} in localStorage:`, e); + // console.error(`Error setting ${key} in localStorage:`, e); return false; } }; @@ -59,7 +59,7 @@ export const removeFromStorage = (key) => { window.localStorage.removeItem(key); return true; } catch (e) { - console.error(`Error removing ${key} from localStorage:`, e); + // console.error(`Error removing ${key} from localStorage:`, e); return false; } }; \ No newline at end of file diff --git a/frontend/src/utils/wallet.js b/frontend/src/utils/wallet.js index 0a0bce7..abc016b 100644 --- a/frontend/src/utils/wallet.js +++ b/frontend/src/utils/wallet.js @@ -16,11 +16,11 @@ import { SiweMessage } from 'siwe'; export const connectWallet = async () => { try { - console.log('Starting wallet connection...'); + // console.log('Starting wallet connection...'); // Проверяем наличие MetaMask или другого Ethereum провайдера if (!window.ethereum) { - console.error('No Ethereum provider (like MetaMask) detected!'); + // console.error('No Ethereum provider (like MetaMask) detected!'); return { success: false, error: @@ -28,11 +28,11 @@ export const connectWallet = async () => { }; } - console.log('MetaMask detected, requesting accounts...'); + // console.log('MetaMask detected, requesting accounts...'); // Запрашиваем доступ к аккаунтам const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' }); - console.log('Got accounts:', accounts); + // console.log('Got accounts:', accounts); if (!accounts || accounts.length === 0) { return { @@ -45,13 +45,13 @@ export const connectWallet = async () => { const address = accounts[0]; // Нормализуем адрес (приводим к нижнему регистру для последующих сравнений) const normalizedAddress = ethers.utils.getAddress(address); - console.log('Normalized address:', normalizedAddress); + // console.log('Normalized address:', normalizedAddress); // Запрашиваем nonce с сервера - console.log('Requesting nonce...'); + // console.log('Requesting nonce...'); const nonceResponse = await axios.get(`/auth/nonce?address=${normalizedAddress}`); const nonce = nonceResponse.data.nonce; - console.log('Got nonce:', nonce); + // console.log('Got nonce:', nonce); if (!nonce) { return { @@ -83,10 +83,10 @@ export const connectWallet = async () => { // Получаем строку сообщения для подписи const messageToSign = message.prepareMessage(); - console.log('SIWE message:', messageToSign); + // console.log('SIWE message:', messageToSign); // Запрашиваем подпись - console.log('Requesting signature...'); + // console.log('Requesting signature...'); const signature = await signer.signMessage(messageToSign); if (!signature) { @@ -96,17 +96,17 @@ export const connectWallet = async () => { }; } - console.log('Got signature:', signature); + // console.log('Got signature:', signature); // Отправляем верификацию на сервер - console.log('Sending verification request...'); + // console.log('Sending verification request...'); const requestData = { address: normalizedAddress, signature, nonce, issuedAt: new Date().toISOString(), }; - console.log('Request data:', requestData); + // console.log('Request data:', requestData); const verifyResponse = await axios.post('/api/auth/verify', requestData, { withCredentials: true, @@ -130,7 +130,7 @@ export const connectWallet = async () => { if (authButtonsEl) authButtonsEl.style.display = 'none'; if (logoutButtonEl) logoutButtonEl.style.display = 'inline-block'; - console.log('Verification response:', verifyResponse.data); + // console.log('Verification response:', verifyResponse.data); if (verifyResponse.data.success) { return { @@ -146,7 +146,7 @@ export const connectWallet = async () => { }; } } catch (error) { - console.error('Error connecting wallet:', error); + // console.error('Error connecting wallet:', error); // Формируем понятное сообщение об ошибке let errorMessage = 'Произошла ошибка при подключении кошелька.'; diff --git a/frontend/src/views/CrmView.vue b/frontend/src/views/CrmView.vue index 9332b3a..1de4e3d 100644 --- a/frontend/src/views/CrmView.vue +++ b/frontend/src/views/CrmView.vue @@ -93,24 +93,24 @@ function connectWebSocket() { const wsProtocol = window.location.protocol === 'https:' ? 'wss' : 'ws'; ws = new WebSocket(`${wsProtocol}://${window.location.host}/ws`); ws.onopen = () => { - console.log('[CRM] WebSocket соединение установлено'); + // console.log('[CRM] WebSocket соединение установлено'); }; ws.onmessage = (event) => { try { const msg = JSON.parse(event.data); if (msg.type === 'contacts-updated') { - console.log('[CRM] Получено событие contacts-updated, обновляем контакты'); + // console.log('[CRM] Получено событие contacts-updated, обновляем контакты'); loadContacts(); } } catch (e) { - console.error('[CRM] Ошибка обработки сообщения WebSocket:', e); + // console.error('[CRM] Ошибка обработки сообщения WebSocket:', e); } }; ws.onclose = () => { - console.log('[CRM] WebSocket соединение закрыто'); + // console.log('[CRM] WebSocket соединение закрыто'); }; ws.onerror = (e) => { - console.error('[CRM] WebSocket ошибка:', e); + // console.error('[CRM] WebSocket ошибка:', e); }; } @@ -136,7 +136,7 @@ const loadDLEs = async () => { selectedDleIndex.value = 0; } } catch (error) { - console.error('Ошибка при загрузке списка DLE:', error); + // console.error('Ошибка при загрузке списка DLE:', error); } finally { isLoading.value = false; } @@ -144,7 +144,7 @@ const loadDLEs = async () => { // Обработчик события изменения авторизации const handleAuthEvent = (eventData) => { - console.log('[CrmView] Получено событие изменения авторизации:', eventData); + // console.log('[CrmView] Получено событие изменения авторизации:', eventData); if (eventData.isAuthenticated) { loadDLEs(); } @@ -154,7 +154,7 @@ const handleAuthEvent = (eventData) => { let unsubscribe = null; onMounted(() => { - console.log('[CrmView] Компонент загружен'); + // console.log('[CrmView] Компонент загружен'); // Если пользователь авторизован, загружаем данные if (auth.isAuthenticated.value) { diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue index 72fcf38..dbd869d 100644 --- a/frontend/src/views/HomeView.vue +++ b/frontend/src/views/HomeView.vue @@ -52,7 +52,7 @@ import BaseLayout from '../components/BaseLayout.vue'; import ChatInterface from '../components/ChatInterface.vue'; - console.log('HomeView.vue: Using BaseLayout'); + // console.log('HomeView.vue: Using BaseLayout'); // Определяем props, переданные из App.vue через RouterView const props = defineProps({ @@ -99,7 +99,7 @@ let unsubscribe = null; onMounted(() => { - console.log('[HomeView] Компонент загружен (обновленная версия)'); + // console.log('[HomeView] Компонент загружен (обновленная версия)'); // Подписка на события авторизации unsubscribe = eventBus.on('auth-state-changed', handleAuthEvent); @@ -118,7 +118,7 @@ // Функция обновления сообщений после авторизации const handleAuthEvent = async (eventData) => { - console.log('[HomeView] Получено событие изменения авторизации:', eventData); + // console.log('[HomeView] Получено событие изменения авторизации:', eventData); if (eventData.isAuthenticated) { // Сначала связываем гостевые сообщения, если есть await linkGuestMessagesAfterAuth(); diff --git a/frontend/src/views/contacts/ContactDeleteConfirm.vue b/frontend/src/views/contacts/ContactDeleteConfirm.vue index 271e202..bf20b3c 100644 --- a/frontend/src/views/contacts/ContactDeleteConfirm.vue +++ b/frontend/src/views/contacts/ContactDeleteConfirm.vue @@ -58,7 +58,7 @@ async function loadContact() { error.value = 'Контакт не найден'; } } catch (e) { - console.error('Ошибка загрузки контакта:', e); + // console.error('Ошибка загрузки контакта:', e); contact.value = null; error.value = 'Контакт не найден'; } finally { @@ -72,7 +72,7 @@ async function deleteContact() { error.value = ''; try { const result = await contactsService.deleteContact(contact.value.id); - console.log('Результат удаления:', result); + // console.log('Результат удаления:', result); // Если удаление успешно или пользователь уже удален if (result.success || result.message === 'Пользователь уже удален') { @@ -81,7 +81,7 @@ async function deleteContact() { error.value = 'Ошибка при удалении контакта'; } } catch (e) { - console.error('Ошибка при удалении:', e); + // console.error('Ошибка при удалении:', e); error.value = 'Ошибка при удалении контакта'; } finally { isDeleting.value = false; diff --git a/frontend/src/views/contacts/ContactDetailsView.vue b/frontend/src/views/contacts/ContactDetailsView.vue index b2fbf90..ee90004 100644 --- a/frontend/src/views/contacts/ContactDetailsView.vue +++ b/frontend/src/views/contacts/ContactDetailsView.vue @@ -470,9 +470,9 @@ async function handleSendMessage({ message, attachments }) { } async function handleAiReply(selectedMessages = []) { - console.log('[AI-ASSISTANT] Кнопка нажата, messages:', messages.value); + // console.log('[AI-ASSISTANT] Кнопка нажата, messages:', messages.value); if (isAiLoading.value) { - console.log('[AI-ASSISTANT] Уже идёт генерация, выход'); + // console.log('[AI-ASSISTANT] Уже идёт генерация, выход'); return; } if (!Array.isArray(selectedMessages) || selectedMessages.length === 0) { @@ -485,7 +485,7 @@ async function handleAiReply(selectedMessages = []) { const draftResp = await messagesService.generateAiDraft(conversationId.value, selectedMessages); if (draftResp && draftResp.success && draftResp.aiMessage) { chatNewMessage.value = draftResp.aiMessage; - console.log('[AI-ASSISTANT] Черновик сгенерирован:', draftResp.aiMessage); + // console.log('[AI-ASSISTANT] Черновик сгенерирован:', draftResp.aiMessage); } else { alert('Не удалось сгенерировать ответ ИИ.'); } @@ -493,7 +493,7 @@ async function handleAiReply(selectedMessages = []) { alert('Ошибка генерации ответа ИИ: ' + (e?.message || e)); } finally { isAiLoading.value = false; - console.log('[AI-ASSISTANT] Генерация завершена'); + // console.log('[AI-ASSISTANT] Генерация завершена'); } } @@ -536,9 +536,9 @@ async function createTag() { const descCol = table.columns[1]; // 1. Создаём строку const newRow = await tablesService.addRow(tableId); - console.log('DEBUG newRow:', newRow); + // console.log('DEBUG newRow:', newRow); if (!newRow || !newRow.id) { - console.error('Ошибка: не удалось получить id новой строки', newRow); + // console.error('Ошибка: не удалось получить id новой строки', newRow); alert('Ошибка: не удалось получить id новой строки. См. консоль.'); return; } @@ -618,7 +618,7 @@ onMounted(async () => { // Подписываемся на обновления тегов unsubscribeFromTags = onTagsUpdate(async () => { - console.log('[ContactDetailsView] Получено обновление тегов, перезагружаем списки тегов'); + // console.log('[ContactDetailsView] Получено обновление тегов, перезагружаем списки тегов'); await loadAllTags(); await loadUserTags(); }); diff --git a/frontend/src/views/settings/BlockchainSettingsView.vue b/frontend/src/views/settings/BlockchainSettingsView.vue deleted file mode 100644 index c88ad22..0000000 --- a/frontend/src/views/settings/BlockchainSettingsView.vue +++ /dev/null @@ -1,1406 +0,0 @@ - - - - - \ No newline at end of file diff --git a/frontend/src/views/settings/DleDeployFormView.vue b/frontend/src/views/settings/DleDeployFormView.vue index 67bb90d..f1048fe 100644 --- a/frontend/src/views/settings/DleDeployFormView.vue +++ b/frontend/src/views/settings/DleDeployFormView.vue @@ -1006,10 +1006,10 @@ const getOkvedLevel = (code) => { // Функция для загрузки ОКВЭД кодов определенного уровня const fetchOkvedCodes = async (level, parentCode, optionsRef, loadingRef) => { - console.log(`🔍 fetchOkvedCodes вызвана: level=${level}, parentCode=${parentCode || 'root'}`); + // console.log(`🔍 fetchOkvedCodes вызвана: level=${level}, parentCode=${parentCode || 'root'}`); if (!optionsRef || !loadingRef) { - console.error('[DleDeployForm] fetchOkvedCodes requires optionsRef and loadingRef'); + // console.error('[DleDeployForm] fetchOkvedCodes requires optionsRef and loadingRef'); return; } @@ -1017,8 +1017,8 @@ const fetchOkvedCodes = async (level, parentCode, optionsRef, loadingRef) => { optionsRef.value = []; try { - console.log(`[DleDeployForm] Загрузка ОКВЭД уровень ${level}, родитель: ${parentCode || 'root'}`); - console.log(`[DleDeployForm] Доступно ОКВЭД кодов: ${russianClassifiers.okved?.length || 0}`); + // console.log(`[DleDeployForm] Загрузка ОКВЭД уровень ${level}, родитель: ${parentCode || 'root'}`); + // console.log(`[DleDeployForm] Доступно ОКВЭД кодов: ${russianClassifiers.okved?.length || 0}`); // Фильтруем коды из уже загруженных данных let filteredCodes = []; @@ -1042,11 +1042,11 @@ const fetchOkvedCodes = async (level, parentCode, optionsRef, loadingRef) => { text: `${code.code} - ${code.title}` })); - console.log(`[DleDeployForm] Загружено ОКВЭД кодов уровня ${level}: ${optionsRef.value.length}`); - console.log(`[DleDeployForm] Первые 3 кода:`, optionsRef.value.slice(0, 3)); + // console.log(`[DleDeployForm] Загружено ОКВЭД кодов уровня ${level}: ${optionsRef.value.length}`); + // console.log(`[DleDeployForm] Первые 3 кода:`, optionsRef.value.slice(0, 3)); } catch (error) { - console.error('[DleDeployForm] Ошибка при загрузке ОКВЭД кодов:', error); + // console.error('[DleDeployForm] Ошибка при загрузке ОКВЭД кодов:', error); } finally { loadingRef.value = false; } @@ -1083,7 +1083,7 @@ const updateCurrentOkvedSelection = () => { // Watchers для 2-уровневой загрузки ОКВЭД watch(selectedOkvedLevel1, (newVal) => { - console.log('[DleDeployForm] selectedOkvedLevel1 changed to:', newVal); + // console.log('[DleDeployForm] selectedOkvedLevel1 changed to:', newVal); selectedOkvedLevel2.value = ''; okvedLevel2Options.value = []; @@ -1094,7 +1094,7 @@ watch(selectedOkvedLevel1, (newVal) => { }); watch(selectedOkvedLevel2, () => { - console.log('[DleDeployForm] selectedOkvedLevel2 changed to:', selectedOkvedLevel2.value); + // console.log('[DleDeployForm] selectedOkvedLevel2 changed to:', selectedOkvedLevel2.value); updateCurrentOkvedSelection(); }); @@ -1297,9 +1297,9 @@ const saveFormData = () => { showUnifiedKey: showUnifiedKey.value }; localStorage.setItem(STORAGE_KEY, JSON.stringify(dataToSave)); - console.log('[DleDeployForm] Данные формы сохранены в localStorage'); + // console.log('[DleDeployForm] Данные формы сохранены в localStorage'); } catch (error) { - console.error('[DleDeployForm] Ошибка сохранения данных:', error); + // console.error('[DleDeployForm] Ошибка сохранения данных:', error); } }, 500); // Задержка 500мс }; @@ -1362,11 +1362,11 @@ const loadFormData = () => { Object.assign(keyValidation, parsedData.keyValidation || {}); showUnifiedKey.value = parsedData.showUnifiedKey || false; - console.log('[DleDeployForm] Данные формы восстановлены из localStorage'); + // console.log('[DleDeployForm] Данные формы восстановлены из localStorage'); return true; } } catch (error) { - console.error('[DleDeployForm] Ошибка восстановления данных:', error); + // console.error('[DleDeployForm] Ошибка восстановления данных:', error); } return false; }; @@ -1375,9 +1375,9 @@ const loadFormData = () => { const clearStoredData = () => { try { localStorage.removeItem(STORAGE_KEY); - console.log('[DleDeployForm] Данные формы удалены из localStorage'); + // console.log('[DleDeployForm] Данные формы удалены из localStorage'); } catch (error) { - console.error('[DleDeployForm] Ошибка очистки localStorage:', error); + // console.error('[DleDeployForm] Ошибка очистки localStorage:', error); } }; @@ -1463,7 +1463,7 @@ const searchByPostalCode = async () => { params.append('countrycodes', 'RU'); } - console.log(`[SearchByPostalCode] Querying Nominatim: ${params.toString()}`); + // console.log(`[SearchByPostalCode] Querying Nominatim: ${params.toString()}`); const response = await axios.get(`/geocoding/nominatim-search?${params.toString()}`); if (response.data && Array.isArray(response.data) && response.data.length > 0) { @@ -1483,18 +1483,18 @@ const searchByPostalCode = async () => { rawData: result.address // Сохраняем все сырые данные для анализа })); - console.log(`[SearchByPostalCode] Found ${searchResults.value.length} results`); + // console.log(`[SearchByPostalCode] Found ${searchResults.value.length} results`); // Автоматически заполняем поля первым результатом if (searchResults.value.length > 0) { fillFromSearchResult(searchResults.value[0]); - console.log('[SearchByPostalCode] Auto-filled with first result'); + // console.log('[SearchByPostalCode] Auto-filled with first result'); } } else { - console.log('[SearchByPostalCode] No results found'); + // console.log('[SearchByPostalCode] No results found'); } } catch (error) { - console.error('Ошибка при поиске по индексу:', error); + // console.error('Ошибка при поиске по индексу:', error); } finally { isSearchingAddress.value = false; } @@ -1509,7 +1509,7 @@ const findOktmoByAddress = (result) => { return ''; } - console.log(`[FindOktmo] Searching OKTMO for region: "${region}"`); + // console.log(`[FindOktmo] Searching OKTMO for region: "${region}"`); // Ищем совпадение по названию региона const foundOktmo = russianClassifiers.oktmo.find(oktmo => { @@ -1523,11 +1523,11 @@ const findOktmoByAddress = (result) => { }); if (foundOktmo) { - console.log(`[FindOktmo] Found OKTMO: ${foundOktmo.code} - ${foundOktmo.title}`); + // console.log(`[FindOktmo] Found OKTMO: ${foundOktmo.code} - ${foundOktmo.title}`); return foundOktmo.code; } - console.log(`[FindOktmo] No OKTMO found for region: "${region}"`); + // console.log(`[FindOktmo] No OKTMO found for region: "${region}"`); return ''; }; @@ -1549,13 +1549,13 @@ const fillFromSearchResult = (result) => { if (autoOktmo) { dleSettings.selectedOktmo = autoOktmo; autoSelectedOktmo.value = true; // Помечаем как автовыбранный - console.log(`[FillFromSearchResult] Auto-selected OKTMO: ${autoOktmo}`); + // console.log(`[FillFromSearchResult] Auto-selected OKTMO: ${autoOktmo}`); } else { autoSelectedOktmo.value = false; } - console.log('[FillFromSearchResult] Filled address data:', dleSettings.addressData); - console.log('[FillFromSearchResult] Saved API result:', result); + // console.log('[FillFromSearchResult] Filled address data:', dleSettings.addressData); + // console.log('[FillFromSearchResult] Saved API result:', result); }; // Проверка адреса (повторный запрос для валидации) diff --git a/frontend/src/views/settings/WebSshSettingsView.vue b/frontend/src/views/settings/WebSshSettingsView.vue index 58f9e92..002d2c3 100644 --- a/frontend/src/views/settings/WebSshSettingsView.vue +++ b/frontend/src/views/settings/WebSshSettingsView.vue @@ -99,15 +99,15 @@ function validatePrivateKey(key) { if (!key) return false; const trimmed = key.trim(); if (!trimmed.startsWith('-----BEGIN OPENSSH PRIVATE KEY-----')) { - console.error('Ключ не начинается с -----BEGIN OPENSSH PRIVATE KEY-----'); + // console.error('Ключ не начинается с -----BEGIN OPENSSH PRIVATE KEY-----'); return false; } if (!trimmed.endsWith('-----END OPENSSH PRIVATE KEY-----')) { - console.error('Ключ не заканчивается на -----END OPENSSH PRIVATE KEY-----'); + // console.error('Ключ не заканчивается на -----END OPENSSH PRIVATE KEY-----'); return false; } if (trimmed.split('\n').length < 3) { - console.error('Ключ слишком короткий или не содержит переносов строк'); + // console.error('Ключ слишком короткий или не содержит переносов строк'); return false; } return true; @@ -124,15 +124,15 @@ const handleSubmit = async () => { } // Логирование ключа (только для отладки!) - console.log('SSH ключ (начало):', form.sshKey.slice(0, 40)); - console.log('SSH ключ (конец):', form.sshKey.slice(-40)); - console.log('Длина ключа:', form.sshKey.length); + // console.log('SSH ключ (начало):', form.sshKey.slice(0, 40)); + // console.log('SSH ключ (конец):', form.sshKey.slice(-40)); + // console.log('Длина ключа:', form.sshKey.length); // Логирование отправляемых данных (без самого ключа) - console.log('Данные для агента:', { - ...form, - sshKey: form.sshKey ? `[скрыто, длина: ${form.sshKey.length}]` : 'нет ключа' - }); + // console.log('Данные для агента:', { + // ...form, + // sshKey: form.sshKey ? `[скрыто, длина: ${form.sshKey.length}]` : 'нет ключа' + // }); isLoading.value = true; addLog('info', 'Запуск публикации...'); @@ -228,7 +228,7 @@ const checkConnectionStatus = async () => { ? `Подключено к ${status.domain}` : 'Не подключено'; } catch (error) { - console.error('Ошибка проверки статуса:', error); + // console.error('Ошибка проверки статуса:', error); } }; diff --git a/frontend/src/views/smartcontracts/DleModulesView.vue b/frontend/src/views/smartcontracts/DleModulesView.vue index 972e768..f719f69 100644 --- a/frontend/src/views/smartcontracts/DleModulesView.vue +++ b/frontend/src/views/smartcontracts/DleModulesView.vue @@ -467,7 +467,7 @@ async function addModule() { alert('✅ Модуль успешно добавлен!'); } catch (error) { - console.error('Ошибка при добавлении модуля:', error); + // console.error('Ошибка при добавлении модуля:', error); alert('❌ Ошибка при добавлении модуля: ' + error.message); } finally { isAdding.value = false; @@ -486,7 +486,7 @@ async function removeModule(moduleId) { alert('✅ Модуль успешно удален!'); } catch (error) { - console.error('Ошибка при удалении модуля:', error); + // console.error('Ошибка при удалении модуля:', error); alert('❌ Ошибка при удалении модуля: ' + error.message); } } @@ -495,7 +495,7 @@ async function removeModule(moduleId) { async function installAvailableModule(availableModule) { // Здесь должна быть логика установки модуля // Например, деплой модуля и добавление в DLE - console.log('Установка модуля:', availableModule); + // console.log('Установка модуля:', availableModule); alert(`Модуль "${availableModule.name}" будет установлен`); } diff --git a/frontend/src/views/smartcontracts/DleMultisigView.vue b/frontend/src/views/smartcontracts/DleMultisigView.vue index 7401e76..1aeb94c 100644 --- a/frontend/src/views/smartcontracts/DleMultisigView.vue +++ b/frontend/src/views/smartcontracts/DleMultisigView.vue @@ -454,7 +454,7 @@ async function createMultisigOperation() { alert('✅ Операция мультиподписи успешно создана!'); } catch (error) { - console.error('Ошибка при создании операции мультиподписи:', error); + // console.error('Ошибка при создании операции мультиподписи:', error); alert('❌ Ошибка при создании операции: ' + error.message); } finally { isCreating.value = false; @@ -471,7 +471,7 @@ async function signOperation(operationId, support) { alert('✅ Ваша подпись учтена!'); } catch (error) { - console.error('Ошибка при подписании операции:', error); + // console.error('Ошибка при подписании операции:', error); alert('❌ Ошибка при подписании: ' + error.message); } } @@ -486,7 +486,7 @@ async function executeOperation(operationId) { alert('✅ Операция успешно исполнена!'); } catch (error) { - console.error('Ошибка при исполнении операции:', error); + // console.error('Ошибка при исполнении операции:', error); alert('❌ Ошибка при исполнении операции: ' + error.message); } } @@ -498,7 +498,7 @@ async function loadOperations() { // Пока используем заглушку operations.value = []; } catch (error) { - console.error('Ошибка при загрузке операций:', error); + // console.error('Ошибка при загрузке операций:', error); } } @@ -520,7 +520,7 @@ function resetForm() { function viewOperationDetails(operationId) { // Открыть модальное окно с деталями операции - console.log('Просмотр деталей операции:', operationId); + // console.log('Просмотр деталей операции:', operationId); } onMounted(() => { diff --git a/frontend/src/views/smartcontracts/DleProposalsView.vue b/frontend/src/views/smartcontracts/DleProposalsView.vue index a362c06..7830030 100644 --- a/frontend/src/views/smartcontracts/DleProposalsView.vue +++ b/frontend/src/views/smartcontracts/DleProposalsView.vue @@ -497,7 +497,7 @@ async function createProposal() { alert('✅ Предложение успешно создано!'); } catch (error) { - console.error('Ошибка при создании предложения:', error); + // console.error('Ошибка при создании предложения:', error); alert('❌ Ошибка при создании предложения: ' + error.message); } finally { isCreating.value = false; @@ -555,7 +555,7 @@ async function voteForProposal(proposalId, support) { alert('✅ Ваш голос учтен!'); } catch (error) { - console.error('Ошибка при голосовании:', error); + // console.error('Ошибка при голосовании:', error); alert('❌ Ошибка при голосовании: ' + error.message); } } @@ -570,7 +570,7 @@ async function executeProposal(proposalId) { alert('✅ Предложение успешно исполнено!'); } catch (error) { - console.error('Ошибка при исполнении предложения:', error); + // console.error('Ошибка при исполнении предложения:', error); alert('❌ Ошибка при исполнении предложения: ' + error.message); } } @@ -582,7 +582,7 @@ async function loadProposals() { // Пока используем заглушку proposals.value = []; } catch (error) { - console.error('Ошибка при загрузке предложений:', error); + // console.error('Ошибка при загрузке предложений:', error); } } @@ -603,7 +603,7 @@ function resetForm() { function viewProposalDetails(proposalId) { // Открыть модальное окно с деталями предложения - console.log('Просмотр деталей предложения:', proposalId); + // console.log('Просмотр деталей предложения:', proposalId); } onMounted(() => { diff --git a/frontend/src/views/smartcontracts/ProposalsView.vue b/frontend/src/views/smartcontracts/ProposalsView.vue index d6cb599..5cce163 100644 --- a/frontend/src/views/smartcontracts/ProposalsView.vue +++ b/frontend/src/views/smartcontracts/ProposalsView.vue @@ -200,7 +200,7 @@ const createProposal = async () => { isCreatingProposal.value = true; // Здесь будет создание предложения в смарт-контракте - console.log('Создание предложения:', newProposal.value); + // console.log('Создание предложения:', newProposal.value); // Временная логика const proposal = { @@ -225,7 +225,7 @@ const createProposal = async () => { }; } catch (error) { - console.error('Ошибка создания предложения:', error); + // console.error('Ошибка создания предложения:', error); } finally { isCreatingProposal.value = false; } @@ -238,7 +238,7 @@ const signProposal = async (proposalId) => { isSigning.value = true; // Здесь будет подписание предложения в смарт-контракте - console.log('Подписание предложения:', proposalId); + // console.log('Подписание предложения:', proposalId); const proposal = proposals.value.find(p => p.id === proposalId); if (proposal) { @@ -247,7 +247,7 @@ const signProposal = async (proposalId) => { } } catch (error) { - console.error('Ошибка подписания предложения:', error); + // console.error('Ошибка подписания предложения:', error); } finally { isSigning.value = false; } @@ -260,7 +260,7 @@ const executeProposal = async (proposalId) => { isExecuting.value = true; // Здесь будет выполнение предложения в смарт-контракте - console.log('Выполнение предложения:', proposalId); + // console.log('Выполнение предложения:', proposalId); const proposal = proposals.value.find(p => p.id === proposalId); if (proposal) { @@ -268,7 +268,7 @@ const executeProposal = async (proposalId) => { } } catch (error) { - console.error('Ошибка выполнения предложения:', error); + // console.error('Ошибка выполнения предложения:', error); } finally { isExecuting.value = false; } diff --git a/frontend/src/views/smartcontracts/QuorumView.vue b/frontend/src/views/smartcontracts/QuorumView.vue index f090d37..bca3053 100644 --- a/frontend/src/views/smartcontracts/QuorumView.vue +++ b/frontend/src/views/smartcontracts/QuorumView.vue @@ -246,7 +246,7 @@ const updateSettings = async () => { isUpdating.value = true; // Здесь будет логика обновления настроек в смарт-контракте - console.log('Обновление настроек:', newSettings.value); + // console.log('Обновление настроек:', newSettings.value); // Временная логика const change = { @@ -291,7 +291,7 @@ const updateSettings = async () => { alert('Настройки успешно обновлены!'); } catch (error) { - console.error('Ошибка обновления настроек:', error); + // console.error('Ошибка обновления настроек:', error); alert('Ошибка при обновлении настроек'); } finally { isUpdating.value = false; diff --git a/frontend/src/views/smartcontracts/SettingsView.vue b/frontend/src/views/smartcontracts/SettingsView.vue index a98437b..5c1d29a 100644 --- a/frontend/src/views/smartcontracts/SettingsView.vue +++ b/frontend/src/views/smartcontracts/SettingsView.vue @@ -368,7 +368,7 @@ const saveMainSettings = async () => { isSaving.value = true; // Здесь будет логика сохранения основных настроек - console.log('Сохранение основных настроек:', mainSettings.value); + // console.log('Сохранение основных настроек:', mainSettings.value); // Временная логика await new Promise(resolve => setTimeout(resolve, 1000)); @@ -376,7 +376,7 @@ const saveMainSettings = async () => { alert('Основные настройки успешно сохранены!'); } catch (error) { - console.error('Ошибка сохранения основных настроек:', error); + // console.error('Ошибка сохранения основных настроек:', error); alert('Ошибка при сохранении настроек'); } finally { isSaving.value = false; @@ -390,7 +390,7 @@ const saveSecuritySettings = async () => { isSaving.value = true; // Здесь будет логика сохранения настроек безопасности - console.log('Сохранение настроек безопасности:', securitySettings.value); + // console.log('Сохранение настроек безопасности:', securitySettings.value); // Временная логика await new Promise(resolve => setTimeout(resolve, 1000)); @@ -398,7 +398,7 @@ const saveSecuritySettings = async () => { alert('Настройки безопасности успешно сохранены!'); } catch (error) { - console.error('Ошибка сохранения настроек безопасности:', error); + // console.error('Ошибка сохранения настроек безопасности:', error); alert('Ошибка при сохранении настроек безопасности'); } finally { isSaving.value = false; @@ -412,7 +412,7 @@ const saveNetworkSettings = async () => { isSaving.value = true; // Здесь будет логика сохранения настроек сети - console.log('Сохранение настроек сети:', networkSettings.value); + // console.log('Сохранение настроек сети:', networkSettings.value); // Временная логика await new Promise(resolve => setTimeout(resolve, 1000)); @@ -420,7 +420,7 @@ const saveNetworkSettings = async () => { alert('Настройки сети успешно сохранены!'); } catch (error) { - console.error('Ошибка сохранения настроек сети:', error); + // console.error('Ошибка сохранения настроек сети:', error); alert('Ошибка при сохранении настроек сети'); } finally { isSaving.value = false; @@ -463,7 +463,7 @@ const importSettings = (event) => { alert('Настройки успешно импортированы!'); } catch (error) { - console.error('Ошибка импорта настроек:', error); + // console.error('Ошибка импорта настроек:', error); alert('Ошибка при импорте настроек'); } }; @@ -513,7 +513,7 @@ const deleteDLE = () => { } // Здесь будет логика удаления DLE - console.log('Удаление DLE...'); + // console.log('Удаление DLE...'); alert('DLE будет удален. Это действие может занять некоторое время.'); }; diff --git a/frontend/src/views/smartcontracts/TokensView.vue b/frontend/src/views/smartcontracts/TokensView.vue index 00a4716..e7e39ff 100644 --- a/frontend/src/views/smartcontracts/TokensView.vue +++ b/frontend/src/views/smartcontracts/TokensView.vue @@ -245,7 +245,7 @@ const transferTokens = async () => { isTransferring.value = true; // Здесь будет логика трансфера токенов - console.log('Трансфер токенов:', transferData.value); + // console.log('Трансфер токенов:', transferData.value); // Временная логика const amount = parseFloat(transferData.value.amount); @@ -266,7 +266,7 @@ const transferTokens = async () => { alert('Токены успешно переведены!'); } catch (error) { - console.error('Ошибка трансфера токенов:', error); + // console.error('Ошибка трансфера токенов:', error); alert('Ошибка при переводе токенов'); } finally { isTransferring.value = false; @@ -280,7 +280,7 @@ const distributeTokens = async () => { isDistributing.value = true; // Здесь будет логика распределения токенов - console.log('Распределение токенов:', distributionData.value); + // console.log('Распределение токенов:', distributionData.value); // Временная логика const totalAmount = distributionData.value.recipients.reduce((sum, recipient) => { @@ -303,7 +303,7 @@ const distributeTokens = async () => { alert('Токены успешно распределены!'); } catch (error) { - console.error('Ошибка распределения токенов:', error); + // console.error('Ошибка распределения токенов:', error); alert('Ошибка при распределении токенов'); } finally { isDistributing.value = false; diff --git a/frontend/src/views/smartcontracts/TreasuryView.vue b/frontend/src/views/smartcontracts/TreasuryView.vue index 607f76a..f6f5276 100644 --- a/frontend/src/views/smartcontracts/TreasuryView.vue +++ b/frontend/src/views/smartcontracts/TreasuryView.vue @@ -380,7 +380,7 @@ const performDeposit = async () => { isProcessing.value = true; // Здесь будет логика депозита - console.log('Депозит:', depositData.value); + // console.log('Депозит:', depositData.value); // Временная логика const asset = assets.value.find(a => a.id === depositData.value.asset); @@ -414,7 +414,7 @@ const performDeposit = async () => { alert('Депозит успешно выполнен!'); } catch (error) { - console.error('Ошибка депозита:', error); + // console.error('Ошибка депозита:', error); alert('Ошибка при выполнении депозита'); } finally { isProcessing.value = false; @@ -428,7 +428,7 @@ const performWithdraw = async () => { isProcessing.value = true; // Здесь будет логика вывода - console.log('Вывод:', withdrawData.value); + // console.log('Вывод:', withdrawData.value); // Временная логика const asset = assets.value.find(a => a.id === withdrawData.value.asset); @@ -469,7 +469,7 @@ const performWithdraw = async () => { alert('Вывод успешно выполнен!'); } catch (error) { - console.error('Ошибка вывода:', error); + // console.error('Ошибка вывода:', error); alert('Ошибка при выполнении вывода'); } finally { isProcessing.value = false; diff --git a/webssh-agent/agent.js b/webssh-agent/agent.js index 1c49abf..dbc0fba 100644 --- a/webssh-agent/agent.js +++ b/webssh-agent/agent.js @@ -350,10 +350,10 @@ app.listen(PORT, 'localhost', () => { // Обработка необработанных ошибок process.on('uncaughtException', (error) => { log.error('Необработанная ошибка: ' + error.message); - console.error(error); + // console.error(error); }); process.on('unhandledRejection', (reason, promise) => { log.error('Необработанное отклонение промиса: ' + reason); - console.error(reason); + // console.error(reason); }); \ No newline at end of file