From c2791255ee066ca6f1c5645f04dae17d68d79cda Mon Sep 17 00:00:00 2001 From: Professional Date: Mon, 26 May 2025 13:27:06 +0700 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/controllers/adminController.js | 34 +++++++++++++++++++++ backend/routes/adminRoutes.js | 1 + src/views/admin/AdminConversationDetail.vue | 26 ++++++---------- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/backend/controllers/adminController.js b/backend/controllers/adminController.js index e62b9e1..9511240 100644 --- a/backend/controllers/adminController.js +++ b/backend/controllers/adminController.js @@ -324,11 +324,45 @@ const getConversationMessages = async (req, res) => { } }; +/** + * @desc Получить диалог по ID + * @route GET /api/admin/conversations/:id + * @access Admin + */ +const getConversationById = async (req, res) => { + try { + const conversationId = req.params.id; + console.log(`[ADMIN] Запрос диалога с ID: ${conversationId}`); + + if (!mongoose.Types.ObjectId.isValid(conversationId)) { + console.log(`[ADMIN] Недопустимый формат ID диалога: ${conversationId}`); + return res.status(400).json({ message: 'Недопустимый формат ID диалога' }); + } + + // Получаем диалог с данными участников + const conversation = await Conversation.findById(conversationId) + .populate('participants', 'name email photos') + .populate('lastMessage'); + + if (!conversation) { + console.log(`[ADMIN] Диалог с ID ${conversationId} не найден в базе данных`); + return res.status(404).json({ message: 'Диалог не найден' }); + } + + console.log(`[ADMIN] Диалог найден, возвращаем данные`); + res.json(conversation); + } catch (error) { + console.error('[ADMIN] Ошибка при получении диалога:', error); + res.status(500).json({ message: 'Ошибка сервера при получении диалога' }); + } +}; + module.exports = { getAllUsers, getUserDetails, toggleUserActive, getAppStatistics, getAllConversations, + getConversationById, getConversationMessages }; \ No newline at end of file diff --git a/backend/routes/adminRoutes.js b/backend/routes/adminRoutes.js index b4eb23a..71ead9c 100644 --- a/backend/routes/adminRoutes.js +++ b/backend/routes/adminRoutes.js @@ -29,6 +29,7 @@ router.put('/reports/:id', updateReportStatus); // Маршруты для просмотра диалогов и сообщений router.get('/conversations', adminController.getAllConversations); +router.get('/conversations/:id', adminController.getConversationById); // Новый маршрут для получения диалога по ID router.get('/conversations/:id/messages', adminController.getConversationMessages); module.exports = router; \ No newline at end of file diff --git a/src/views/admin/AdminConversationDetail.vue b/src/views/admin/AdminConversationDetail.vue index 534a6a1..e396908 100644 --- a/src/views/admin/AdminConversationDetail.vue +++ b/src/views/admin/AdminConversationDetail.vue @@ -151,30 +151,20 @@ export default { error.value = null; try { - const token = localStorage.getItem('userToken'); // Исправлено с 'token' на 'userToken' + const token = localStorage.getItem('userToken'); - // Здесь мы используем маршрут для получения данных о диалоге - // Это должен быть запрос к API, который возвращает данные о конкретном диалоге - // На бэкенде такого маршрута может не быть, поэтому используем маршрут для получения списка диалогов - // и фильтруем результаты на клиенте + // Прямой запрос к диалогу по его ID const response = await axios.get( - `/api/admin/conversations`, + `/api/admin/conversations/${props.id}`, { - params: { userId: props.id, limit: 1 }, // Временное решение, по API нужно реализовать маршрут GET /api/admin/conversations/:id headers: { Authorization: `Bearer ${token}` } } ); - if (response.data.conversations && response.data.conversations.length > 0) { - conversation.value = response.data.conversations.find(c => c._id === props.id); - - if (!conversation.value) { - // Если не нашли диалог по ID, возьмем первый из ответа (временное решение) - conversation.value = response.data.conversations[0]; - } - + if (response.data) { + conversation.value = response.data; // Загружаем сообщения для диалога loadMessages(); } else { @@ -182,7 +172,11 @@ export default { } } catch (err) { console.error('Ошибка при загрузке данных диалога:', err); - error.value = 'Ошибка при загрузке информации о диалоге. Пожалуйста, попробуйте позже.'; + if (err.response && err.response.status === 404) { + error.value = 'Диалог не найден. Проверьте ID диалога.'; + } else { + error.value = 'Ошибка при загрузке информации о диалоге. Пожалуйста, попробуйте позже.'; + } } finally { loading.value = false; }