from __future__ import annotations import logging from app.db.base import SessionLocal from app.integrations.gateway import GatewayClient from app.repositories.request_log import RequestLogRepository logger = logging.getLogger(__name__) async def save_request_log(gateway: GatewayClient, user: str) -> None: """Сохраняет накопленные клиентом записи в external_request_log. Отдельная короткая транзакция: журнал не должен откатываться вместе с неудачной записью котировки, а его сбой — ронять обновление. """ records = gateway.drain_records() if not records: return try: async with SessionLocal() as session: await RequestLogRepository(session).add_many(records, user) await session.commit() except Exception: # noqa: BLE001 logger.exception( "Не удалось записать %d записей журнала запросов", len(records) )