feat: Add Links stats
All checks were successful
Build Docker / BuildImage (push) Successful in 47s
Check Code Quality / RuffCheck (push) Successful in 59s

This commit is contained in:
2026-03-17 15:07:22 +11:00
parent bebf9e41e1
commit 8678711ab1
4 changed files with 62 additions and 35 deletions

View File

@@ -234,6 +234,23 @@ def api_immich_stats():
return jsonify(stats)
@app.route("/api/v1/links", methods=["GET"])
def api_links_stats():
"""
API endpoint to get the user's Links stats.
"""
user = session.get("user")
if not user:
return jsonify({"error": "Unauthorized"}), 401
from tools.links import get_links_stats
stats = get_links_stats(user["email"])
if "error" in stats:
return jsonify(stats), 500
return jsonify(stats)
# endregion

View File

@@ -42,4 +42,26 @@ document.addEventListener("DOMContentLoaded", () => {
console.error("Error fetching Immich stats:", error);
});
}
// Fetch Links stats and display them
const linksLink = document.getElementById("links");
if (linksLink) {
fetch("/api/v1/links")
.then(response => response.json())
.then(data => {
if (!data.error) {
// Create a new span element to display the stats
const statsLabel = document.createElement("p");
statsLabel.classList.add("service-note");
statsLabel.textContent = `Links: ${data.links_count}`;
// Append the stats span to the Links link
linksLink.appendChild(statsLabel);
} else {
console.error("Error fetching Links stats:", data.error);
}
})
.catch(error => {
console.error("Error fetching Links stats:", error);
});
}
});

View File

@@ -1,35 +0,0 @@
import os
import requests
IMMICH_API_KEY = os.getenv("IMMICH_API_KEY")
def get_immich_stats(user_sub: str) -> dict[str, int | str]:
"""
Get the user's Immich stats from the API.
"""
if not IMMICH_API_KEY:
return {"error": "IMMICH_API_KEY environment variable not set"}
headers = {"x-api-key": IMMICH_API_KEY, "Accept": "application/json"}
response = requests.get(
"https://immich.woodburn.au/api/admin/users", headers=headers
)
if response.status_code != 200:
return {"error": f"Failed to fetch Immich stats: {response.status_code}"}
data = response.json()
user_id = None
for user in data:
if user.get("oauthId") == user_sub:
user_id = user.get("id")
break
if not user_id:
return {"error": "User not found in Immich"}
# Get user stats
response = requests.get(
f"https://immich.woodburn.au/api/admin/users/{user_id}/statistics",
headers=headers,
)
if response.status_code != 200:
return {"error": f"Failed to fetch Immich user stats: {response.status_code}"}
stats = response.json()
return stats

23
tools/links.py Normal file
View File

@@ -0,0 +1,23 @@
import os
import requests
LINKS_API_KEY = os.getenv("LINKS_API_KEY")
def get_links_stats(user_email: str) -> dict[str, int | str]:
"""
Get the user's Immich stats from the API.
"""
if not LINKS_API_KEY:
return {"error": "LINKS_API_KEY environment variable not set"}
headers = {"x-api-key": LINKS_API_KEY, "Accept": "application/json"}
response = requests.get("https://l.woodburn.au/api/v2/users/admin", headers=headers)
if response.status_code != 200:
return {"error": f"Failed to fetch Links stats: {response.status_code}"}
data = response.json()
if not data.get("data"):
return {"error": "User not found in Links"}
for user in data["data"]:
if user.get("email") == user_email:
return user
return {"error": "User not found in Links"}