Automated Action d60767d0ba Add categories and tags features
- Create Category and Tag models
- Create TodoTag association table
- Add category_id to Todo model
- Create Alembic migration for new tables
- Create schemas for Category and Tag
- Update Todo schemas to include Category and Tags
- Create CRUD operations for Categories and Tags
- Update Todo CRUD operations to handle categories and tags
- Create API endpoints for categories and tags
- Update Todo API endpoints with category and tag filtering
- Update documentation
2025-06-17 02:52:26 +00:00

222 lines
5.5 KiB
Markdown

# TaskMaster Pro - FastAPI Backend
A powerful, secure RESTful API for managing tasks and todos, built with FastAPI and SQLite.
## Features
- 🔐 Enhanced JWT Authentication
- Access and Refresh tokens
- Token revocation (logout)
- Role-based access control (User/Admin roles)
- 📝 Todo CRUD operations
- Priority levels (High, Medium, Low)
- Due dates for better task management
- Categories for task organization
- Tags for flexible grouping and filtering
- Smart ordering by priority and due date
- 👤 User management
- 🔍 Advanced todo filtering and pagination
- 📄 API documentation (via Swagger UI and ReDoc)
- 🔄 Database migrations (Alembic)
## Requirements
- Python 3.8+
- FastAPI
- SQLAlchemy
- Alembic
- Pydantic
- SQLite
## Installation
1. Clone the repository
2. Install dependencies:
```bash
pip install -r requirements.txt
```
3. Run database migrations:
```bash
alembic upgrade head
```
## Running the Application
Start the server with:
```bash
uvicorn main:app --reload
```
The API will be available at http://localhost:8000.
- API Documentation: http://localhost:8000/docs
- Alternative Documentation: http://localhost:8000/redoc
- OpenAPI Schema: http://localhost:8000/openapi.json
- Health Check: http://localhost:8000/health
## Environment Variables
The application can be configured using the following environment variables:
| Variable | Description | Default |
|----------|-------------|---------|
| SECRET_KEY | Secret key for JWT encoding | Auto-generated |
| ACCESS_TOKEN_EXPIRE_MINUTES | JWT token expiration time (minutes) | 11520 (8 days) |
## API Endpoints
### Authentication
- `POST /api/v1/auth/register` - Register a new user
- `POST /api/v1/auth/login` - Login and get access token
- `POST /api/v1/auth/refresh` - Refresh access token using refresh token
- `POST /api/v1/auth/logout` - Logout and revoke refresh token
### Users
- `GET /api/v1/users/` - List all users
- `GET /api/v1/users/me` - Get current user details
- `PUT /api/v1/users/me` - Update current user
- `GET /api/v1/users/{user_id}` - Get user by ID
### Admin
- `GET /api/v1/admin/users` - List all users (admin only)
- `GET /api/v1/admin/users/{user_id}` - Get user by ID (admin only)
- `PUT /api/v1/admin/users/{user_id}` - Update user (admin only)
### Todos
- `GET /api/v1/todos/` - List todos (with filtering and pagination)
- `POST /api/v1/todos/` - Create a new todo
- `GET /api/v1/todos/{id}` - Get todo by ID
- `PUT /api/v1/todos/{id}` - Update a todo
- `DELETE /api/v1/todos/{id}` - Delete a todo
### Categories
- `GET /api/v1/categories/` - List all categories
- `POST /api/v1/categories/` - Create a new category
- `GET /api/v1/categories/{id}` - Get category by ID
- `PUT /api/v1/categories/{id}` - Update a category
- `DELETE /api/v1/categories/{id}` - Delete a category
### Tags
- `GET /api/v1/tags/` - List all tags
- `POST /api/v1/tags/` - Create a new tag
- `GET /api/v1/tags/{id}` - Get tag by ID
- `PUT /api/v1/tags/{id}` - Update a tag
- `DELETE /api/v1/tags/{id}` - Delete a tag
#### Todo Filtering
The `GET /api/v1/todos/` endpoint supports the following query parameters:
- `skip`: Number of records to skip (default: 0)
- `limit`: Maximum number of records to return (default: 100)
- `title`: Filter by title (contains search)
- `is_completed`: Filter by completion status (true/false)
- `priority`: Filter by priority level (low, medium, high)
- `due_date_before`: Filter for todos due before this date
- `due_date_after`: Filter for todos due after this date
- `category_id`: Filter by category ID
- `tag_id`: Filter by tag ID
## Database Schema
### User Model
```
id: Integer (Primary Key)
email: String (Unique, Indexed)
hashed_password: String
is_active: Boolean (Default: True)
role: Enum(admin, user) (Default: user)
```
### Todo Model
```
id: Integer (Primary Key)
title: String (Indexed)
description: Text (Optional)
is_completed: Boolean (Default: False)
priority: Enum(low, medium, high) (Default: medium)
due_date: DateTime (Optional)
category_id: Integer (Foreign Key to Category, Optional)
owner_id: Integer (Foreign Key to User)
```
### Category Model
```
id: Integer (Primary Key)
name: String (Unique, Indexed)
description: String (Optional)
owner_id: Integer (Foreign Key to User)
```
### Tag Model
```
id: Integer (Primary Key)
name: String (Unique, Indexed)
owner_id: Integer (Foreign Key to User)
```
### TodoTag Association Table
```
todo_id: Integer (Foreign Key to Todo, Primary Key)
tag_id: Integer (Foreign Key to Tag, Primary Key)
```
### RefreshToken Model
```
id: Integer (Primary Key)
token: String (Unique, Indexed)
expires_at: DateTime
created_at: DateTime
revoked: Boolean (Default: False)
user_id: Integer (Foreign Key to User)
```
## Development
### Code Structure
- `app/`: Main application package
- `api/`: API routes and dependencies
- `core/`: Core functionality (config, security)
- `crud/`: CRUD operations
- `db/`: Database setup and session management
- `models/`: SQLAlchemy models
- `schemas/`: Pydantic schemas
- `storage/`: Storage for database and other files
- `migrations/`: Alembic migrations
- `main.py`: Application entry point
### Adding New Models
1. Create a new model in `app/models/`
2. Import the model in `app/db/base_class.py`
3. Create corresponding Pydantic schemas in `app/schemas/`
4. Create CRUD operations in `app/crud/`
5. Create API endpoints in `app/api/v1/endpoints/`
6. Generate a new migration:
```bash
alembic revision -m "description"
```
7. Edit the migration file manually
8. Apply the migration:
```bash
alembic upgrade head
```
## License
MIT License