Claude Code - Backend Implementation Specialist
Add complete FastAPI Todo application with Docker support
1941764 | """ | |
| Database configuration and session management. | |
| This module provides: | |
| - Database engine creation | |
| - Session management | |
| - Dependency injection for FastAPI routes | |
| """ | |
| import os | |
| from typing import Generator | |
| from sqlmodel import Session, create_engine, SQLModel | |
| # Get database URL from environment variable | |
| # For Vercel serverless, use /tmp directory for SQLite | |
| DATABASE_URL = os.getenv("DATABASE_URL") | |
| if DATABASE_URL is None: | |
| # Check if running on Vercel (serverless environment) | |
| if os.getenv("VERCEL"): | |
| # Use /tmp directory which is writable in Vercel serverless | |
| DATABASE_URL = "sqlite:////tmp/todo.db" | |
| else: | |
| # Local development | |
| DATABASE_URL = "sqlite:///./todo.db" | |
| # Create database engine | |
| # connect_args only needed for SQLite | |
| connect_args = {"check_same_thread": False} if DATABASE_URL.startswith("sqlite") else {} | |
| engine = create_engine( | |
| DATABASE_URL, | |
| echo=False, # Disable SQL query logging for serverless | |
| connect_args=connect_args, | |
| pool_pre_ping=True, # Verify connections before using | |
| ) | |
| def create_db_and_tables(): | |
| """Create all database tables.""" | |
| SQLModel.metadata.create_all(engine) | |
| def get_session() -> Generator[Session, None, None]: | |
| """ | |
| Dependency function to provide database session to FastAPI routes. | |
| Yields: | |
| Session: SQLModel database session | |
| Example: | |
| @app.get("/items") | |
| def get_items(session: Session = Depends(get_session)): | |
| items = session.exec(select(Item)).all() | |
| return items | |
| """ | |
| with Session(engine) as session: | |
| yield session | |