f1tness_parser/app/main.py
2026-10-22 23:46:29 +03:00

47 lines
1.4 KiB
Python

import logging
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from app.api.v1.api import api_router
from app.api.v1.web import web_router
from app.config import settings
from app.core.database.connection import create_engine, create_session_factory
# TODO: Replace level with settings value
logging.basicConfig(
level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
@asynccontextmanager
async def lifespan(app: FastAPI):
# Schema is managed by Alembic: run `alembic upgrade head` before starting the app
engine = create_engine(settings.get_postgres_database_url())
app.state.session_factory = create_session_factory(engine)
yield
await engine.dispose()
# TODO: (#ToLearn) Почитать про lifespan в FastAPI приложениях
app = FastAPI(
title="Fitness Parser API",
description="API for parsing fitness training data from various sources",
version="0.1.0",
lifespan=lifespan,
)
app.mount("/static", StaticFiles(directory="app/static"), name="static")
templates = Jinja2Templates(directory="app/templates")
# Include routers
app.include_router(api_router, prefix="/api/v1")
app.include_router(web_router, prefix="/app")
@app.get("/")
async def root():
return {"message": "Fitness Parser API", "version": "0.1.0"}