from fastapi import APIRouter, Depends from lover.deps import get_current_user, AuthedUser from lover.response import success_response from lover.db import get_db from sqlalchemy.orm import Session from sqlalchemy import and_, or_ from lover.models import FriendRelation, User router = APIRouter() @router.get("/api/friend/index") @router.post("/api/friend/index") def get_friend_index(user: AuthedUser = Depends(get_current_user), db: Session = Depends(get_db)): """获取好友列表""" # 查询当前用户的好友关系(双向:user_id 或 friend_id 为当前用户,且 status=1 表示已通过) friend_relations = db.query(FriendRelation).filter( and_( or_( FriendRelation.user_id == user.id, FriendRelation.friend_id == user.id ), FriendRelation.status == "1" ) ).all() friend_ids = [] result = [] for rel in friend_relations: # 确定好友的 user_id(不是自己) fid = rel.friend_id if rel.user_id == user.id else rel.user_id friend_ids.append(fid) # 查询好友用户信息 friend_users = db.query(User).filter(User.id.in_(friend_ids)).all() if friend_ids else [] user_map = {u.id: u for u in friend_users} for rel in friend_relations: fid = rel.friend_id if rel.user_id == user.id else rel.user_id friend_user = user_map.get(fid) if not friend_user: continue result.append({ "friend_id": fid, "friend": { "id": friend_user.id, "nickname": friend_user.nickname, "avatar": friend_user.avatar, "user_number": str(friend_user.id), # 前端期望 user_number "open_id": "", # 小程序 open_id,如有需要可补充字段 }, "intimacy": rel.intimacy or 0, "intimacy_level": rel.intimacy_level or 0, "is_online": False, # 默认离线,前端会单独调用在线状态接口 }) return success_response({ "data": result, "total": len(result) }) @router.post("/api/friend/add") def add_friend(user: AuthedUser = Depends(get_current_user)): """添加好友""" return success_response({"message": "添加成功"}) @router.delete("/api/friend/delete") def delete_friend(user: AuthedUser = Depends(get_current_user)): """删除好友""" return success_response({"message": "删除成功"})