ComfyUI-Ranking-API / router_users_social.py
ZHIWEI666's picture
Upload 19 files
f68778c verified
# router_users_social.py
# ==========================================
# 🤝 用户社交路由模块
# ==========================================
# 作用:处理用户间的社交互动(关注/取关)和隐私设置
# 关联文件:
# - 数据库连接.py (JSON数据库读写 users.json)
# - notifications.py (发送关注通知)
# - models.py (FollowToggle, PrivacySettings 数据模型)
# - router_users.py (主路由聚合此模块)
# 前端调用:
# - 个人中心视图.js (关注/取关按钮)
# - 个人设置表单组件.js (隐私设置)
# ==========================================
from fastapi import APIRouter, HTTPException
import 数据库连接 as db
from notifications import add_notification
from models import FollowToggle, PrivacySettings
# 创建子路由实例
router = APIRouter()
# ==========================================
# 👥 关注/取消关注接口
# ==========================================
# 作用:用户A关注或取消关注用户B
# 关联:
# - users.json 的 followers 和 following 字段
# - notifications.py 的 add_notification() (发送关注通知)
# 数据结构:
# - 用户A.following: 存储A关注的人的账号列表
# - 用户B.followers: 存储关注B的人的账号列表
# 前端调用:
# - 个人中心视图.js 的 handleFollowToggle()
@router.post("/api/users/follow")
async def toggle_follow(follow: FollowToggle):
"""
关注/取消关注接口
请求参数:(FollowToggle 模型)
- user_id: 当前操作用户的账号(执行关注动作的人)
- target_account: 被关注/取关的目标用户账号
- is_active: True=关注, False=取消关注
"""
# 加载用户数据库
users_db = db.load_data("users.json", default_data={})
# ========== 用户存在性校验 ==========
if follow.target_account not in users_db or follow.user_id not in users_db:
raise HTTPException(status_code=404, detail="用户不存在")
# 获取双方的关注/粉丝列表
# setdefault 确保字段存在,不存在则初始化为空列表
target_followers = users_db[follow.target_account].setdefault("followers", [])
current_following = users_db[follow.user_id].setdefault("following", [])
# ========== 执行关注或取关操作 ==========
if follow.is_active:
# === 关注操作 ===
# 将当前用户添加到目标用户的粉丝列表
if follow.user_id not in target_followers:
target_followers.append(follow.user_id)
# 发送关注通知给目标用户
# 关联:notifications.py 的 add_notification()
add_notification(follow.target_account, {
"type": "follow",
"from_user": follow.user_id
})
# 将目标用户添加到当前用户的关注列表
if follow.target_account not in current_following:
current_following.append(follow.target_account)
else:
# === 取消关注操作 ===
# 从目标用户的粉丝列表中移除当前用户
if follow.user_id in target_followers:
target_followers.remove(follow.user_id)
# 从当前用户的关注列表中移除目标用户
if follow.target_account in current_following:
current_following.remove(follow.target_account)
# 保存更新后的数据
db.save_data("users.json", users_db)
return {"status": "success"}
# ==========================================
# 🔒 隐私设置接口
# ==========================================
# 作用:更新用户的隐私偏好设置
# 关联:
# - users.json 的 privacy 字段
# - models.py 的 PrivacySettings 模型
# 隐私选项说明:
# - follows: 是否公开关注列表
# - likes: 是否公开点赞记录
# - favorites: 是否公开收藏记录
# - downloads: 是否公开下载/使用记录
# 前端调用:
# - 个人设置表单组件.js 的隐私设置区域
@router.put("/api/users/{account}/privacy")
async def update_privacy(account: str, privacy: PrivacySettings):
"""
更新隐私设置接口
路径参数:
- account: 用户账号
请求参数:(PrivacySettings 模型)
- follows: 是否隐藏关注列表 (True=隐藏)
- likes: 是否隐藏点赞记录 (True=隐藏)
- favorites: 是否隐藏收藏记录 (True=隐藏)
- downloads: 是否隐藏下载记录 (True=隐藏)
"""
# 加载用户数据库
users_db = db.load_data("users.json", default_data={})
# 检查用户是否存在
if account not in users_db:
raise HTTPException(status_code=404, detail="用户不存在")
# 更新用户的隐私设置
users_db[account]["privacy"] = privacy.dict()
# 保存更新后的数据
db.save_data("users.json", users_db)
return {"status": "success"}