1.9
This commit is contained in:
@@ -178,6 +178,21 @@ class ConversationService:
|
||||
)
|
||||
return result.scalars().first()
|
||||
|
||||
async def update_prefs(self, conv_id: str, user_id: str,
|
||||
is_pinned: bool | None = None,
|
||||
is_muted: bool | None = None) -> dict:
|
||||
"""更新会话个人偏好(置顶/免打扰)"""
|
||||
member = await self._get_member(conv_id, user_id)
|
||||
if not member:
|
||||
raise ValueError("无权访问该会话")
|
||||
if is_pinned is not None:
|
||||
member.is_pinned = is_pinned
|
||||
member.pinned_at = datetime.utcnow() if is_pinned else None
|
||||
if is_muted is not None:
|
||||
member.is_muted = is_muted
|
||||
await self.db.flush()
|
||||
return {"is_pinned": member.is_pinned, "is_muted": member.is_muted}
|
||||
|
||||
async def get_user_conversations(self, user_id: str) -> list[dict]:
|
||||
"""获取用户的会话列表"""
|
||||
result = await self.db.execute(
|
||||
@@ -217,9 +232,15 @@ class ConversationService:
|
||||
"last_message_at": conv.last_message_at,
|
||||
"unread_count": unread,
|
||||
"created_at": conv.created_at,
|
||||
"is_pinned": member.is_pinned,
|
||||
"is_muted": member.is_muted,
|
||||
})
|
||||
|
||||
conversations.sort(key=lambda x: x["last_message_at"] or x["created_at"], reverse=True)
|
||||
# 排序:置顶优先,组内按最后消息时间倒序
|
||||
conversations.sort(key=lambda x: (
|
||||
x["is_pinned"],
|
||||
x["last_message_at"] or x["created_at"],
|
||||
), reverse=True)
|
||||
return conversations
|
||||
|
||||
async def get_conversation_detail(self, conv_id: str, user_id: str) -> dict | None:
|
||||
|
||||
Reference in New Issue
Block a user