
- Implemented user authentication with JWT tokens - Created comprehensive task management with CRUD operations - Added category system for task organization - Set up SQLite database with SQLAlchemy ORM - Configured Alembic for database migrations - Added API documentation with OpenAPI/Swagger - Implemented proper authorization and user scoping - Created health check and root endpoints - Updated README with complete documentation
155 lines
4.1 KiB
Markdown
155 lines
4.1 KiB
Markdown
# Personal Task Management API
|
|
|
|
A comprehensive FastAPI-based REST API for managing personal tasks, categories, and user authentication. Built with Python, FastAPI, SQLAlchemy, and SQLite.
|
|
|
|
## Features
|
|
|
|
- **User Authentication**: JWT-based authentication with registration and login
|
|
- **Task Management**: Full CRUD operations for tasks with status and priority tracking
|
|
- **Category Management**: Organize tasks with custom categories
|
|
- **User Authorization**: All operations are user-scoped and protected
|
|
- **Database Migrations**: Alembic for database schema management
|
|
- **API Documentation**: Auto-generated OpenAPI/Swagger documentation
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
- Python 3.8+
|
|
- pip
|
|
|
|
### Installation
|
|
|
|
1. Install 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`
|
|
|
|
### API Documentation
|
|
|
|
- Swagger UI: `http://localhost:8000/docs`
|
|
- ReDoc: `http://localhost:8000/redoc`
|
|
- OpenAPI JSON: `http://localhost:8000/openapi.json`
|
|
|
|
## API Endpoints
|
|
|
|
### Authentication
|
|
- `POST /auth/register` - Register a new user
|
|
- `POST /auth/login` - Login with email and password
|
|
- `GET /auth/me` - Get current user information
|
|
|
|
### Tasks
|
|
- `GET /tasks/` - List all tasks (with filtering options)
|
|
- `POST /tasks/` - Create a new task
|
|
- `GET /tasks/{task_id}` - Get a specific task
|
|
- `PUT /tasks/{task_id}` - Update a task
|
|
- `DELETE /tasks/{task_id}` - Delete a task
|
|
|
|
### Categories
|
|
- `GET /categories/` - List all categories
|
|
- `POST /categories/` - Create a new category
|
|
- `GET /categories/{category_id}` - Get a specific category
|
|
- `PUT /categories/{category_id}` - Update a category
|
|
- `DELETE /categories/{category_id}` - Delete a category
|
|
|
|
### System
|
|
- `GET /` - API information and links
|
|
- `GET /health` - Health check endpoint
|
|
|
|
## Data Models
|
|
|
|
### Task
|
|
- `id`: Unique identifier
|
|
- `title`: Task title (required)
|
|
- `description`: Optional task description
|
|
- `status`: pending, in_progress, completed, cancelled
|
|
- `priority`: low, medium, high, urgent
|
|
- `due_date`: Optional due date
|
|
- `category_id`: Optional category association
|
|
- `completed_at`: Timestamp when task was completed
|
|
- `created_at/updated_at`: Timestamps
|
|
|
|
### Category
|
|
- `id`: Unique identifier
|
|
- `name`: Category name (required)
|
|
- `description`: Optional description
|
|
- `color`: Optional color code
|
|
- `created_at/updated_at`: Timestamps
|
|
|
|
### User
|
|
- `id`: Unique identifier
|
|
- `email`: User email (unique, required)
|
|
- `full_name`: Optional full name
|
|
- `is_active`: Account status
|
|
- `created_at/updated_at`: Timestamps
|
|
|
|
## Environment Variables
|
|
|
|
Set the following environment variables for production:
|
|
|
|
- `SECRET_KEY`: JWT secret key for token signing (required for production)
|
|
|
|
Example:
|
|
```bash
|
|
export SECRET_KEY="your-super-secret-key-here"
|
|
```
|
|
|
|
## Database
|
|
|
|
The application uses SQLite by default with the database file stored at `/app/storage/db/db.sqlite`. The database is automatically created when the application starts.
|
|
|
|
## Authentication
|
|
|
|
The API uses JWT bearer tokens for authentication. To access protected endpoints:
|
|
|
|
1. Register a new user or login with existing credentials
|
|
2. Include the access token in the Authorization header: `Authorization: Bearer <token>`
|
|
|
|
## Development
|
|
|
|
### Code Quality
|
|
|
|
The project uses Ruff for linting and code formatting:
|
|
|
|
```bash
|
|
ruff check .
|
|
ruff format .
|
|
```
|
|
|
|
### Database Migrations
|
|
|
|
Create new migrations after model changes:
|
|
|
|
```bash
|
|
alembic revision --autogenerate -m "Description of changes"
|
|
alembic upgrade head
|
|
```
|
|
|
|
## Architecture
|
|
|
|
- **FastAPI**: Modern, fast web framework for building APIs
|
|
- **SQLAlchemy**: ORM for database operations
|
|
- **Alembic**: Database migration tool
|
|
- **Pydantic**: Data validation using Python type annotations
|
|
- **JWT**: JSON Web Tokens for authentication
|
|
- **SQLite**: Lightweight database for development and small deployments
|
|
|
|
The application follows a clean architecture pattern with separate layers for:
|
|
- API routes (`app/api/`)
|
|
- Database models (`app/models/`)
|
|
- Data schemas (`app/schemas/`)
|
|
- Core utilities (`app/core/`)
|
|
- Database configuration (`app/db/`)
|