# Отображение метаданных пересланных сообщений ## Запрос пользователя "При пересылке сообщений как-то можно смотреть кто отправитель и во сколько сообщение было отправлено в оригинальном чате?" ## Проблема При пересылке сообщений в текущей реализации отображалось только: - ✅ Автор оригинального сообщения (`forwarded_from_author`) - ✅ ID оригинального сообщения (`forwarded_from_message_id`) **НЕ отображалось:** - ❌ Дата и время оригинального сообщения - ❌ Название чата, из которого переслано сообщение ## Решение Добавлены новые поля в модель `Message` и обновлен UI для отображения полной информации о пересылке. ### 1. Новые поля модели (backend/communications/models.py) ```python class Message(models.Model): # ... существующие поля # Флаги для специальных типов сообщений is_forwarded = models.BooleanField(default=False) forwarded_from_message_id = models.IntegerField(...) forwarded_from_author = models.ForeignKey(...) # 🆕 Новые поля forwarded_from_created_at = models.DateTimeField( null=True, blank=True, help_text="Дата создания исходного сообщения при пересылке" ) forwarded_from_chat_name = models.CharField( max_length=255, null=True, blank=True, help_text="Название исходного чата при пересылке" ) ``` ### 2. Обновлена логика пересылки (backend/api/v1/communications/views.py) ```python def forward_messages(request): # ... for original_msg in messages: # Получаем название исходного чата source_chat_name = original_msg.chat.name or "Чат" if original_msg.chat.type == "private": # Для личных чатов показываем "от кого" other_user = original_msg.chat.get_other_user(request.user) if other_user: source_chat_name = ( other_user.get_full_name() or other_user.username ) # Создаем переслаанное сообщение с метаданными forwarded_msg = Message.objects.create( chat=target_chat, author=request.user, content=forwarded_content, is_forwarded=True, forwarded_from_message_id=original_msg.id, forwarded_from_author=original_msg.author, forwarded_from_created_at=original_msg.created_at, # 🆕 forwarded_from_chat_name=source_chat_name, # 🆕 ) ``` ### 3. Обновлена сериализация WebSocket (backend/communications/consumers.py) ```python def serialize_message(m: Message) -> dict: # ... # Информация о пересылке if m.is_forwarded and m.forwarded_from_author: forwarded_data = { "author_id": m.forwarded_from_author.id, "author_name": ( m.forwarded_from_author.get_full_name() or m.forwarded_from_author.username ), "message_id": m.forwarded_from_message_id, } # 🆕 Добавляем дату оригинального сообщения if m.forwarded_from_created_at: forwarded_data["created_at"] = ( m.forwarded_from_created_at.strftime("%d.%m.%Y %H:%M") ) forwarded_data["created_ts"] = int( m.forwarded_from_created_at.timestamp() * 1000 ) # 🆕 Добавляем название исходного чата if m.forwarded_from_chat_name: forwarded_data["chat_name"] = m.forwarded_from_chat_name data["forwarded_from"] = forwarded_data ``` ### 4. Обновлен UI шаблон (backend/static/js/components/chatMessageTemplates.js) ```javascript export function createMessageElement(msg, options = {}) { // ... // 🆕 Формирование информации о пересылке let forwardedHTML = ''; if (msg.is_forwarded && msg.forwarded_from) { const fwd = msg.forwarded_from; const fwdAuthor = esc(fwd.author_name || 'Неизвестный'); const fwdTime = fwd.created_at ? fwd.created_at : ''; const fwdChat = fwd.chat_name ? ` из «${esc(fwd.chat_name)}»` : ''; forwardedHTML = `