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

  1. Install dependencies:

    pip install -r requirements.txt
    
  2. Run database migrations:

    alembic upgrade head
    
  3. 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

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
  • 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 todos
  • due_date (DateTime with timezone, Optional) - When the todo is due
  • created_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
Project: Todo App
Readme 53 KiB
Languages
Python 97%
Mako 3%