Todo App API
A simple Todo application API built with FastAPI and SQLite.
Features
- ✅ Create, read, update, and delete todos
- ✅ Todo categories/tags for organization
- ✅ Due dates with overdue detection
- ✅ Advanced filtering (by category, completion status, overdue)
- ✅ SQLite database with SQLAlchemy ORM
- ✅ Database migrations with Alembic
- ✅ API documentation with Swagger UI
- ✅ Health check endpoint
- ✅ CORS enabled for all origins
- ✅ Input validation with Pydantic
Quick Start
Prerequisites
- Python 3.8+
Installation
-
Install dependencies:
pip install -r requirements.txt
-
Run database migrations:
alembic upgrade head
-
Start the development server:
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
Or alternatively:
python main.py
API Endpoints
The API is available at http://localhost:8000
Documentation
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- OpenAPI JSON: http://localhost:8000/openapi.json
Core Endpoints
- GET
/
- Root endpoint with project information - GET
/health
- Health check endpoint
Todo Endpoints
- GET
/api/v1/todos/
- List all todos (with pagination and filtering)- Query parameters:
skip
,limit
,category
,completed
,overdue_only
- Query parameters:
- POST
/api/v1/todos/
- Create a new todo - GET
/api/v1/todos/{todo_id}
- Get a specific todo - PUT
/api/v1/todos/{todo_id}
- Update a specific todo - DELETE
/api/v1/todos/{todo_id}
- Delete a specific todo - GET
/api/v1/todos/categories/{category}
- Get all todos by category - GET
/api/v1/todos/overdue
- Get all overdue todos
Database
The application uses SQLite database stored at /app/storage/db/db.sqlite
.
Schema
todos table:
id
(Integer, Primary Key)title
(String, Required)description
(String, Optional)completed
(Boolean, Default: False)category
(String, Optional) - For organizing todosdue_date
(DateTime with timezone, Optional) - When the todo is duecreated_at
(DateTime with timezone)updated_at
(DateTime with timezone)
Development
Linting and Formatting
# Check and fix linting issues
ruff check . --fix
# Format code
ruff format .
Database Migrations
# Create a new migration
alembic revision --autogenerate -m "Description of changes"
# Apply migrations
alembic upgrade head
# Downgrade
alembic downgrade -1
Project Structure
├── app/
│ ├── api/
│ │ └── v1/
│ │ ├── api.py # API router
│ │ └── todos.py # Todo endpoints
│ ├── core/
│ │ └── config.py # Configuration settings
│ ├── crud/
│ │ └── todo.py # CRUD operations
│ ├── db/
│ │ ├── base.py # SQLAlchemy base
│ │ ├── base_model.py # Model imports
│ │ └── session.py # Database session
│ ├── models/
│ │ └── todo.py # SQLAlchemy models
│ └── schemas/
│ └── todo.py # Pydantic schemas
├── migrations/ # Alembic migrations
├── main.py # FastAPI application
└── requirements.txt # Python dependencies
Description
Languages
Python
97%
Mako
3%