from typing import Annotated import asyncpg from dishka.integrations.fastapi import DishkaRoute, FromDishka from fastapi import APIRouter, HTTPException, Query from utils.read import peers from utils.read.models import PeerHistoryView, PeerView router = APIRouter(prefix="/api", tags=["peers"], route_class=DishkaRoute) AccountId = Annotated[int, Query()] @router.get("/peers/batch") async def get_peers( pool: FromDishka[asyncpg.Pool], account_id: AccountId, ids: Annotated[str, Query()] ) -> list[PeerView]: parsed = [int(part) for part in ids.split(",") if part.strip()] return await peers.get_peers(pool, account_id, parsed) @router.get("/peers/{peer_id}") async def get_peer( pool: FromDishka[asyncpg.Pool], peer_id: int, account_id: AccountId ) -> PeerView: peer = await peers.get_peer(pool, account_id, peer_id) if peer is None: raise HTTPException(status_code=404, detail="peer not found") return peer @router.get("/peers/{peer_id}/history") async def peer_history( pool: FromDishka[asyncpg.Pool], peer_id: int, account_id: AccountId ) -> list[PeerHistoryView]: return await peers.get_peer_history(pool, account_id, peer_id)