Added user account overview for admins
This commit is contained in:
@@ -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)):
|
||||
|
||||
Reference in New Issue
Block a user