This commit is contained in:
denis 2025-05-26 12:32:53 +07:00
parent ee5222db82
commit 41a6664c32

View File

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