"""Dashboard web routes.""" from fastapi import APIRouter, Request, Depends from fastapi.responses import HTMLResponse, RedirectResponse from sqlalchemy.orm import Session from sqlalchemy import func from ..database import get_db from ..models.user import User from ..models.gateway import Gateway from ..models.endpoint import Endpoint from ..models.access import ConnectionLog from .deps import get_current_user_web, get_flashed_messages router = APIRouter() @router.get("/", response_class=HTMLResponse) async def root(request: Request): """Root redirect to dashboard.""" if request.session.get("user_id"): return RedirectResponse(url="/dashboard", status_code=303) return RedirectResponse(url="/login", status_code=303) @router.get("/dashboard", response_class=HTMLResponse) async def dashboard( request: Request, db: Session = Depends(get_db), current_user: User = Depends(get_current_user_web) ): """Dashboard with overview.""" # Get statistics gateways_total = db.query(Gateway).count() gateways_online = db.query(Gateway).filter(Gateway.is_online == True).count() endpoints_total = db.query(Endpoint).count() users_total = db.query(User).filter(User.is_active == True).count() active_connections = db.query(ConnectionLog).filter( ConnectionLog.disconnected_at.is_(None) ).count() stats = { "gateways_total": gateways_total, "gateways_online": gateways_online, "endpoints_total": endpoints_total, "users_total": users_total, "active_connections": active_connections } return request.app.state.templates.TemplateResponse( "dashboard/index.html", { "request": request, "current_user": current_user, "stats": stats, "flash_messages": get_flashed_messages(request) } )