"""会话路由""" from fastapi import APIRouter, Depends, HTTPException 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.services.conversation_service import ConversationService router = APIRouter() @router.get("/", response_model=list[dict]) async def list_conversations( user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取会话列表""" service = ConversationService(db) return await service.get_user_conversations(user.id) @router.post("/", response_model=dict) async def create_conversation( req: ConversationCreate, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """创建会话(私聊或群聊)""" service = ConversationService(db) if req.type == "private": if len(req.member_ids) != 1: raise HTTPException(status_code=400, detail="私聊只能选择一个用户") conv = await service.get_or_create_private(user.id, req.member_ids[0]) else: conv = await service.create_group(user.id, req.name or "群聊", req.member_ids) detail = await service.get_conversation_detail(conv.id, user.id) return detail @router.post("/group", response_model=dict) async def create_group( req: GroupCreate, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """创建群聊""" service = ConversationService(db) conv = await service.create_group(user.id, req.name, req.member_ids, req.description) detail = await service.get_conversation_detail(conv.id, user.id) return detail @router.get("/{conversation_id}", response_model=dict) async def get_conversation( conversation_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取会话详情""" service = ConversationService(db) detail = await service.get_conversation_detail(conversation_id, user.id) if not detail: raise HTTPException(status_code=404, detail="会话不存在或无权访问") return detail