Task management нь хувь хүн болон багийн даалгавруудыг үр дүнтэй удирдах, хянах, зохион байгуулах зориулалттай бүрэн хэмжээний вэб аппликейшн юм. Олон Workspace үүсгэх, даалгавар хуваарилах, хугацаа хянах, мөн дэлгэрэнгүй статистик харах боломжийг нэг дор олгоно.
- Бүх Workspace-ийн тойм — Нийт даалгаврын тоо, дууссан, хийгдэж буй, хугацаа дууссан статистик
- Өнөөдөр дуусах (Due Today) — Өнөөдөр хугацаа нь дуусах даалгавруудыг шууд харах
- High Priority — Яаралтай чухал даалгавруудын тусгай хэсэг
- Overdue Alert — Хугацаа нь хэтрэн даалгавруудыг тодотгон сануулах
- 2 төрлийн харагдац:
- List View — Хүснэгт хэлбэртэй, бүх баганын мэдээлэлтэй
- Board View — Kanban самбар (To do → In progress → Completed)
- Drag & Drop —
@dnd-kitашиглан task-уудыг чирж дарааллыг өөрчлөх - Smart Filters — Priority, Status, Category-ээр шүүх
- Advanced Sorting — Шинэ, хуучин, Priority, Deadline-ээр эрэмбэлэх
- Real-time Search — Нэр, тайлбараар хайх
- Deadline Counter — "Өнөөдөр", "Маргааш", "3 өдрийн дараа" гэх мэт хугацааны харуулалт
- Олон Workspace үүсгэх, засах, устгах
- Workspace тус бүрээр даалгавруудыг тусгаарлах
- Resizable Sidebar — Зүүн цэсний өргөнийг чирж тохируулах
- Custom Icons — Workspace бүрт өөрийн icon сонгох
- JWT-based Authentication
- Password hashing (bcrypt)
- Protected API routes
- Role-based access control
| Технологи | Хэрэглээ |
|---|---|
| React 18 | UI framework (Vite build tool) |
| Tailwind CSS | Utility-first CSS framework |
| @dnd-kit | Drag and Drop функц |
| Axios | HTTP хүсэлт |
| Socket.IO Client | Бодит цагийн мэдэгдэл |
| React Hooks | Custom hooks архитектур |
| Технологи | Хэрэглээ |
|---|---|
| Node.js 22 | Runtime |
| Express | Web framework |
| MongoDB 7 + Mongoose | NoSQL өгөгдлийн сан |
| Socket.IO | Бодит цагийн сервер |
| JWT (jsonwebtoken) | Authentication |
| bcrypt | Password hashing |
| dotenv | Environment variables |
| CORS | Cross-Origin Resource Sharing |
| Технологи | Хэрэглээ |
|---|---|
| Docker | Containerization |
| Docker Compose | Multi-container orchestration |
| Nginx | Production web server & reverse proxy |
| Git | Version control |
Task_Management/
├── frontend/ # React Frontend (Vite)
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ │ ├── Sidebar.jsx # Resizable sidebar
│ │ │ ├── TopBar.jsx # Top navigation
│ │ │ ├── TaskTable.jsx # List view table
│ │ │ ├── TaskModal.jsx # Create/Edit modal
│ │ │ ├── WorkspaceModal.jsx
│ │ │ └── ConfirmModal.jsx # Delete confirmation
│ │ ├── pages/
│ │ │ ├── dashboard/
│ │ │ │ ├── Dashboard.jsx
│ │ │ │ ├── components/ # Overview, BoardView, EmptyState
│ │ │ │ └── hooks/ # useTasks, useWorkspaces, useOverviewTasks
│ │ │ ├── Login.jsx
│ │ │ └── Register.jsx
│ │ ├── context/
│ │ │ └── authcontext.jsx # Auth state management
│ │ └── api/
│ │ └── axios.js # Axios instance + interceptors
│ ├── Dockerfile # Multi-stage Docker build
│ ├── nginx.conf # Nginx тохиргоо (SPA routing)
│ └── package.json
│
├── backend/ # Node.js Backend
│ ├── modules/
│ │ ├── auth/ # Auth routes, controllers
│ │ ├── workspace/ # Workspace CRUD
│ │ └── task/ # Task CRUD
│ ├── middleware/
│ │ └── Authorization.js # JWT middleware + Socket auth
│ ├── routers.js # Route aggregator
│ ├── app.js # Entry point
│ ├── Dockerfile # Multi-stage Docker build
│ └── package.json
│
├── docker-compose.yml # Production Docker setup
├── .gitignore
└── README.md
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Танд 2 арга байна. Хэрэглэх тохиолдлоос хамаарч сонгоно уу:
| Арга | Шаардлагатай зүйлс |
|---|---|
| 🐳 Docker | Docker 20.10+, Docker Compose V2, Git |
| 💻 Local Dev | Node.js 18+, MongoDB 6+, npm/yarn, Git |
Хамгийн хурдан, найдвартай арга. MongoDB, Backend, Frontend (Nginx) бүгд нэг командаар ажиллана.
git clone https://github.com/enkush-3/Task-Management.git
cd opmBackend хавтас дотор .env файл үүсгэнэ:
cd backend
cat > .env << 'EOF'
PORT=3000
MONGODB_URI=mongodb://mongodb:27017/taskdb
JWT_SECRET=your_super_secret_jwt_key_change_this_in_production
CLIENT_URL=http://localhost:8080
NODE_ENV=production
EOF
cd ..
⚠️ ЧУХАЛ: Production-дJWT_SECRET-г заавал өөрчил!
# Бүх service-ийг build хийж эхлүүлэх
docker compose up -d --builddocker compose psИйм харагдах ёстой:
NAME SERVICE STATUS PORTS
opm-mongodb mongodb running 0.0.0.0:27017->27017/tcp
opm-backend backend running 0.0.0.0:3000->3000/tcp
opm-frontend frontend running 0.0.0.0:8080->80/tcp
| Service | URL |
|---|---|
| Frontend | http://localhost:8080 |
| Backend API | http://localhost:3000 |
| MongoDB | mongodb://localhost:27017 |
# Логуудыг харах (real-time)
docker compose logs -f
# Зөвхөн backend-ийн лог
docker compose logs -f backend
# Service-г дахин эхлүүлэх
docker compose restart backend
# Бүхнийг зогсоох
docker compose down
# Volume устгах (бүх MongoDB data устна!)
docker compose down -v
# Бүхнийг цэвэрлэж дахин эхлүүлэх
docker compose down -v --rmi all
docker compose up -d --buildХөгжүүлэлт хийхэд тохиромжтой. Код өөрчлөхөд автоматаар шинэчлэгдэнэ.
Ubuntu/Debian дээр:
# Node.js 22 суулгах (NVM ашиглавал илүү дээр)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 22
nvm use 22
# MongoDB 7 суулгах
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
# MongoDB service эхлүүлэх
sudo systemctl start mongod
sudo systemctl enable mongod
# Шалгах
mongosh --eval "db.runCommand({ ping: 1 })"macOS дээр (Homebrew):
# Node.js
brew install node@22
# MongoDB
brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-communityWindows дээр:
- Node.js татаж суулгах
- MongoDB Community Server татаж суулгах
git clone https://github.com/enkush-3/Task-Management.git
cd opmTerminal 1:
cd backend
npm install
# .env файл үүсгэх
cat > .env << 'EOF'
PORT=3000
MONGODB_URI=mongodb://localhost:27017/taskdb
JWT_SECRET=dev_secret_key_123
CLIENT_URL=http://localhost:5173
NODE_ENV=development
EOF
# Backend эхлүүлэх
npm startАмжилттай гарвал:
Mongodb connected
Server running on port 3000
Terminal 2 (шинэ цонх):
cd frontend
npm install
# .env файл үүсгэх
cat > .env << 'EOF'
VITE_API_URL=http://localhost:3000/api
EOF
# Frontend эхлүүлэх
npm run devАмжилттай гарвал:
VITE v8.0.16 ready in 476 ms
➜ Local: http://localhost:5173/
| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend API | http://localhost:3000 |
| MongoDB | mongodb://localhost:27017 |
# Локал MongoDB-г зогсоох
sudo systemctl stop mongod
# Эсвэл Docker-д өөр порт ашиглах
# docker-compose.yml дотор: ports: "27018:27017"# Docker Compose V2 plugin суулгах
mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 \
-o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose
# Зөв бичих: docker compose (зайтай)
docker compose up -d --buildFrontend-ийн Dockerfile production stage-д Nginx биш Node.js тохируулга орсон байна. frontend/Dockerfile-г шалга:
FROM nginx:alpine AS production
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]frontend/nginx.conf файлын дотор cat, EOF гэх мэт shell командууд орчихсон байна. Зөвхөн nginx config-г л хуул:
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}backend/app.js-д MONGODB_URI-г env-ээс уншиж байгаа эсэхийг шалга:
const mongoUri = process.env.MONGODB_URI || "mongodb://localhost:27017/taskdb";
await mongoose.connect(mongoUri);Docker-д docker-compose.yml-д заавал оруул:
environment:
MONGODB_URI: mongodb://mongodb:27017/taskdbbackend/app.js-д CLIENT_URL-г зөв тохируулсан эсэхийг шалга:
const allowedOrigins = process.env.CLIENT_URL
? process.env.CLIENT_URL.split(',').map(url => url.trim())
: ['http://localhost:5173', 'http://localhost:8080'];
app.use(cors({ origin: allowedOrigins, credentials: true }));| Method | Endpoint | Тайлбар |
|---|---|---|
| POST | /api/auth/register |
Шинэ хэрэглэгч бүртгэх |
| POST | /api/auth/login |
Нэвтрэх (JWT буцаана) |
| Method | Endpoint | Тайлбар |
|---|---|---|
| GET | /api/workspace/getall |
Хэрэглэгчийн бүх workspace |
| POST | /api/workspace/create |
Шинэ workspace үүсгэх |
| PATCH | /api/workspace/update/:id |
Workspace засах |
| DELETE | /api/workspace/:id |
Workspace устгах |
| GET | /api/workspace/getlazy/:id |
Workspace-ийн task-ууд (pagination, filter) |
| GET | /api/workspace/getlazyall |
Бүх workspace-ийн task-ууд (Overview) |
| Method | Endpoint | Тайлбар |
|---|---|---|
| POST | /api/task/create?workspaceId= |
Шинэ task үүсгэх |
| PATCH | /api/task/update/:id |
Task засах |
| DELETE | /api/task/:id |
Task устгах |
| Parameter | Type | Тайлбар |
|---|---|---|
page |
number | Хуудасны дугаар (default: 1) |
limit |
number | Нэг хуудасны task тоо (default: 10) |
sortBy |
string | newest | oldest | priority | deadline |
priority |
string | all | High | Medium | Low |
status |
string | all | To do | In progress | Completed |
search |
string | Хайлтын keyword |








