Rewrite README with comprehensive documentation

- Add modern formatting with emojis and clear sections
- Include detailed API reference with request/response examples
- Add project structure overview
- Include development, deployment, and contribution guidelines
- Enhance quick start instructions with virtual environment setup
- Add health check documentation and code quality tools
This commit is contained in:
Automated Action 2025-06-17 07:54:18 +00:00
parent ae91c493c6
commit 974e0edf44

266
README.md
View File

@ -1,72 +1,232 @@
# Todo API
# FastAPI Todo Application
A simple todo application built with FastAPI and SQLite.
A modern, fast, and feature-rich todo management API built with FastAPI, SQLAlchemy, and SQLite.
## Features
## 🚀 Quick Start
- Create, read, update, and delete todos
- SQLite database with Alembic migrations
- FastAPI with automatic API documentation
- Health check endpoint
- CORS enabled for all origins
### Prerequisites
- Python 3.8+
- pip package manager
## Installation
### Installation & Setup
1. Install dependencies:
```bash
pip install -r requirements.txt
1. **Clone and navigate to the project:**
```bash
git clone <repository-url>
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
}
```
2. Run database migrations:
```bash
alembic upgrade head
#### TodoUpdate
```json
{
"title": "string (optional)",
"description": "string (optional)",
"completed": "boolean (optional)"
}
```
3. Start the application:
```bash
uvicorn main:app --host 0.0.0.0 --port 8000
#### TodoResponse
```json
{
"id": 1,
"title": "string",
"description": "string",
"completed": false,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}
```
## API Endpoints
## 🗂 Project Structure
- `GET /` - Root endpoint with API information
- `GET /health` - Health check endpoint
- `GET /docs` - Interactive API documentation
- `GET /redoc` - Alternative API documentation
- `GET /openapi.json` - OpenAPI specification
```
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
```
### Todo Endpoints
## 🧪 Development
- `POST /todos/` - Create a new todo
- `GET /todos/` - Get all todos (with pagination)
- `GET /todos/{todo_id}` - Get a specific todo
- `PUT /todos/{todo_id}` - Update a todo
- `DELETE /todos/{todo_id}` - Delete a todo
## Data Model
Todo items have the following fields:
- `id`: Unique identifier (auto-generated)
- `title`: Todo title (required)
- `description`: Optional description
- `completed`: Boolean completion status (default: false)
- `created_at`: Creation timestamp
- `updated_at`: Last update timestamp
## Environment Variables
No environment variables are required for basic operation. The SQLite database is stored at `/app/storage/db/db.sqlite`.
## Development
To run with auto-reload during development:
### Running in Development Mode
```bash
uvicorn main:app --reload --host 0.0.0.0 --port 8000
```
## API Documentation
### Code Quality
This project uses Ruff for linting and formatting:
```bash
ruff check .
ruff format .
```
Once the server is running, you can access:
- Interactive documentation: http://localhost:8000/docs
- Alternative documentation: http://localhost:8000/redoc
- OpenAPI specification: http://localhost:8000/openapi.json
### 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.