from datetime import date from typing import List, Optional from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.core.dependencies import get_current_user from app.models import User from app.services.usage_service import UsageService from app.datamodels.schemas import ( UsageSummaryResponse, DailyUsageResponse, ModelUsageResponse, KeyUsageResponse, UsageLogResponse, ) router = APIRouter(prefix="/usage", tags=["usage"]) @router.get("/summary", response_model=UsageSummaryResponse) async def usage_summary( user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): return await UsageService.summary(db, user.id) @router.get("/daily", response_model=List[DailyUsageResponse]) async def usage_daily( start: Optional[date] = Query(None), end: Optional[date] = Query(None), user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): return await UsageService.daily(db, user.id, start, end) @router.get("/by-model", response_model=List[ModelUsageResponse]) async def usage_by_model( user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): return await UsageService.by_model(db, user.id) @router.get("/by-key", response_model=List[KeyUsageResponse]) async def usage_by_key( user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): return await UsageService.by_key(db, user.id) @router.get("/logs", response_model=List[UsageLogResponse]) async def usage_logs( page: int = Query(1, ge=1), size: int = Query(20, ge=1, le=100), model: Optional[str] = Query(None), key_id: Optional[str] = Query(None), start: Optional[date] = Query(None), end: Optional[date] = Query(None), user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): return await UsageService.logs(db, user.id, page, size, model, key_id, start, end)