70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
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": "删除成功"})
|