31 lines
891 B
Python
31 lines
891 B
Python
from typing import Annotated
|
|
|
|
import asyncpg
|
|
from dishka.integrations.fastapi import DishkaRoute, FromDishka
|
|
from fastapi import APIRouter, Query
|
|
|
|
from utils.read import analytics
|
|
from utils.read.models import ResponseStats, VolumeBucket
|
|
|
|
router = APIRouter(prefix="/api/analytics", tags=["analytics"], route_class=DishkaRoute)
|
|
|
|
AccountId = Annotated[int, Query()]
|
|
ChatId = Annotated[int, Query()]
|
|
|
|
|
|
@router.get("/volume")
|
|
async def volume(
|
|
pool: FromDishka[asyncpg.Pool],
|
|
account_id: AccountId,
|
|
chat_id: ChatId,
|
|
days: Annotated[int, Query()] = 90,
|
|
) -> list[VolumeBucket]:
|
|
return await analytics.message_volume(pool, account_id, chat_id, days=days)
|
|
|
|
|
|
@router.get("/response-time")
|
|
async def response_time(
|
|
pool: FromDishka[asyncpg.Pool], account_id: AccountId, chat_id: ChatId
|
|
) -> ResponseStats:
|
|
return await analytics.response_stats(pool, account_id, chat_id)
|