1.5
This commit is contained in:
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user