A production-grade backend system that simulates real-world task workflows with role-based access control and approval pipelines.
Unlike basic CRUD apps, this system enforces strict task lifecycle transitions:
PENDING → IN_PROGRESS → COMPLETION_REQUESTED → COMPLETED / REJECTED
Built with GraphQL, PostgreSQL, and Prisma, focusing on backend architecture and business logic design.
Most task management systems are simple CRUD applications.
This project solves:
- Controlled task lifecycle management
- Approval-based workflows
- Role-based authorization
- Preventing invalid state transitions
-
🔐 JWT Authentication (Access + Refresh tokens in HTTP-only cookies)
-
👥 Role-based authorization (ADMIN / USER)
-
🧠 Task lifecycle management:
PENDING → IN_PROGRESS → COMPLETION_REQUESTED → COMPLETED / REJECTED
-
✅ Admin approval system
-
❌ Rejection with reason tracking
-
🚫 Duplicate request prevention
-
🗂 Modular architecture (Resolvers, Middleware, Context)
- Node.js
- Express.js
- GraphQL (Apollo Server)
- PostgreSQL
- Prisma ORM
- JWT Authentication
-
Context-based authentication
-
Resolver separation:
- Auth
- Task
- TaskRequest
-
Prisma for relational data modeling
-
Middleware for request-level validation
Use Postman collection included in repo:
- Login
- Assign task
- Start task
- Request completion
- Approve / Reject
mutation {
assignTask(title: "Task A", userIds: [3]) {
id
title
status
}
}mutation {
startTask(taskId: 1) {
id
status
}
}mutation {
requestCompletion(taskId: 1) {
task { status }
request { status }
}
}- Clone the repository
git clone <repo-url>- Install dependencies
npm install- Create
.env
DATABASE_URL=your_db_url
JWT_SECRET=your_secret- Run database
npx prisma db push- Start server
node src/index.js- Add database transactions for atomic operations
- Add pagination & filtering
- Add rate limiting
- Add GraphQL subscriptions
- Build frontend (React / Next.js)
- Context-based authentication using cookies
- Separation of concerns (Resolvers, Middleware, Context)
- Prisma relational schema design
- Duplicate request prevention logic
- State-driven workflow implementation
Biswayan Paul