Files
tgex-backend/src/main.py
Artem Tsyrulnikov 049024ebe8 refactor
2026-01-15 22:02:16 +03:00

78 lines
2.0 KiB
Python

from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi_pagination import add_pagination
from fastapi_pagination.utils import disable_installed_extensions_check
from shared import logger
from shared.worker_base import WorkerConfig
from src import deps
from src.adapter.jwt import JWT
from src.adapter.parser import ParserClient
from src.adapter.postgres import Postgres
from src.adapter.s3 import S3
from src.adapter.telegram_bot import TelegramBot
from src.config import settings
from src.controller.http_v1 import api_router
from src.controller.worker.fetch_placement_post import FetchPublicationPostWorker
from src.usecase import Usecase
@asynccontextmanager
async def lifespan(_: FastAPI) -> AsyncGenerator[None]:
await postgres.connect()
await s3.connect()
await fetch_publication_post_worker.start()
yield
await fetch_publication_post_worker.stop()
await s3.close()
await postgres.close()
logger.init(settings.logger)
disable_installed_extensions_check()
postgres = Postgres(settings.db)
telegram = TelegramBot(settings.telegram)
jwt_encoder = JWT(settings.jwt)
parser_client = ParserClient(base_url=settings.parser.URL)
s3 = S3(settings.s3)
usecase = Usecase(
database=postgres,
telegram_bot=telegram,
jwt_encoder=jwt_encoder,
parser=parser_client,
s3=s3,
)
deps.set_usecase(usecase)
fetch_publication_post_worker = FetchPublicationPostWorker(config=WorkerConfig(INTERVAL_SECONDS=5))
app = FastAPI(
lifespan=lifespan,
version=settings.logger.APP_VERSION,
swagger_ui_parameters={
'defaultModelsExpandDepth': 0, # Сворачиваем Schemas
},
)
app.add_middleware(
CORSMiddleware,
allow_origins=[
'https://app.tgexchange.ru',
'http://app.tgexchange.ru',
],
allow_credentials=True,
allow_methods=['*'],
allow_headers=['*'],
)
add_pagination(app)
app.include_router(api_router)