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 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: 'Ошибка сервера при получении сообщений диалога' });
}
};