65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
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)
|