# FastAPI-приложение и его жизненный цикл. from contextlib import asynccontextmanager from fastapi import FastAPI from ..core.config import Settings from ..storage.db import PersistenceService from .routes import cars, health, tasks @asynccontextmanager async def lifespan(app: FastAPI): # Таблицы создаются миграциями Alembic. yield def create_app(settings: Settings | None = None) -> FastAPI: _settings = settings or Settings() app = FastAPI( title="mobile.de Scraper API", description="REST API для управления задачами скрапинга mobile.de и просмотра данных", version="1.0.0", lifespan=lifespan, ) app.state.settings = _settings app.state.persistence = PersistenceService(_settings) app.include_router(health.router, tags=["health"]) app.include_router(cars.router, prefix="/api/v1", tags=["cars"]) app.include_router(tasks.router, prefix="/api/v1", tags=["tasks"]) return app # Точка входа для uvicorn. app = create_app()