"""Маршрутизация: правила, режим, GeoIP, импорт.""" from __future__ import annotations from typing import Any from fastapi import APIRouter, Depends from awg_api.deps import StateDep, require_token from awg_api.schemas import ( GeoIpUpdateRequest, ImportRequest, ModeUpdateRequest, RoutingRuleCreate, RoutingRuleUpdate, ) router = APIRouter( prefix="/api/v1/routing", tags=["routing"], dependencies=[Depends(require_token)] ) @router.get("/rules") async def list_rules( state: StateDep, enabled: bool | None = None, kind: str | None = None, ) -> dict[str, Any]: return state.list_rules(enabled=enabled, kind=kind) @router.post("/rules", status_code=201) async def create_rule(payload: RoutingRuleCreate, state: StateDep) -> dict[str, Any]: return state.create_rule(payload) @router.get("/rules/{rule_id}") async def get_rule(rule_id: str, state: StateDep) -> dict[str, Any]: return state.get_rule(rule_id) @router.put("/rules/{rule_id}") async def update_rule(rule_id: str, payload: RoutingRuleUpdate, state: StateDep) -> dict[str, Any]: return state.update_rule(rule_id, payload) @router.delete("/rules/{rule_id}", status_code=204) async def delete_rule(rule_id: str, state: StateDep) -> None: state.delete_rule(rule_id) @router.put("/mode") async def put_mode(payload: ModeUpdateRequest, state: StateDep) -> dict[str, Any]: return state.set_mode(payload.mode) @router.post("/geoip/update") async def update_geoip( state: StateDep, payload: GeoIpUpdateRequest | None = None ) -> dict[str, Any]: force = bool(payload.force) if payload is not None else False return state.update_geoip(force=force) @router.post("/import") async def import_config(payload: ImportRequest, state: StateDep) -> dict[str, Any]: return state.import_config(payload)