Spaces:
Running
Running
| 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 | |
| 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) | |
| def health_check(): | |
| return {"status": "ok", "app": settings.APP_NAME} | |