Ai_GirlFriend/lover/routers/friend.py

70 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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": "删除成功"})