from collections.abc import AsyncGenerator from contextlib import asynccontextmanager from aiogram import Bot from aiogram.client.default import DefaultBotProperties from fastapi import FastAPI from api.routes import routers from config import settings from repositories.bills import BillsRepository from repositories.subscriptions import SubscriptionRepository from repositories.users import UserRepository from schemas.di import APIDependenciesDTO from services.billing_service import BillingService from services.user_service import UserService @asynccontextmanager async def lifespan(app: FastAPI) -> AsyncGenerator: # Bot Init bot_default = DefaultBotProperties(parse_mode="HTML") bot = Bot(token=settings.bot_token, default=bot_default) app.state.bot = bot user_repository = UserRepository() bills_repository = BillsRepository() subscription_repository = SubscriptionRepository() user_service = UserService(user_repository, subscription_repository=subscription_repository) bills_service = BillingService( user_repository=user_repository, bills_repository=bills_repository ) deps_dto = APIDependenciesDTO( user_repository=user_repository, user_service=user_service, bills_repository=bills_repository, billing_service=bills_service, ) app.state.deps = deps_dto for r in routers: app.include_router(r) yield # App's lifespan await bot.session.close() # D IE!!!!!!!! app = FastAPI( title="Malenia API", description="Payment webhook handler and user balance management", version="1.0.0", lifespan=lifespan, docs_url="", )