Spaces:
Running
Running
| """ | |
| Usage endpoint — User usage tracking and analytics. | |
| """ | |
| from __future__ import annotations | |
| from fastapi import APIRouter, HTTPException, Depends | |
| from api.auth import require_auth, FirebaseUser | |
| from api.database import get_user_usage, get_user_stats, get_or_create_user | |
| router = APIRouter() | |
| def get_usage(limit: int = 100, user: FirebaseUser = Depends(require_auth)): | |
| """Get usage history for the authenticated user.""" | |
| usage = get_user_usage(user.uid, limit=limit) | |
| return { | |
| "user_id": user.uid, | |
| "email": user.email, | |
| "usage": usage, | |
| "count": len(usage), | |
| } | |
| def get_usage_stats(user: FirebaseUser = Depends(require_auth)): | |
| """Get aggregated usage statistics for the authenticated user.""" | |
| # Ensure user exists in database | |
| get_or_create_user(user.uid, user.email, user.name) | |
| stats = get_user_stats(user.uid) | |
| usage = get_user_usage(user.uid, limit=1000) | |
| # Calculate additional stats | |
| total_runs = len(usage) | |
| methods_used = {} | |
| systems_used = {} | |
| for u in usage: | |
| method = u.get("method", "unknown") | |
| system = u.get("system", "unknown") | |
| methods_used[method] = methods_used.get(method, 0) + 1 | |
| systems_used[system] = systems_used.get(system, 0) + 1 | |
| return { | |
| "user_id": user.uid, | |
| "email": user.email, | |
| "name": user.name, | |
| "stats": { | |
| **stats, | |
| "total_runs": total_runs, | |
| "methods_used": methods_used, | |
| "systems_used": systems_used, | |
| }, | |
| } | |
| def get_usage_summary(user: FirebaseUser = Depends(require_auth)): | |
| """Get a dashboard-friendly summary of user's impact.""" | |
| get_or_create_user(user.uid, user.email, user.name) | |
| stats = get_user_stats(user.uid) | |
| # Calculate equivalents | |
| co2_tonnes = stats["total_co2_saved_kg"] / 1000 | |
| trees_equivalent = int(stats["total_co2_saved_kg"] / 21) # ~21 kg CO2/tree/year | |
| cars_removed = round(co2_tonnes / 4.6, 1) # ~4.6 t CO2/car/year | |
| return { | |
| "total_optimizations": stats["total_optimizations"], | |
| "energy_saved": { | |
| "kwh": round(stats["total_energy_saved_kwh"], 2), | |
| "mwh": round(stats["total_energy_saved_kwh"] / 1000, 2), | |
| }, | |
| "co2_saved": { | |
| "kg": round(stats["total_co2_saved_kg"], 2), | |
| "tonnes": round(co2_tonnes, 2), | |
| }, | |
| "money_saved_usd": round(stats["total_money_saved_usd"], 2), | |
| "equivalents": { | |
| "trees_planted": trees_equivalent, | |
| "cars_removed": cars_removed, | |
| }, | |
| } | |