This commit is contained in:
Professional 2025-05-26 13:27:06 +07:00
parent 41a6664c32
commit c2791255ee
3 changed files with 45 additions and 16 deletions

View File

@ -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
};

View File

@ -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;

View File

@ -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;
}