# FastAPI Todo Application A modern, fast, and feature-rich todo management API built with FastAPI, SQLAlchemy, and SQLite. ## ๐Ÿš€ Quick Start ### Prerequisites - Python 3.8+ - pip package manager ### Installation & Setup 1. **Clone and navigate to the project:** ```bash git clone cd todoapp ``` 2. **Create a virtual environment (recommended):** ```bash python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate ``` 3. **Install dependencies:** ```bash pip install -r requirements.txt ``` 4. **Initialize the database:** ```bash alembic upgrade head ``` 5. **Start the server:** ```bash uvicorn main:app --host 0.0.0.0 --port 8000 ``` The API will be available at `http://localhost:8000` ## ๐Ÿ“‹ Features - โœ… **Full CRUD Operations** - Create, read, update, and delete todos - ๐Ÿ” **Pagination Support** - Efficient handling of large todo lists - ๐Ÿ“Š **SQLite Database** - Lightweight, serverless database - ๐Ÿ”„ **Database Migrations** - Version-controlled schema changes with Alembic - ๐Ÿ“š **Auto-generated Documentation** - Interactive API docs with Swagger UI - ๐ŸŒ **CORS Enabled** - Cross-origin requests supported - ๐Ÿ’ช **Type Safety** - Full Pydantic validation and type hints - ๐Ÿฅ **Health Monitoring** - Built-in health check endpoint - ๐ŸŽฏ **Production Ready** - Structured codebase with best practices ## ๐Ÿ›  Tech Stack - **FastAPI** - Modern, fast web framework for building APIs - **SQLAlchemy** - SQL toolkit and ORM - **Alembic** - Database migration tool - **Pydantic** - Data validation using Python type annotations - **SQLite** - Lightweight, file-based database - **Uvicorn** - Lightning-fast ASGI server ## ๐Ÿ“ก API Reference ### Base Endpoints | Method | Endpoint | Description | |--------|----------|-------------| | GET | `/` | API information and links | | GET | `/health` | Health check status | | GET | `/docs` | Interactive API documentation | | GET | `/redoc` | Alternative API documentation | | GET | `/openapi.json` | OpenAPI specification | ### Todo Management | Method | Endpoint | Description | Request Body | |--------|----------|-------------|--------------| | POST | `/todos/` | Create a new todo | `TodoCreate` | | GET | `/todos/` | List all todos | Query params: `skip`, `limit` | | GET | `/todos/{todo_id}` | Get specific todo | - | | PUT | `/todos/{todo_id}` | Update todo | `TodoUpdate` | | DELETE | `/todos/{todo_id}` | Delete todo | - | ### Request/Response Models #### TodoCreate ```json { "title": "string", "description": "string (optional)", "completed": false } ``` #### TodoUpdate ```json { "title": "string (optional)", "description": "string (optional)", "completed": "boolean (optional)" } ``` #### TodoResponse ```json { "id": 1, "title": "string", "description": "string", "completed": false, "created_at": "2024-01-01T00:00:00Z", "updated_at": "2024-01-01T00:00:00Z" } ``` ## ๐Ÿ—‚ Project Structure ``` todoapp/ โ”œโ”€โ”€ main.py # FastAPI application entry point โ”œโ”€โ”€ requirements.txt # Python dependencies โ”œโ”€โ”€ alembic.ini # Alembic configuration โ”œโ”€โ”€ ruff.toml # Code linting configuration โ”œโ”€โ”€ app/ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”œโ”€โ”€ db/ โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”‚ โ”œโ”€โ”€ base.py # SQLAlchemy Base class โ”‚ โ”‚ โ””โ”€โ”€ session.py # Database session configuration โ”‚ โ”œโ”€โ”€ models/ โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”‚ โ””โ”€โ”€ todo.py # Todo SQLAlchemy model โ”‚ โ””โ”€โ”€ schemas/ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ””โ”€โ”€ todo.py # Pydantic schemas โ””โ”€โ”€ alembic/ โ”œโ”€โ”€ env.py # Alembic environment configuration โ”œโ”€โ”€ script.py.mako # Migration script template โ””โ”€โ”€ versions/ # Database migration files โ””โ”€โ”€ 001_initial_todo_table.py ``` ## ๐Ÿงช Development ### Running in Development Mode ```bash uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` ### Code Quality This project uses Ruff for linting and formatting: ```bash ruff check . ruff format . ``` ### Database Operations **Create a new migration:** ```bash alembic revision --autogenerate -m "Description of changes" ``` **Apply migrations:** ```bash alembic upgrade head ``` **Rollback migrations:** ```bash alembic downgrade -1 ``` ## ๐Ÿ”ง Configuration ### Database - **Type:** SQLite - **Location:** `/app/storage/db/db.sqlite` - **Connection:** Automatically created on startup ### Environment Variables No environment variables are required for basic operation. The application uses sensible defaults for development. ## ๐Ÿฅ Health Check The application includes a health check endpoint that returns the service status: ```bash curl http://localhost:8000/health ``` Response: ```json { "status": "healthy", "service": "Todo API" } ``` ## ๐Ÿ“– API Documentation Once the server is running, access the documentation at: - **Swagger UI:** http://localhost:8000/docs - **ReDoc:** http://localhost:8000/redoc - **OpenAPI JSON:** http://localhost:8000/openapi.json ## ๐Ÿš€ Deployment For production deployment, consider: 1. **Use a production WSGI server:** ```bash pip install gunicorn gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker ``` 2. **Set up proper logging and monitoring** 3. **Configure environment-specific settings** 4. **Use a more robust database (PostgreSQL, MySQL)** 5. **Set up SSL/TLS certificates** ## ๐Ÿค Contributing 1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Run tests and linting 5. Submit a pull request ## ๐Ÿ“ License This project is open source and available under the MIT License.