"""Dashboard router.""" from datetime import datetime, timezone, timedelta from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from sqlalchemy import func from app.auth import get_current_user, AdminUser from app.database import get_db from app.models.db_models import CardLog, SystemSetting from app.services import airwallex_service router = APIRouter(prefix="/api/dashboard", tags=["dashboard"]) @router.get("") def get_dashboard( db: Session = Depends(get_db), user: AdminUser = Depends(get_current_user), ): """Get dashboard summary data.""" # Today's card count from local logs today_start = datetime.now(timezone.utc).replace(hour=0, minute=0, second=0, microsecond=0) today_card_count = ( db.query(func.count(CardLog.id)) .filter(CardLog.action == "create_card", CardLog.status == "success", CardLog.created_at >= today_start) .scalar() ) or 0 # Daily limit from settings limit_setting = db.query(SystemSetting).filter(SystemSetting.key == "daily_card_limit").first() daily_card_limit = int(limit_setting.value) if limit_setting else 100 # Try to get live data from Airwallex total_cards = 0 active_cards = 0 account_balance = None try: cards_data = airwallex_service.list_cards(db, page_num=0, page_size=1) # We can't get total from a page_size=1 call easily, so we show what we have total_cards = cards_data.get("total", 0) except Exception: pass try: account_balance = airwallex_service.get_balance(db) except Exception: pass return { "total_cards": total_cards, "active_cards": active_cards, "today_card_count": today_card_count, "daily_card_limit": daily_card_limit, "account_balance": account_balance, }