Asma-yaseen's picture
feat: Deploy all advanced endpoints - Phase 2 complete
80df84c
Raw
History Blame Contribute Delete
2.57 kB
"""
Evolution Todo API - FastAPI Backend
Task: 1.6
Spec: specs/overview.md
"""
from dotenv import load_dotenv
load_dotenv() # Load .env file first
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from db import create_db_and_tables
import os
import traceback
# Initialize FastAPI app
app = FastAPI(
title="Evolution Todo API",
version="1.0.0",
description="RESTful API for Evolution Todo application"
)
# CORS Configuration
CORS_ORIGINS = os.getenv("CORS_ORIGINS", "http://localhost:3000").split(",")
app.add_middleware(
CORSMiddleware,
allow_origins=CORS_ORIGINS,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Global exception handler to ensure CORS headers on errors
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
"""Catch all exceptions and return with proper CORS headers."""
print(f"❌ Global Exception: {exc}")
traceback.print_exc()
return JSONResponse(
status_code=500,
content={"detail": str(exc)},
headers={
"Access-Control-Allow-Origin": request.headers.get("origin", "http://localhost:3000"),
"Access-Control-Allow-Credentials": "true",
}
)
@app.on_event("startup")
def on_startup():
"""Initialize database tables on startup."""
create_db_and_tables()
@app.get("/")
def root():
"""Root endpoint - API status check."""
return {
"message": "Evolution Todo API",
"status": "running",
"version": "1.0.0"
}
# Import and include routers
from routes.tasks import router as tasks_router
from routes.auth import router as auth_router
from routes.recurrence import router as recurrence_router
from routes.search import router as search_router
from routes.bulk import router as bulk_router
from routes.history import router as history_router
from routes.notifications import router as notifications_router
from routes.preferences import router as preferences_router
from routes.stats import router as stats_router
from routes.export_import import router as export_import_router
app.include_router(tasks_router)
app.include_router(auth_router)
app.include_router(recurrence_router)
app.include_router(search_router)
app.include_router(bulk_router)
app.include_router(history_router)
app.include_router(notifications_router)
app.include_router(preferences_router)
app.include_router(stats_router)
app.include_router(export_import_router)