This commit is contained in:
2026-02-27 17:05:43 +03:00
parent 532767e552
commit d86276f56d
2 changed files with 46 additions and 4 deletions
+11
View File
@@ -5,9 +5,12 @@ from aiogram import Bot, Dispatcher
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram_dialog import setup_dialogs
from dishka import make_async_container
from dishka.integrations.aiogram import setup_dishka
from src.dutylog.application.bot.user_handlers import router as user_router
from src.dutylog.application.bot.user_dialogs import main_menu_dialog
from src.dutylog.infrastructure.ioc import ConfigProvider, DatabaseProvider, DAOProvider
from src.dutylog.infrastructure.utils.config import load_config
@@ -22,13 +25,21 @@ async def main():
)
dp = Dispatcher()
container = make_async_container(
ConfigProvider(),
DatabaseProvider(),
DAOProvider(),
)
dp.include_router(user_router)
dp.include_router(main_menu_dialog)
setup_dialogs(dp)
setup_dishka(container, dp)
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
+34 -3
View File
@@ -1,7 +1,38 @@
from sqlalchemy.ext.asyncio import AsyncSession
from collections.abc import AsyncIterable
from src.dutylog.infrastructure.database.dao.users_dao import UsersDAO
from dishka import Provider, Scope, provide
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker
from dutylog.infrastructure.database.config import create_engine, create_session_maker
from dutylog.infrastructure.database.dao.users_dao import UsersDAO
from dutylog.infrastructure.utils.config import Config, load_config
def get_users_dao(session: AsyncSession) -> UsersDAO:
class ConfigProvider(Provider):
@provide(scope=Scope.APP)
def get_config(self) -> Config:
return load_config()
class DatabaseProvider(Provider):
@provide(scope=Scope.APP)
def get_engine(self, config: Config) -> AsyncEngine:
return create_engine(config.database.url)
@provide(scope=Scope.APP)
def get_session_maker(self, engine: AsyncEngine) -> async_sessionmaker[AsyncSession]:
return create_session_maker(engine)
@provide(scope=Scope.REQUEST)
async def get_session(
self, session_maker: async_sessionmaker[AsyncSession]
) -> AsyncIterable[AsyncSession]:
async with session_maker() as session:
yield session
class DAOProvider(Provider):
@provide(scope=Scope.REQUEST)
def get_users_dao(self, session: AsyncSession) -> UsersDAO:
return UsersDAO(session)