# dependency.py from fastapi import Request, Depends from motor.motor_asyncio import AsyncIOMotorClient from adapters.google_adapter import GoogleAdapter from api.service.generation_service import GenerationService from repos.dao import DAO # ... ваши импорты ... from aiogram import Bot from adapters.s3_adapter import S3Adapter from typing import Optional # Провайдеры "сырых" клиентов из состояния приложения def get_mongo_client(request: Request) -> AsyncIOMotorClient: return request.app.state.mongo_client def get_gemini_client(request: Request) -> GoogleAdapter: return request.app.state.gemini_client def get_bot_client(request: Request) -> Bot: return request.app.state.bot def get_s3_adapter(request: Request) -> Optional[S3Adapter]: return request.app.state.s3_adapter # Провайдер DAO (собирается из mongo_client) def get_dao( mongo_client: AsyncIOMotorClient = Depends(get_mongo_client), s3_adapter: Optional[S3Adapter] = Depends(get_s3_adapter) ) -> DAO: # FastAPI кэширует результат Depends в рамках одного запроса, # так что DAO создастся один раз за запрос. return DAO(mongo_client, s3_adapter) # Провайдер сервиса (собирается из DAO и Gemini) def get_generation_service( dao: DAO = Depends(get_dao), gemini: GoogleAdapter = Depends(get_gemini_client), s3_adapter: S3Adapter = Depends(get_s3_adapter), bot: Bot = Depends(get_bot_client), ) -> GenerationService: return GenerationService(dao, gemini, s3_adapter, bot) from fastapi import Header async def get_project_id(x_project_id: Optional[str] = Header(None, alias="X-Project-ID")) -> Optional[str]: return x_project_id