OptiQ / api /routes /usage.py
mohammademad2003's picture
first commit
7477316
"""
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()
@router.get("/usage")
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),
}
@router.get("/usage/stats")
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,
},
}
@router.get("/usage/summary")
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,
},
}