todoapp-vgv7cg/README.md
Automated Action cf0d0e45b0 Update README with Categories system documentation
- Document category management features
- Update API endpoints to include categories
- Revise project structure to reflect current implementation
- Add usage examples for categories and filtering
- Remove references to unimplemented features
- Update models documentation for Todo and Category
2025-06-19 00:09:01 +00:00

153 lines
4.4 KiB
Markdown

# Simple Todo API
A simple todo application built with FastAPI and SQLite.
## Features
- Create, read, update, and delete todos
- Category management system for organizing todos
- Priority levels for todos (low, medium, high)
- Search and filtering by category, priority, and completion status
- SQLite database with SQLAlchemy ORM
- Database migrations with Alembic
- FastAPI with automatic OpenAPI documentation
- CORS enabled for all origins
- Health check endpoint
## API Endpoints
### General
- `GET /` - Root endpoint with basic information
- `GET /health` - Health check endpoint
- `GET /docs` - Interactive API documentation (Swagger UI)
- `GET /redoc` - Alternative API documentation
### Todos
- `GET /api/v1/todos` - Get all todos (with filtering by category, priority, completion status, and search)
- `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
### Categories
- `GET /api/v1/categories` - Get all categories
- `POST /api/v1/categories` - Create a new category
- `GET /api/v1/categories/{category_id}` - Get a specific category
- `PUT /api/v1/categories/{category_id}` - Update a specific category
- `DELETE /api/v1/categories/{category_id}` - Delete a specific category
## Installation
1. Install the dependencies:
```bash
pip install -r requirements.txt
```
2. Run database migrations:
```bash
alembic upgrade head
```
3. Start the application:
```bash
uvicorn main:app --reload
```
The API will be available at `http://localhost:8000`
## Project Structure
```
├── app/
│ ├── api/
│ │ └── v1/
│ │ ├── __init__.py
│ │ ├── todos.py
│ │ └── categories.py
│ ├── crud/
│ │ ├── __init__.py
│ │ ├── todo.py
│ │ └── category.py
│ ├── db/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ └── session.py
│ ├── models/
│ │ ├── __init__.py
│ │ ├── todo.py
│ │ └── category.py
│ ├── schemas/
│ │ ├── __init__.py
│ │ ├── todo.py
│ │ └── category.py
│ └── __init__.py
├── alembic/
│ ├── versions/
│ │ ├── 001_initial_todo_table.py
│ │ ├── 002_add_priority_field.py
│ │ └── 003_add_categories.py
│ ├── env.py
│ └── script.py.mako
├── alembic.ini
├── main.py
├── requirements.txt
└── README.md
```
## Database
The application uses SQLite database stored at `/app/storage/db/db.sqlite`. The database schema is managed using Alembic migrations.
## Models
### Todo Model
Each todo has the following fields:
- `id`: Unique identifier (auto-generated)
- `title`: Todo title (required, max 200 characters)
- `description`: Todo description (optional, max 500 characters)
- `completed`: Completion status (boolean, default: false)
- `priority`: Priority level (low, medium, high, default: medium)
- `category_id`: Reference to category (optional)
- `created_at`: Creation timestamp
- `updated_at`: Last update timestamp
### Category Model
Each category has the following fields:
- `id`: Unique identifier (auto-generated)
- `name`: Category name (required, max 100 characters, unique)
- `description`: Category description (optional, max 500 characters)
- `color`: Color code in hex format (optional, e.g., #FF0000)
- `created_at`: Creation timestamp
- `updated_at`: Last update timestamp
## Usage Examples
### Creating a Category
```bash
curl -X POST "http://localhost:8000/api/v1/categories" \
-H "Content-Type: application/json" \
-d '{"name": "Work", "description": "Work related tasks", "color": "#FF6B6B"}'
```
### Creating a Todo with a Category
```bash
curl -X POST "http://localhost:8000/api/v1/todos" \
-H "Content-Type: application/json" \
-d '{"title": "Review presentation", "description": "Review the quarterly presentation", "category_id": 1, "priority": "high"}'
```
### Filtering Todos by Category
```bash
curl "http://localhost:8000/api/v1/todos?category_id=1"
```
### Filtering Todos by Priority and Completion Status
```bash
curl "http://localhost:8000/api/v1/todos?priority=high&completed=false"
```
### Search Todos
```bash
curl "http://localhost:8000/api/v1/todos?search=presentation"
```