This commit is contained in:
2026-06-14 11:16:42 +08:00
parent ca39190ad7
commit c9fc87cd89
35 changed files with 1480 additions and 18 deletions
+22 -1
View File
@@ -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: