Skip to content

Latest commit

 

History

History
172 lines (88 loc) · 2.19 KB

File metadata and controls

172 lines (88 loc) · 2.19 KB

📘 FastAPI Task Manager API

A simple, secure, and production-ready Task Manager REST API built with FastAPI, JWT Authentication, Argon2 Password Hashing, and SQLAlchemy ORM. This project is perfect for learning backend development, FastAPI, authentication, and CRUD APIs.

🚀 Features

User Registration & Login (JWT Authentication)

Secure password hashing using Argon2

Create, read, update, delete tasks (CRUD)

SQLite database (easy to run locally)

Protected routes using OAuth2 Bearer Tokens

Pydantic models for validation

Auto-generated API documentation (Swagger UI)

Clean, modular project structure

📦 Tech Stack

FastAPI

SQLAlchemy ORM

Pydantic

Argon2 (argon2-cffi)

SQLite

Python-Jose (JWT)

Uvicorn

⚙️ Installation & Setup

1️⃣ Clone the repository

git clone https://github.com/nahidulhasan/fastapi-task-manager.git

cd fastapi-task-manager

2️⃣ Create & activate virtual environment

python3 -m venv .venv

source .venv/bin/activate

3️⃣ Install dependencies

pip install -r requirements.txt

4️⃣ Run the API

uvicorn app.main:app --reload

API will be available at: http://127.0.0.1:8000

Interactive API docs (Swagger UI): http://127.0.0.1:8000/docs

🔐 Authentication Flow

1️⃣ Register a user

POST /auth/register

Body:

{ "email": "test@example.com", "password": "123456" }

2️⃣ Login to get JWT token

POST /auth/token

Form-data:

username=test@example.com password=123456

Response:

{

"access_token": "<JWT_TOKEN>",

"token_type": "bearer"

}

Use this token for all protected routes:

Authorization: Bearer

📝 Task Endpoints

➕ Create a Task

POST /tasks/ Requires authentication.

Example:

{

"title": "Buy groceries",

"description": "Milk, eggs, bread",

"priority": "HIGH",

"due_date": "2025-01-31T10:00:00" }

📖 Get All Tasks

GET /tasks/

🔍 Get Single Task

GET /tasks/{task_id}

✏️ Update Task

PUT /tasks/{task_id}

Example:

{

"title": "Updated title",

"completed": true

}

🗑 Delete Task

DELETE

/tasks/{task_id}

🗄 Database

SQLite is used by default:

app/tasks.db

❤️ Contributing

Pull requests are welcome! Feel free to open issues or suggest new features.

📜 License

MIT License.