The Task Management System is a comprehensive web application designed to help teams efficiently manage their workflow. It provides essential features such as user authentication, task assignment, role-based access control, and automated email notifications. Our goal is to streamline task tracking, improve productivity, and enhance team collaboration.
- User Authentication: Secure login and registration system with JWT-based authentication
- Email Verification: Users must verify their email before accessing the system
- Role-Based Access Control: Three user roles (USER, MANAGER, TEAM_LEAD) with different permissions
- Task Management:
- Create, assign, and update tasks with detailed information
- Track task status (NotStarted, InProgress, Completed)
- View personal tasks and all tasks based on user role
- Real-time task status updates
- User Management:
- Managers can change user roles
- View users by role
- User profile management
- Email Notifications:
- Automated email notifications for task assignments
- Status update notifications for task creators and assignees
- Professional HTML email templates
- Responsive UI: Modern, clean interface built with React and Tailwind CSS
- Framework: ASP.NET Core 8.0 & C#
- Authentication: JSON Web Token (JWT) with ASP.NET Identity
- Database: MySQL with Entity Framework Core
- API: RESTful API with Swagger documentation
- Email Service: SMTP-based email notifications
- Authorization: Role-based access control
- Framework: React.js with modern hooks
- UI Styling: Tailwind CSS for responsive design
- HTTP Client: Fetch API for backend communication
- State Management: React useState and useEffect
- Version Control: Git & GitHub
- Containerization: Docker & Docker Compose
- Database: MySQL 8.0
- Development: Hot reload and development servers
task-management-system/
βββ backend/ # ASP.NET Core Web API
β βββ src/
β β βββ ApplicationUser/ # User entity and management
β β βββ Authentication/ # JWT authentication logic
β β βββ Task/ # Task management (Entity, Service, Controller, DTOs)
β β βββ User/ # User management endpoints
β β βββ Notification/ # Email notification services
β β βββ Services/ # Email and other services
β βββ Data/ # Database context and configurations
β βββ Interfaces/ # Repository and service interfaces
β βββ Migrations/ # Entity Framework migrations
β βββ Program.cs # Application entry point
βββ frontend/ # React.js application
β βββ src/
β β βββ pages/ # Main application pages
β β βββ components/ # Reusable UI components
β β βββ styles/ # CSS and styling files
β βββ public/ # Static files
β βββ package.json # Frontend dependencies
βββ docker-compose.yml # Docker orchestration
βββ README.md # Project documentation
- .NET SDK 8.0 or later
- Node.js 18+ and npm/yarn
- MySQL Server 8.0 or later
- Docker and Docker Compose
git clone <repository-url>
cd task-management-system# Build and start all services (MySQL, Backend, Frontend)
docker-compose up --build
# Or run in detached mode
docker-compose up -d --build- Frontend: http://localhost:3000
- Backend API: http://localhost:5132
- Swagger Documentation: http://localhost:5132/swagger
- MySQL: localhost:3307
docker-compose downcd backend
# Install dependencies
dotnet restore
# Set up database connection string in appsettings.json
# Update DefaultConnection with your MySQL credentials
# Apply database migrations
dotnet ef database update
# Run the backend application
dotnet run
# Backend will be available at: https://localhost:5001 or http://localhost:5000Create appsettings.json with your configurations:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=TaskManagementDB;User=root;Password=yourpassword;"
},
"Jwt": {
"Key": "your-super-secret-key-here",
"Issuer": "TaskManagementAPI",
"Audience": "TaskManagementClient"
},
"EmailSettings": {
"SmtpServer": "smtp.gmail.com",
"SmtpPort": 587,
"SenderEmail": "your-email@gmail.com",
"SenderPassword": "your-app-password"
}
}cd frontend
# Install dependencies
npm install
# Create environment file
echo "REACT_APP_API_URL=http://localhost:5132" > .env
# Start the frontend application
npm start
# Frontend will be available at: http://localhost:3000The database is automatically created and migrated when using Docker Compose.
- Install MySQL Server 8.0+
- Create a database named
TaskManagementDB - Update connection string in
appsettings.json - Run migrations:
dotnet ef database update
POST /api/auth/register- User registrationPOST /api/auth/login- User loginPOST /api/auth/verify-email- Email verification
GET /api/task- Get all tasksGET /api/task/my- Get user's assigned tasksPOST /api/task- Create new task (MANAGER/TEAM_LEAD only)PUT /api/task/{id}- Update taskDELETE /api/task/{id}- Delete task (MANAGER/TEAM_LEAD only)POST /api/task/{id}/assign- Assign task to users (MANAGER/TEAM_LEAD only)
GET /api/user- Get all usersPUT /api/user/{id}/role- Change user role (MANAGER only)GET /api/user/role/{role}- Get users by role (MANAGER/TEAM_LEAD only)
| Feature | USER | TEAM_LEAD | MANAGER |
|---|---|---|---|
| View own tasks | β | β | β |
| View all tasks | β | β | β |
| Create tasks | β | β | β |
| Update task status | β | β | β |
| Delete tasks | β | β | β |
| Assign tasks | β | β | β |
| Manage user roles | β | β | β |
| View all users | β | β | β |
The system automatically sends HTML-formatted emails for:
- Task Assignment: When a task is assigned to users
- Status Updates: When task status changes, notifications are sent to:
- Task creator
- All assigned users
- JWT token-based authentication
- Role-based authorization
- Secure password hashing with ASP.NET Identity
- CORS protection
- Input validation and sanitization
The project includes Docker support with:
- Multi-stage builds for optimized images
- Docker Compose for easy orchestration
- MySQL container with persistent data
- Networking between services
- Environment variable management
# Build for production
docker-compose -f docker-compose.prod.yml up --build -d- Build frontend:
npm run build - Publish backend:
dotnet publish -c Release - Configure production database and email settings
- Deploy to your hosting provider
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License.
