This commit is contained in:
Artem Tsyrulnikov
2025-11-08 16:16:04 +03:00
commit 3800c72662
36 changed files with 2136 additions and 0 deletions

51
src/main.py Normal file
View File

@@ -0,0 +1,51 @@
from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.routing import APIRouter
from shared import logger
from src import dependencies
from src.adapter.postgres.postgres import Postgres
from src.adapter.telegram.telegram import Telegram
from src.config import settings
from src.controller.http.user import user_router
from src.controller.telegram.bot import telegram_router
from src.usecase.usecase import Usecase
@asynccontextmanager
async def lifespan(app: FastAPI) -> AsyncGenerator[None]:
await postgres.connect()
await telegram.start_polling()
yield
await telegram.stop_polling()
await postgres.close()
logger.init(settings.logger)
# Dependencies
postgres = Postgres(settings.db)
dependencies.set_get_session(postgres.session_getter)
telegram = Telegram(settings.telegram, telegram_router)
usecase = Usecase(
database=postgres,
telegram_writer=telegram,
)
dependencies.set_usecase(usecase)
app: FastAPI = FastAPI(lifespan=lifespan, version=settings.logger.APP_VERSION)
# Routing
api_router = APIRouter(prefix='/api')
v1_router = APIRouter(prefix='/v1')
v1_router.include_router(user_router)
api_router.include_router(v1_router)
app.include_router(api_router)