A high-performance, secure, and scalable task tracking backend system built with Flask. This system allows role-based task management, logging, CSV uploads, and automated daily tracking via Celery.
- Modular Flask architecture (Blueprints, Services, Repositories)
- Role-based access control (RBAC)
- PostgreSQL database with SQLAlchemy
- Celery task for daily logging of active tasks
- Redis for caching and message brokering
- JWT Authentication
- CSV upload to seed tasks
- Pydantic-style validation
- Soft-deletion, pagination, and filtered query support
- Rate limiting and secure API handling
| Layer | Tech |
|---|---|
| Backend | Flask, SQLAlchemy, Celery |
| Database | PostgreSQL |
| Messaging | Redis |
| Auth | JWT (JSON Web Tokens) |
| Deployment | Docker |
| Testing | Postman, DBeaver |
git clone https://github.com/yourusername/TaskTrackerPro.git
cd TaskTrackerProFLASK_ENV=development
DATABASE_URL=postgresql://<username>:<password>@localhost:5432/<yourdb>
JWT_SECRET_KEY=your_jwt_secret
REDIS_URL=redis://localhost:6379/0pip install -r requirements.txtalembic upgrade head- Run flask app
python main.py- Celery Worker
$env:PYTHONPATH = "."
celery -A celery_worker.celery_app worker --loglevel=info --pool=solo- Celery Beat
$env:PYTHONPATH = "."
celery -A celery_worker.celery_app beat --loglevel=info- Run your redis server
- Run psql shell
TaskTrackerPro/
βββ app/
β βββ auth/
β βββ models/
β βββ services/
β βββ repositories/
β βββ routes/
β βββ utils/
βββ migrations/
βββ tests/
βββ Dockerfile
βββ docker-compose.yml
βββ README.mdAll protected endpoints require a JWT Bearer token:
Authorization: Bearer <your_token>Use the login endpoint to obtain a token.
| Method | Endpoint | Description |
|---|---|---|
| POST | /upload-csv | Upload CSV to populate TaskManager |
| GET | /tasks | Get paginated task logs |
| GET | /tasks?date=YYYY-MM-DD | Filter logs by date (cached) |
| GET | /task/<logger_id> | Get task details |
| POST | /task | Create a task (admin/user) |
| PUT | /task/<task_id> | Update a task |
| DELETE | /task/<task_id> | Soft delete a task |
Use Postman to test routes. Include the JWT token in headers where required.
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Client (Postman) β
βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββ
β HTTP/HTTPS
βββββββββββββββββββββββββΌβββββββββββββββββββββββββ
β Flask Application Layer β
β βββββββββββββββ βββββββββββββββ β
β β Routes β β Blueprints β β
β βββββββββββββββ βββββββββββββββ β
β β β² β β² β
β JSON β β JSON β β β
β Requests β β Responses β β β
β βΌ β βΌ β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β Services Layer β β
β β - Business logic (e.g., task creation) β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β β² β β² β
β DTOs β β Domain β β β
β βΌ β Models β β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β Repository Layer β β
β β - Pure database operations β β
β β - SQLAlchemy queries β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β β² β
β β β β
β βΌ β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β PostgreSQL β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β² β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β Redis (Cache) β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β Celery β β
β β - Async tasks (e.g., daily logging) β β
β βββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββ
- Client Layer
-
What it is:
- Postman (for testing) or any frontend application
-
Key Actions:
- Sends HTTP requests (e.g., POST /task)
- Receives JSON responses
- Flask Application Layer
-
Routes/Blueprints
- Role:
- Entry point for API requests
- Handles authentication (@jwt_required)
- Rate limiting (@limiter.limit)
- Role:
-
Services Layer
- Role:
- Contains business logic (e.g., "Only admins can delete tasks")
- Coordinates between repositories and routes
- Role:
- Data Access Layer
-
Repositories
- Role:
- Pure database operations (CRUD)
- No business logic
- Role:
-
Models
- Role:
- Define database schema (PostgreSQL tables)
- Relationships (e.g., TaskManager β TaskLogger)
- Role:
- Infrastructure Layer
-
PostgreSQL
- Role:
- Primary database for all persistent data
- Managed via SQLAlchemy ORM
- Role:
-
Redis
- Role:
- Caching (e.g., paginated task lists)
- Rate limiting storage
- Celery message broker
- Role:
-
Celery
- Role:
- Handles async tasks (e.g., daily task logging)
- Uses Redis as a message queue
- Role:
- Critical Data Flows
- Task Creation
sequenceDiagram
Client->>Routes: POST /task (JSON)
Routes->>Services: Validate input
Services->>Repositories: Save to DB
Repositories->>PostgreSQL: INSERT task
PostgreSQL->>Repositories: New task ID
Repositories->>Services: Task object
Services->>Routes: Return ID
Routes->>Client: 201 Created
-Modular code architecture -Input validation and error handling -Secure database access -Logging and auditing -Avoiding duplicate task logs -Docker-ready configuration
For detailed api explanation plese refer to API Guide
Made with π» by Rishank Jain.
This project is licensed under the MIT License.