docboard-api / app /main.py
yCamelow's picture
Remove temp migration route
9a32053 verified
Raw
History Blame Contribute Delete
2.81 kB
import os
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.gzip import GZipMiddleware
from app.core.config import settings
from app.routers import auth
from app import models # Import all models so SQLModel metadata registers them
from fastapi_cache import FastAPICache
from fastapi_cache.backends.redis import RedisBackend
from redis import asyncio as aioredis
from slowapi import _rate_limit_exceeded_handler
from slowapi.errors import RateLimitExceeded
from slowapi.middleware import SlowAPIMiddleware
from app.core.limiter import limiter
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Lifespan events for the FastAPI application."""
# Conecta no Redis via variΓ‘vel de ambiente (Upstash em produΓ§Γ£o, localhost em dev)
redis_url = os.environ.get("REDIS_URL", "redis://localhost:6379")
redis = aioredis.from_url(redis_url, encoding="utf-8", decode_responses=True)
FastAPICache.init(RedisBackend(redis), prefix="docboard:", expire=300)
yield
app = FastAPI(
title=settings.APP_NAME,
description="Backend API for the DocBoard application.",
version="0.1.0",
lifespan=lifespan,
docs_url="/docs" if settings.DEBUG else None,
redoc_url="/redoc" if settings.DEBUG else None,
openapi_url="/openapi.json" if settings.DEBUG else None,
)
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
app.add_middleware(SlowAPIMiddleware)
# ─── CORS ─────────────────────────────────────────────────────────────────────
app.add_middleware(
CORSMiddleware,
allow_origins=[
os.environ.get("ALLOWED_ORIGINS", "http://localhost:5173"),
],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.add_middleware(GZipMiddleware, minimum_size=1000)
# ─── Routers ──────────────────────────────────────────────────────────────────
from app.routers import auth, procedures, resources, dashboard, safety, teams, growth, users
app.include_router(auth.router)
app.include_router(procedures.router)
app.include_router(resources.router)
app.include_router(dashboard.router)
app.include_router(safety.router)
app.include_router(teams.router)
app.include_router(growth.router)
app.include_router(users.router)
@app.get("/", tags=["Health"])
def health_check():
return {"status": "ok", "app": settings.APP_NAME}