From 4a96bad268237486a52d6069806228b6bd3262a4 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 2 Apr 2025 14:21:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=B0=D1=88=D0=B5=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B8=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/routes/auth.js | 40 +- backend/routes/chat.js | 29 +- backend/scripts/check-ollama-models.js | 4 +- backend/services/ai-assistant.js | 2 +- frontend/src/composables/useAuth.js | 11 +- frontend/src/views/HomeView.vue | 112 ++--- frontend/src/views/HomeView.vue.bak | 663 ------------------------- 7 files changed, 82 insertions(+), 779 deletions(-) delete mode 100644 frontend/src/views/HomeView.vue.bak diff --git a/backend/routes/auth.js b/backend/routes/auth.js index 32952f2..5a7cb0d 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -554,31 +554,35 @@ router.post('/link-identity', async (req, res) => { }); // Проверка статуса аутентификации -router.get('/check', (req, res) => { +router.get('/check', async (req, res) => { try { console.log('Сессия при проверке:', req.session); - const authenticated = req.session.authenticated || req.session.isAuthenticated || false; - const userId = req.session.userId; - const authType = req.session.authType; - const address = req.session.address; - const telegramId = req.session.telegramId; - const email = req.session.email; - - // Проверяем, является ли пользователь администратором - const isAdmin = req.session.userRole === 'admin'; + // Если пользователь не аутентифицирован, возвращаем базовую информацию + if (!req.session.authenticated) { + return res.json({ + authenticated: false, + userId: null, + authType: null, + address: null, + telegramId: null, + email: null, + isAdmin: false + }); + } + // Возвращаем полную информацию об аутентифицированном пользователе res.json({ - authenticated, - userId, - isAdmin, - authType, - address, - telegramId, - email + authenticated: true, + userId: req.session.userId, + authType: req.session.authType, + address: req.session.address, + telegramId: req.session.telegramId, + email: req.session.email, + isAdmin: req.session.isAdmin || false }); } catch (error) { - console.error('Error checking auth:', error); + console.error('Error checking auth status:', error); res.status(500).json({ error: 'Internal server error' }); } }); diff --git a/backend/routes/chat.js b/backend/routes/chat.js index aa35ef1..495dff1 100644 --- a/backend/routes/chat.js +++ b/backend/routes/chat.js @@ -44,19 +44,29 @@ async function processGuestMessages(userId, guestId) { for (const guestMessage of guestMessages) { console.log(`Processing guest message ID ${guestMessage.id}: ${guestMessage.content}`); + // Проверяем существование гостевого сообщения перед созданием связанного сообщения + const checkGuestMessage = await db.query( + 'SELECT id FROM guest_messages WHERE id = $1', + [guestMessage.id] + ); + + if (checkGuestMessage.rows.length === 0) { + console.log(`Guest message ${guestMessage.id} no longer exists, skipping`); + continue; + } + // Сохраняем сообщение пользователя const userMessageResult = await db.query( `INSERT INTO messages - (conversation_id, content, sender_type, role, guest_message_id, channel, created_at) + (conversation_id, content, sender_type, role, channel, created_at) VALUES - ($1, $2, $3, $4, $5, $6, $7) + ($1, $2, $3, $4, $5, $6) RETURNING *`, [ conversation.id, guestMessage.content, 'user', 'user', - guestMessage.id, 'web', guestMessage.created_at ] @@ -73,28 +83,27 @@ async function processGuestMessages(userId, guestId) { // Сохраняем ответ от ИИ const aiMessageResult = await db.query( `INSERT INTO messages - (conversation_id, content, sender_type, role, guest_message_id, channel, created_at) + (conversation_id, content, sender_type, role, channel, created_at) VALUES - ($1, $2, $3, $4, $5, $6, $7) + ($1, $2, $3, $4, $5, $6) RETURNING *`, [ conversation.id, aiResponse, 'assistant', 'assistant', - guestMessage.id, 'web', new Date() ] ); console.log(`Saved AI response with ID ${aiMessageResult.rows[0].id}`); + + // Удаляем обработанное гостевое сообщение + await db.query('DELETE FROM guest_messages WHERE id = $1', [guestMessage.id]); + console.log(`Deleted processed guest message ${guestMessage.id}`); } - // Удаляем гостевые сообщения, так как они уже обработаны - await db.query('DELETE FROM guest_messages WHERE guest_id = $1', [guestId]); - console.log('Deleted processed guest messages'); - return { success: true, message: `Processed ${guestMessages.length} guest messages`, diff --git a/backend/scripts/check-ollama-models.js b/backend/scripts/check-ollama-models.js index c7410f6..d9ba28d 100644 --- a/backend/scripts/check-ollama-models.js +++ b/backend/scripts/check-ollama-models.js @@ -18,8 +18,8 @@ async function checkOllamaModels() { }); console.log('\nДля использования конкретной модели, укажите ее в .env файле:'); - console.log('OLLAMA_EMBEDDINGS_MODEL=mistral'); - console.log('OLLAMA_MODEL=mistral'); + console.log('OLLAMA_EMBEDDINGS_MODEL=mistral:7b-instruct-q4_K_M'); + console.log('OLLAMA_MODEL=mistral:7b-instruct-q4_K_M'); } else { console.log('Не удалось получить список моделей'); } diff --git a/backend/services/ai-assistant.js b/backend/services/ai-assistant.js index 4a54ab1..0f5cf84 100644 --- a/backend/services/ai-assistant.js +++ b/backend/services/ai-assistant.js @@ -7,7 +7,7 @@ const fetch = require('node-fetch'); class AIAssistant { constructor() { this.baseUrl = process.env.OLLAMA_BASE_URL || 'http://localhost:11434'; - this.defaultModel = process.env.OLLAMA_MODEL || 'mistral'; + this.defaultModel = process.env.OLLAMA_MODEL || 'mistral:7b-instruct-q4_K_M'; } // Создание экземпляра ChatOllama с нужными параметрами diff --git a/frontend/src/composables/useAuth.js b/frontend/src/composables/useAuth.js index e7bfcf2..819a9a4 100644 --- a/frontend/src/composables/useAuth.js +++ b/frontend/src/composables/useAuth.js @@ -6,18 +6,18 @@ export function useAuth() { const authType = ref(null); const userId = ref(null); const address = ref(null); - const telegramInfo = ref(null); - const isAdmin = ref(false); const telegramId = ref(null); + const isAdmin = ref(false); const email = ref(null); - const updateAuth = ({ authenticated, authType: newAuthType, userId: newUserId, address: newAddress, telegramId: newTelegramId, isAdmin: newIsAdmin }) => { + const updateAuth = ({ authenticated, authType: newAuthType, userId: newUserId, address: newAddress, telegramId: newTelegramId, isAdmin: newIsAdmin, email: newEmail }) => { isAuthenticated.value = authenticated; authType.value = newAuthType; userId.value = newUserId; address.value = newAddress; telegramId.value = newTelegramId; isAdmin.value = newIsAdmin; + email.value = newEmail; }; const checkAuth = async () => { @@ -49,6 +49,7 @@ export function useAuth() { userId: null, address: null, telegramId: null, + email: null, isAdmin: false }); @@ -58,9 +59,6 @@ export function useAuth() { localStorage.removeItem('address'); localStorage.removeItem('isAdmin'); - // Перезагружаем страницу - window.location.reload(); - return { success: true }; } catch (error) { console.error('Error disconnecting:', error); @@ -77,7 +75,6 @@ export function useAuth() { authType, userId, address, - telegramInfo, isAdmin, telegramId, email, diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue index a11aaa0..ee48355 100644 --- a/frontend/src/views/HomeView.vue +++ b/frontend/src/views/HomeView.vue @@ -182,14 +182,14 @@
-
-
- -
-
+ +
@@ -551,6 +551,29 @@ const cancelTelegramAuth = () => { } }; +// Загружаем сообщения при изменении аутентификации +watch(() => isAuthenticated.value, async (newValue, oldValue) => { + // Если пользователь только что авторизовался + if (newValue && !oldValue) { + try { + // Связываем гостевые сообщения только один раз при первой авторизации + const response = await api.post('/api/chat/link-guest-messages'); + console.log('Guest messages linking response:', response.data); + } catch (linkError) { + console.error('Error linking guest messages:', linkError); + } + } + + // В любом случае перезагружаем сообщения + messages.value = []; + offset.value = 0; + hasMoreMessages.value = true; + await loadMoreMessages(); + + await nextTick(); + scrollToBottom(); +}); + // Обработчик для Telegram аутентификации const handleTelegramAuth = async () => { try { @@ -569,38 +592,19 @@ const handleTelegramAuth = async () => { console.log('Проверка авторизации:', response.data); if (response.data.authenticated) { - // Обновляем состояние аутентификации + // Обновляем состояние аутентификации с полным набором данных auth.updateAuth({ isAuthenticated: true, + authenticated: true, authType: response.data.authType, userId: response.data.userId, - telegramId: response.data.telegramId + telegramId: response.data.telegramId, + isAdmin: response.data.isAdmin, + address: response.data.address }); console.log('Telegram authentication successful:', response.data); - // Обновляем все данные пользователя - await auth.checkAuth(); - - // Загружаем историю сообщений - messages.value = []; - offset.value = 0; - hasMoreMessages.value = true; - await loadMoreMessages(); - - // Связываем гостевые сообщения - try { - await api.post('/api/chat/link-guest-messages'); - console.log('Guest messages linked to authenticated user'); - - // Перезагружаем сообщения после связывания - messages.value = []; - offset.value = 0; - await loadMoreMessages(); - } catch (linkError) { - console.error('Error linking guest messages:', linkError); - } - // Обновляем баланс токенов await updateBalances(); @@ -697,35 +701,6 @@ const loadMoreMessages = async () => { } }; -// Загружаем сообщения при изменении аутентификации -watch(() => isAuthenticated.value, async (newValue, oldValue) => { - // Если пользователь только что авторизовался - if (newValue && !oldValue) { - try { - // Связываем гостевые сообщения (копируем из guest_messages в messages) - await api.post('/api/chat/link-guest-messages'); - console.log('Guest messages linked to authenticated user'); - - // Перезагружаем все сообщения - messages.value = []; - offset.value = 0; - hasMoreMessages.value = true; - await loadMoreMessages(); - - await nextTick(); - scrollToBottom(); - } catch (linkError) { - console.error('Error linking guest messages:', linkError); - } - } else if (!newValue && oldValue) { - // Если пользователь вышел из системы, загружаем только гостевые сообщения - messages.value = []; - offset.value = 0; - hasMoreMessages.value = true; - await loadMoreMessages(); // Загрузит гостевые сообщения, если они есть - } -}); - // Функция для подключения кошелька const handleWalletAuth = async () => { if (isConnecting.value || isAuthenticated.value) return; @@ -739,25 +714,6 @@ const handleWalletAuth = async () => { // Обновляем состояние авторизации await auth.checkAuth(); - // Загружаем историю сообщений - messages.value = []; - offset.value = 0; - hasMoreMessages.value = true; - await loadMoreMessages(); - - // Связываем гостевые сообщения - try { - await api.post('/api/chat/link-guest-messages'); - console.log('Guest messages linked to authenticated user'); - - // Перезагружаем сообщения после связывания - messages.value = []; - offset.value = 0; - await loadMoreMessages(); - } catch (linkError) { - console.error('Error linking guest messages:', linkError); - } - // Добавляем небольшую задержку перед сбросом состояния isConnecting setTimeout(() => { isConnecting.value = false; diff --git a/frontend/src/views/HomeView.vue.bak b/frontend/src/views/HomeView.vue.bak deleted file mode 100644 index 0b830bb..0000000 --- a/frontend/src/views/HomeView.vue.bak +++ /dev/null @@ -1,663 +0,0 @@ - - -