"""好友路由""" 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.friend import FriendRequestCreate, FriendRead, FriendRequestRead, RemarkUpdate from app.services.friend_service import FriendService router = APIRouter() @router.get("/", response_model=list[dict]) async def list_friends( user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取好友列表""" service = FriendService(db) return await service.get_friends(user.id) @router.get("/requests", response_model=list[dict]) async def list_requests( user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取待处理的好友请求""" service = FriendService(db) return await service.get_pending_requests(user.id) @router.post("/request") async def send_friend_request( req: FriendRequestCreate, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """发送好友请求""" service = FriendService(db) try: await service.send_request(user.id, req.to_user_id, req.message) return {"success": True, "message": "好友请求已发送"} except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.post("/add-direct") async def add_friend_direct( req: FriendRequestCreate, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """直接添加好友(跳过验证)""" service = FriendService(db) try: await service.add_direct(user.id, req.to_user_id) return {"success": True, "message": "已添加好友"} except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.put("/{friend_user_id}/remark") async def update_friend_remark( friend_user_id: str, req: RemarkUpdate, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """修改好友备注""" service = FriendService(db) try: await service.update_remark(user.id, friend_user_id, req.remark) return {"success": True, "message": "备注已更新"} except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.put("/request/{request_id}/accept") async def accept_friend_request( request_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """接受好友请求""" service = FriendService(db) try: await service.accept_request(request_id, user.id) return {"success": True, "message": "已添加好友"} except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.put("/request/{request_id}/reject") async def reject_friend_request( request_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """拒绝好友请求""" service = FriendService(db) try: await service.reject_request(request_id, user.id) return {"success": True, "message": "已拒绝"} except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.delete("/{friend_id}") async def remove_friend( friend_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """删除好友""" service = FriendService(db) await service.remove_friend(user.id, friend_id) return {"success": True, "message": "已删除好友"}