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)
|
||||
|
||||
Reference in New Issue
Block a user