78 lines
2.0 KiB
Python
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)
|