@@ -7,12 +7,13 @@ Taskaza is a secure, async API built with FastAPI. It supports user sign-up/logi
77
88## 📦 Features
99
10- * User registration (` /signup ` ) and login (` /token ` , OAuth2 password flow)
10+ * User registration (` /signup ` ), profile management ( ` /users/me ` ), and login (` /token ` , OAuth2 password flow)
1111* JWT authentication + secure password hashing
1212* API key header (` X-API-Key: 123456 ` ) on protected routes
13- * Task CRUD (create, list, get, update status/full, delete)
14- * Async SQLAlchemy + SQLite, Pydantic v2 validation
15- * Thorough tests (unit + full-flow)
13+ * Hierarchical tasks with nested subtasks, priorities, categories, tags, and computed progress
14+ * Rich task querying (status filters, search, pagination, sorting, include/exclude subtasks) plus bulk create/status updates
15+ * Async SQLAlchemy + SQLite (extensible via ` TSKZ_DATABASE_URL ` ), Pydantic v2 validation
16+ * Thorough async tests (unit + integration/auth flows)
1617
1718[ 📊 View architecture diagram] ( docs/ARCHITECTURE.md )
1819
@@ -32,23 +33,39 @@ X-API-Key: 123456
3233
3334## 📚 API Endpoints
3435
35- ### Users
36+ ### Auth
3637
37- | Method | Endpoint | Description |
38- | ------ | --------- | ----------------------- |
39- | POST | ` /signup ` | Register a new user |
40- | POST | ` /token ` | Login and get JWT token |
38+ | Method | Endpoint | Description |
39+ | ------ | ----------- | ---------------------------------- |
40+ | POST | ` /signup ` | Register a new user |
41+ | POST | ` /token ` | Exchange username/password for JWT |
42+
43+ ### Users (Protected)
44+
45+ | Method | Endpoint | Description |
46+ | ------ | ----------------- | ------------------------------------ |
47+ | GET | ` /users/me ` | Get the authenticated user's profile |
48+ | PUT | ` /users/me ` | Replace the authenticated user's profile |
49+ | PATCH | ` /users/me ` | Partially update your profile |
50+ | DELETE | ` /users/{user_id} ` | Delete your own account |
4151
4252### Tasks (Protected)
4353
44- | Method | Endpoint | Description |
45- | ------ | ------------- | ---------------------- |
46- | POST | ` /tasks/ ` | Create a task |
47- | GET | ` /tasks/ ` | List your tasks |
48- | GET | ` /tasks/{id} ` | Get a task by ID |
49- | PATCH | ` /tasks/{id} ` | Update ** status** only |
50- | PUT | ` /tasks/{id} ` | Update ** entire** task |
51- | DELETE | ` /tasks/{id} ` | Delete a task |
54+ | Method | Endpoint | Description |
55+ | ------ | -------------------- | ------------------------------------------------- |
56+ | POST | ` /tasks ` | Create a task, optionally with nested subtasks |
57+ | GET | ` /tasks ` | List tasks with filtering, search, and pagination |
58+ | GET | ` /tasks/{task_id} ` | Retrieve a task (optionally include the subtree) |
59+ | PUT | ` /tasks/{task_id} ` | Update task fields (partial) |
60+ | PATCH | ` /tasks/{task_id} ` | Update only the task status |
61+ | DELETE | ` /tasks/{task_id} ` | Delete a task |
62+ | POST | ` /tasks/bulk ` | Bulk create tasks and/or change statuses |
63+
64+ ** Extras**
65+
66+ - All ` /tasks/* ` and ` /users/* ` endpoints require both ` Authorization: Bearer <token> ` and ` X-API-Key: 123456 ` .
67+ - ` GET /tasks ` supports ` status ` , ` q ` , ` page ` , ` limit ` , ` sort ` , ` include_tree ` , and ` roots_only ` query params.
68+ - ` POST /tasks ` accepts the ` create_subtree ` query flag (defaults to ` true ` ) to cascade nested subtasks when provided.
5269
5370---
5471
@@ -99,12 +116,22 @@ openssl rand -base64 32
99116
100117### 4) Run locally
101118
102- ** Development:**
119+ ** Development (auto-reload; tests excluded by default) :**
103120
104121``` bash
105122uv run fastapi dev app/main.py
106123```
107124
125+ FastAPI already excludes the ` tests/ ` directory from reloads via ` pyproject.toml ` . To be explicit or customise the ignore pattern:
126+
127+ ``` bash
128+ # macOS/Linux shells
129+ uv run fastapi dev app/main.py --reload-exclude ' tests/*'
130+
131+ # Windows PowerShell
132+ uv run fastapi dev app/main.py --reload-exclude " tests/*"
133+ ```
134+
108135** Production:**
109136
110137``` bash
@@ -119,6 +146,8 @@ docker compose up --build
119146
120147App: [ http://localhost:8000/ ] ( http://localhost:8000/ )
121148
149+ Local SQLite data lives in ` data/taskaza.db ` . Delete the file to reset your environment or set ` TSKZ_DATABASE_URL ` to point at another database.
150+
122151---
123152
124153## 🔁 Export pip-style requirements (for CI/Render)
0 commit comments