diff --git a/backend/controllers/adminController.js b/backend/controllers/adminController.js index d551217..e62b9e1 100644 --- a/backend/controllers/adminController.js +++ b/backend/controllers/adminController.js @@ -1,3 +1,4 @@ +const mongoose = require('mongoose'); const User = require('../models/User'); const Conversation = require('../models/Conversation'); const Message = require('../models/Message'); @@ -209,6 +210,7 @@ const getAppStatistics = async (req, res) => { */ const getAllConversations = async (req, res) => { try { + console.log('[ADMIN] Запрос списка диалогов'); const { page = 1, limit = 20, userId } = req.query; const skip = (page - 1) * limit; @@ -217,9 +219,16 @@ const getAllConversations = async (req, res) => { // Фильтр по пользователю, если указан if (userId) { + console.log(`[ADMIN] Фильтр по пользователю: ${userId}`); + if (!mongoose.Types.ObjectId.isValid(userId)) { + console.log(`[ADMIN] Недопустимый формат ID пользователя: ${userId}`); + return res.status(400).json({ message: 'Недопустимый формат ID пользователя' }); + } filter.participants = userId; } + console.log(`[ADMIN] Поиск диалогов с фильтром:`, filter); + // Получаем диалоги с пагинацией и данными участников const conversations = await Conversation.find(filter) .populate('participants', 'name email photos') @@ -228,11 +237,20 @@ const getAllConversations = async (req, res) => { .limit(parseInt(limit)) .sort({ updatedAt: -1 }); + console.log(`[ADMIN] Найдено диалогов: ${conversations.length}`); + // Получаем общее количество диалогов для пагинации const total = await Conversation.countDocuments(filter); + // Добавляем дополнительную информацию о диалогах + const conversationsWithInfo = conversations.map(conv => { + const convObj = conv.toObject(); + convObj._id = convObj._id.toString(); // Преобразуем ObjectId в строку для безопасности + return convObj; + }); + res.json({ - conversations, + conversations: conversationsWithInfo, pagination: { page: parseInt(page), limit: parseInt(limit), @@ -241,7 +259,7 @@ const getAllConversations = async (req, res) => { } }); } catch (error) { - console.error('Ошибка при получении списка диалогов:', error); + console.error('[ADMIN] Ошибка при получении списка диалогов:', error); res.status(500).json({ message: 'Ошибка сервера при получении списка диалогов' }); } }; @@ -254,15 +272,27 @@ const getAllConversations = async (req, res) => { const getConversationMessages = 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 { page = 1, limit = 50 } = req.query; const skip = (page - 1) * limit; - // Проверяем существование диалога + // Проверяем существование диалога с подробным логированием + console.log(`[ADMIN] Поиск диалога с ID: ${conversationId}`); const conversation = await Conversation.findById(conversationId); + if (!conversation) { + console.log(`[ADMIN] Диалог с ID ${conversationId} не найден в базе данных`); return res.status(404).json({ message: 'Диалог не найден' }); } + console.log(`[ADMIN] Диалог найден, участники: ${conversation.participants}`); + // Получаем сообщения с пагинацией const messages = await Message.find({ conversationId }) .populate('sender', 'name email') @@ -270,11 +300,17 @@ const getConversationMessages = async (req, res) => { .limit(parseInt(limit)) .sort({ createdAt: -1 }); + console.log(`[ADMIN] Найдено сообщений: ${messages.length}`); + // Получаем общее количество сообщений для пагинации const total = await Message.countDocuments({ conversationId }); res.json({ messages, + conversation: { + id: conversation._id, + participants: conversation.participants + }, pagination: { page: parseInt(page), limit: parseInt(limit), @@ -283,7 +319,7 @@ const getConversationMessages = async (req, res) => { } }); } catch (error) { - console.error('Ошибка при получении сообщений диалога:', error); + console.error('[ADMIN] Ошибка при получении сообщений диалога:', error); res.status(500).json({ message: 'Ошибка сервера при получении сообщений диалога' }); } };