1.4
This commit is contained in:
@@ -115,6 +115,33 @@ class ConversationService:
|
||||
raise ValueError("群主不能退出,请先转让群主身份")
|
||||
member.left_at = datetime.utcnow()
|
||||
|
||||
async def dissolve_group(self, conv_id: str, user_id: str):
|
||||
"""解散群聊(仅群主)"""
|
||||
member = await self._get_member(conv_id, user_id)
|
||||
if not member:
|
||||
raise ValueError("你不在该群中")
|
||||
if member.role != "owner":
|
||||
raise ValueError("只有群主可以解散群聊")
|
||||
|
||||
# 验证会话存在且为群聊
|
||||
conv_result = await self.db.execute(
|
||||
select(Conversation).where(Conversation.id == conv_id)
|
||||
)
|
||||
conv = conv_result.scalars().first()
|
||||
if not conv or conv.type != "group":
|
||||
raise ValueError("群聊不存在")
|
||||
|
||||
# 软删除所有成员(设置 left_at)
|
||||
members_result = await self.db.execute(
|
||||
select(ConversationMember).where(
|
||||
ConversationMember.conversation_id == conv_id,
|
||||
ConversationMember.left_at.is_(None),
|
||||
)
|
||||
)
|
||||
now = datetime.utcnow()
|
||||
for m in members_result.scalars().all():
|
||||
m.left_at = now
|
||||
|
||||
async def update_member_role(self, conv_id: str, user_id: str, target_user_id: str, role: str):
|
||||
"""修改成员角色(仅群主)"""
|
||||
member = await self._get_member(conv_id, user_id)
|
||||
|
||||
@@ -85,6 +85,23 @@ class MessageService:
|
||||
select(User).where(User.id == msg.sender_id)
|
||||
)
|
||||
sender = sender_result.scalars().first()
|
||||
|
||||
# 获取被引用消息的信息
|
||||
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()
|
||||
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_to_sender_name = reply_sender.username if reply_sender else None
|
||||
|
||||
message_list.append({
|
||||
"id": msg.id,
|
||||
"conversation_id": msg.conversation_id,
|
||||
@@ -94,6 +111,8 @@ class MessageService:
|
||||
"type": msg.type,
|
||||
"content": msg.content,
|
||||
"reply_to_id": msg.reply_to_id,
|
||||
"reply_to_content": reply_to_content,
|
||||
"reply_to_sender_name": reply_to_sender_name,
|
||||
"is_deleted": msg.is_deleted,
|
||||
"created_at": msg.created_at,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user