1.0
This commit is contained in:
@@ -5,7 +5,10 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.dependencies import get_db, get_current_user
|
||||
from app.models.user import User
|
||||
from app.schemas.conversation import ConversationCreate, ConversationRead, ConversationDetail, GroupCreate
|
||||
from app.schemas.conversation import (
|
||||
ConversationCreate, ConversationRead, ConversationDetail,
|
||||
GroupCreate, GroupUpdate, MemberAdd, RoleUpdate,
|
||||
)
|
||||
from app.services.conversation_service import ConversationService
|
||||
|
||||
router = APIRouter()
|
||||
@@ -65,3 +68,83 @@ async def get_conversation(
|
||||
if not detail:
|
||||
raise HTTPException(status_code=404, detail="会话不存在或无权访问")
|
||||
return detail
|
||||
|
||||
|
||||
@router.put("/{conversation_id}")
|
||||
async def update_group(
|
||||
conversation_id: str,
|
||||
req: GroupUpdate,
|
||||
user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""更新群聊信息(群主/管理员)"""
|
||||
service = ConversationService(db)
|
||||
try:
|
||||
await service.update_group(conversation_id, user.id, **req.model_dump(exclude_none=True))
|
||||
return {"success": True, "message": "群信息已更新"}
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
|
||||
|
||||
@router.post("/{conversation_id}/members")
|
||||
async def add_members(
|
||||
conversation_id: str,
|
||||
req: MemberAdd,
|
||||
user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""添加群成员(群主/管理员)"""
|
||||
service = ConversationService(db)
|
||||
try:
|
||||
await service.add_members(conversation_id, user.id, req.user_ids)
|
||||
return {"success": True, "message": "成员已添加"}
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
|
||||
|
||||
@router.delete("/{conversation_id}/members/{target_user_id}")
|
||||
async def remove_member(
|
||||
conversation_id: str,
|
||||
target_user_id: str,
|
||||
user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""移除群成员(群主/管理员)"""
|
||||
service = ConversationService(db)
|
||||
try:
|
||||
await service.remove_member(conversation_id, user.id, target_user_id)
|
||||
return {"success": True, "message": "成员已移除"}
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
|
||||
|
||||
@router.post("/{conversation_id}/leave")
|
||||
async def leave_group(
|
||||
conversation_id: str,
|
||||
user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""退出群聊"""
|
||||
service = ConversationService(db)
|
||||
try:
|
||||
await service.leave_group(conversation_id, user.id)
|
||||
return {"success": True, "message": "已退出群聊"}
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
|
||||
|
||||
@router.put("/{conversation_id}/members/{target_user_id}/role")
|
||||
async def update_member_role(
|
||||
conversation_id: str,
|
||||
target_user_id: str,
|
||||
req: RoleUpdate,
|
||||
user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""修改群成员角色(群主)"""
|
||||
service = ConversationService(db)
|
||||
try:
|
||||
await service.update_member_role(conversation_id, user.id, target_user_id, req.role)
|
||||
return {"success": True, "message": "角色已更新"}
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
|
||||
Reference in New Issue
Block a user