Интерактивные функции для Direct Messages
Что добавлено
Frontend
✅ При наведении на сообщение:- Обводка сообщения (фон
bg-[#2c2d32]) - Панель действий с кнопками:
- 😊 Добавить реакцию
- ↩️ Ответить
- 🗑️ Удалить (если прошло менее 5 минут)
- Выбор из 8 популярных эмодзи: ❤️ 👍 😂 😮 😢 🙏 👏 🔥
- Отображение количества реакций
- Подсветка реакций текущего пользователя
- Всплывающая подсказка с именами пользователей
- Превью сообщения, на которое отвечаете
- Возможность отменить ответ
- Отображение цепочки ответов (TODO: в будущем)
- Только свои сообщения
- В течение 5 минут после отправки
- Pending сообщения можно удалить всегда
Backend
Модели
✅ DirectMessage (backend/app/models/direct_message.py):
backend/app/models/reaction.py):
API Endpoints
✅ DELETE /api/dms/- Удаление DM сообщения
- Проверка авторства
- Ограничение: 5 минут
- WebSocket уведомление:
dm_deleted
- Добавление/удаление реакции на DM
- Toggle механика (повторный клик удаляет)
- WebSocket уведомление:
dm_reaction_updated
WebSocket
✅ handle_dm_message обновлен для поддержки:reply_to_id- ID сообщения, на которое отвечаем- Загрузка связанных данных (attachments, reactions, reply_to)
dm_deleted- сообщение удаленоdm_reaction_updated- реакция добавлена/удалена
Миграция базы данных
ВАЖНО: Перед запуском выполните миграцию!reply_to_idвdirect_messagesdm_message_idвreactions- Делает
message_idnullable вreactions - Добавляет constraints для валидации
Использование
Добавить реакцию
- Наведите на любое DM сообщение
- Нажмите 😊
- Выберите эмодзи из списка
- Повторный клик на реакцию удалит её
Ответить на сообщение
- Наведите на сообщение
- Нажмите ↩️
- Напишите ответ
- Можно отменить кнопкой X
Удалить сообщение
- Наведите на своё сообщение
- Если прошло менее 5 минут, появится 🗑️
- Нажмите для удаления
- Pending сообщения удаляются сразу
Технические детали
Frontend State
API Запросы
WebSocket События
Отправка с reply:Дизайн
Цвета
- Фон при наведении:
#2c2d32 - Панель действий:
#1e1f22с border#3f4147 - Реакции активные:
bg-blue-600/20 border-blue-600 - Реакции неактивные:
bg-[#2c2d32] border-[#3f4147]
Иконки (Lucide React)
- Smile - реакции
- Reply - ответы
- Trash2 - удаление
- Clock - pending статус
TODO (будущее)
- Отображение цепочки ответов в UI
- Расширенный выбор эмодзи (emoji picker)
- Редактирование DM сообщений
- Пересылка сообщений
- Закрепление сообщений
Измененные файлы
Frontend:
frontend/src/components/DirectMessageArea.tsx- основной UIfrontend/src/types/index.ts- типы (уже обновлены ранее)
Backend:
backend/app/models/direct_message.py- модель DMbackend/app/models/reaction.py- модель реакцийbackend/app/api/direct_messages.py- API эндпоинтыbackend/app/services/direct_message_service.py- сервисbackend/app/websocket/unified.py- WebSocket обработчикbackend/migrate_dm_interactive.py- миграция (НОВЫЙ)