File size: 2,779 Bytes
db73228
 
8cb3769
e84a3a9
db73228
 
 
8cb3769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c922cd9
 
 
 
 
 
8cb3769
 
34a9b56
8cb3769
 
 
 
db73228
a8e8490
db73228
 
a8e8490
 
 
 
 
e84a3a9
8cb3769
 
e84a3a9
db73228
 
864bec9
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from datetime import datetime
from fastapi import APIRouter
from pydantic import BaseModel
from core import get_db, save_db, AuthReq

router = APIRouter()

class RankingRegisterReq(BaseModel):
    username: str
    source: str = "ranking"

@router.post("/api/hub/ranking_register")
async def ranking_register(req: RankingRegisterReq):
    try:
        users = get_db("users.json")
        target_name = req.username.strip()
        if not target_name or target_name != req.username: return {"status": "error", "message": "首尾不能包含空格且不能为空"}
        
        actual_user = next((u for u in users.keys() if u.lower() == target_name.lower()), None)
        if actual_user:
            user_info = users[actual_user]
            if user_info.get("source") == "ranking":
                return {"status": "success", "reg_date": user_info.get("reg_date", datetime.now().strftime("%Y-%m-%d"))}
            else:
                # 用户已独立注册,现在通过 Ranking 登录,将账号升级为 Ranking 绑定
                user_info["password_hash"] = "__ranking_linked__"
                user_info["source"] = "ranking"
                user_info["last_update"] = datetime.now().strftime("%Y-%m-%d")
                save_db(users, "users.json")
                return {"status": "success", "reg_date": user_info.get("reg_date", datetime.now().strftime("%Y-%m-%d"))}
        
        reg_date = datetime.now().strftime("%Y-%m-%d")
        users[target_name] = { "password_hash": "__ranking_linked__", "reg_date": reg_date, "source": "ranking", "last_update": reg_date }
        save_db(users, "users.json")
        return {"status": "success", "reg_date": reg_date}
    except Exception as e: return {"status": "error", "message": str(e)}

@router.post("/api/hub/login")
async def login(req: AuthReq):
    try:
        users = get_db("users.json")
        actual_user = next((u for u in users.keys() if u.lower() == req.username.lower()), None)
        if not actual_user: return {"status": "error", "message": "用户不存在!"}
        
        user_info = users[actual_user]
        
        if user_info.get("source") == "ranking":
            return {"status": "success", "reg_date": user_info.get("reg_date", "2026-03-14")}
        
        return {"status": "error", "message": "非Ranking绑定账号无法登录"}
    except Exception as e: return {"status": "error", "message": str(e)}

# 🌟 新增:统计社区总人数的接口
@router.get("/api/hub/stats")
async def get_hub_stats():
    try:
        users = get_db("users.json")
        return {"status": "success", "user_count": len(users)}
    except Exception as e: 
        return {"status": "error", "message": str(e)}