feature/chat-system #2

Merged
trevor merged 28 commits from feature/chat-system into master 2025-11-17 06:05:49 +00:00
35 changed files with 11601 additions and 416 deletions
Showing only changes of commit 698c945cef - Show all commits

View File

@@ -1 +1 @@
1014690
1025432

View File

@@ -1,6 +1,6 @@
"""Сервисы для системы чата"""
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, and_, or_, update, delete
from sqlalchemy import select, and_, or_, update, delete, text
from sqlalchemy.orm import selectinload
from typing import Optional, List, Dict, Any
from datetime import datetime, timezone
@@ -191,7 +191,11 @@ class ChatMessageService:
telegram_message_id: int,
user_id: Optional[int] = None
) -> Optional[ChatMessage]:
"""Получить сообщение по telegram_message_id"""
"""
Получить сообщение по telegram_message_id
Ищет как по оригинальному telegram_message_id, так и в forwarded_message_ids
"""
# Сначала ищем по оригинальному telegram_message_id
query = select(ChatMessage).where(
ChatMessage.telegram_message_id == telegram_message_id
)
@@ -199,6 +203,31 @@ class ChatMessageService:
if user_id:
query = query.where(ChatMessage.user_id == user_id)
result = await session.execute(query)
message = result.scalar_one_or_none()
# Если нашли - возвращаем
if message:
return message
# Если не нашли - ищем в forwarded_message_ids
# Загружаем все недавние сообщения и ищем в них
query = select(ChatMessage).where(
ChatMessage.forwarded_message_ids.isnot(None)
).order_by(ChatMessage.created_at.desc()).limit(100)
result = await session.execute(query)
messages = result.scalars().all()
# Ищем сообщение, где telegram_message_id есть в forwarded_message_ids
for msg in messages:
if msg.forwarded_message_ids:
for user_tid, fwd_msg_id in msg.forwarded_message_ids.items():
if fwd_msg_id == telegram_message_id:
return msg
return None
result = await session.execute(query)
return result.scalar_one_or_none()