46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
# 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) |