Added user account overview for admins

This commit is contained in:
2026-01-14 22:36:59 +06:00
parent 1eaba59f0f
commit 14f020e819
5 changed files with 318 additions and 47 deletions

View File

@@ -404,6 +404,60 @@ async def get_profile_stats(user: dict = Depends(get_current_user)):
"total_servers": len(owned_servers) + len(accessible_servers)
}
@app.get("/api/profile/stats/{username}")
async def get_user_profile_stats(username: str, user: dict = Depends(get_current_user)):
"""Получить статистику профиля другого пользователя (только для админов и тех. поддержки)"""
# Проверка прав доступа
if user["role"] not in ["admin", "support"]:
raise HTTPException(403, "Недостаточно прав для просмотра профилей других пользователей")
users = load_users()
# Проверка существования пользователя
if username not in users:
raise HTTPException(404, "Пользователь не найден")
target_user = users[username]
# Подсчитываем серверы пользователя
owned_servers = []
accessible_servers = []
for server_dir in SERVERS_DIR.iterdir():
if server_dir.is_dir():
config = load_server_config(server_dir.name)
if config.get("owner") == username:
owned_servers.append({
"name": server_dir.name,
"displayName": config.get("displayName", server_dir.name)
})
elif username in target_user.get("servers", []) or target_user["role"] == "admin":
accessible_servers.append({
"name": server_dir.name,
"displayName": config.get("displayName", server_dir.name)
})
# Подсчитываем тикеты
tickets = load_tickets()
user_tickets = [t for t in tickets.values() if t["author"] == username]
tickets_stats = {
"total": len(user_tickets),
"pending": len([t for t in user_tickets if t["status"] == "pending"]),
"in_progress": len([t for t in user_tickets if t["status"] == "in_progress"]),
"closed": len([t for t in user_tickets if t["status"] == "closed"])
}
return {
"username": username,
"role": target_user["role"],
"owned_servers": owned_servers,
"accessible_servers": accessible_servers,
"tickets": tickets_stats,
"total_servers": len(owned_servers) + len(accessible_servers),
"is_viewing_other": True # Флаг что это чужой профиль
}
# API для серверов
@app.get("/api/servers")
async def get_servers(user: dict = Depends(get_current_user)):