This commit is contained in:
2026-06-13 11:02:47 +08:00
parent 318ddd85a5
commit 68678304ff
15 changed files with 659 additions and 78 deletions
+26 -13
View File
@@ -77,29 +77,42 @@ class MessageService:
has_more = len(messages) > limit
messages = messages[:limit]
# 获取发送者信息
# 批量预加载发送者信息
from app.models.user import User
sender_ids = list(set(m.sender_id for m in messages))
senders_result = await self.db.execute(
select(User).where(User.id.in_(sender_ids))
)
senders_map = {u.id: u for u in senders_result.scalars().all()}
# 批量预加载被引用消息
reply_to_ids = list(set(m.reply_to_id for m in messages if m.reply_to_id))
reply_msgs_map: dict[str, Message] = {}
if reply_to_ids:
reply_result = await self.db.execute(
select(Message).where(Message.id.in_(reply_to_ids))
)
reply_msgs_map = {m.id: m for m in reply_result.scalars().all()}
# 批量预加载被引用消息的发送者
reply_sender_ids = list(set(rm.sender_id for rm in reply_msgs_map.values()))
reply_senders_result = await self.db.execute(
select(User).where(User.id.in_(reply_sender_ids))
)
reply_senders_map = {u.id: u for u in reply_senders_result.scalars().all()}
message_list = []
for msg in reversed(messages):
sender_result = await self.db.execute(
select(User).where(User.id == msg.sender_id)
)
sender = sender_result.scalars().first()
sender = senders_map.get(msg.sender_id)
# 获取被引用消息的信息
reply_to_content = None
reply_to_sender_name = None
if msg.reply_to_id:
reply_msg_result = await self.db.execute(
select(Message).where(Message.id == msg.reply_to_id)
)
reply_msg = reply_msg_result.scalars().first()
reply_msg = reply_msgs_map.get(msg.reply_to_id)
if reply_msg:
reply_to_content = reply_msg.content[:200] if reply_msg.content else None
reply_sender_result = await self.db.execute(
select(User).where(User.id == reply_msg.sender_id)
)
reply_sender = reply_sender_result.scalars().first()
reply_sender = reply_senders_map.get(reply_msg.sender_id)
reply_to_sender_name = reply_sender.username if reply_sender else None
message_list.append({