"""消息路由""" from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.ext.asyncio import AsyncSession from app.dependencies import get_db, get_current_user from app.models.user import User from app.schemas.message import MessageSend, MessagePage, MarkReadRequest from app.services.message_service import MessageService router = APIRouter() @router.get("/{conversation_id}/messages", response_model=dict) async def get_messages( conversation_id: str, before: str | None = Query(None), limit: int = Query(50, ge=1, le=100), user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取消息列表(游标分页)""" service = MessageService(db) try: return await service.get_messages(conversation_id, user.id, before, limit) except ValueError as e: raise HTTPException(status_code=403, detail=str(e)) @router.put("/{conversation_id}/messages/{message_id}/read") async def mark_as_read( conversation_id: str, message_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """标记消息已读""" service = MessageService(db) await service.mark_as_read(conversation_id, user.id, message_id) return {"success": True} @router.delete("/{conversation_id}/messages/{message_id}") async def delete_message( conversation_id: str, message_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """删除消息""" service = MessageService(db) try: await service.soft_delete(message_id, user.id) return {"success": True} except ValueError as e: raise HTTPException(status_code=403, detail=str(e))