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
|
2026-02-03 14:47:24 +08:00
|
|
|
|
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")
|
2026-02-03 14:47:24 +08:00
|
|
|
|
@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
|
|
|
|
"""获取好友列表"""
|
2026-02-03 14:47:24 +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({
|
2026-02-03 14:47:24 +08:00
|
|
|
|
"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": "删除成功"})
|