Ai_GirlFriend/lover/routers/friend.py

70 lines
2.5 KiB
Python
Raw Normal View History

2026-02-02 20:08:28 +08:00
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
2026-02-02 20:08:28 +08:00
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)):
2026-02-02 20:08:28 +08:00
"""获取好友列表"""
# 查询当前用户的好友关系双向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, # 默认离线,前端会单独调用在线状态接口
})
2026-02-02 20:08:28 +08:00
return success_response({
"data": result,
"total": len(result)
2026-02-02 20:08:28 +08:00
})
@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": "删除成功"})