from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from slowapi import _rate_limit_exceeded_handler from slowapi.errors import RateLimitExceeded from app.api import bills, members, follows, dashboard, search, settings, admin, health, auth, notifications, notes, collections, share, alignment from app.config import settings as config from app.core.limiter import limiter app = FastAPI( title="PocketVeto", description="Monitor US Congressional activity with AI-powered bill summaries.", version="1.0.0", ) app.state.limiter = limiter app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) app.add_middleware( CORSMiddleware, allow_origins=[o for o in [config.LOCAL_URL, config.PUBLIC_URL] if o], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(auth.router, prefix="/api/auth", tags=["auth"]) app.include_router(bills.router, prefix="/api/bills", tags=["bills"]) app.include_router(members.router, prefix="/api/members", tags=["members"]) app.include_router(follows.router, prefix="/api/follows", tags=["follows"]) app.include_router(dashboard.router, prefix="/api/dashboard", tags=["dashboard"]) app.include_router(search.router, prefix="/api/search", tags=["search"]) app.include_router(settings.router, prefix="/api/settings", tags=["settings"]) app.include_router(admin.router, prefix="/api/admin", tags=["admin"]) app.include_router(health.router, prefix="/api/health", tags=["health"]) app.include_router(notifications.router, prefix="/api/notifications", tags=["notifications"]) app.include_router(notes.router, prefix="/api/notes", tags=["notes"]) app.include_router(collections.router, prefix="/api/collections", tags=["collections"]) app.include_router(share.router, prefix="/api/share", tags=["share"]) app.include_router(alignment.router, prefix="/api/alignment", tags=["alignment"])