- Frontend: Vite + React + TypeScript
- Backend: Node.js + Express + MongoDB (Mongoose)
- База данных: MongoDB (локально в Docker)
- Аутентификация: JWT
docker compose up --build- Frontend: http://localhost:5173
- Backend API: http://localhost:5000
- MongoDB: localhost:27017
cd backend
npm install
# Создайте .env файл (см. backend/.env.example)
npm run devnpm install
npm run dev -- --host --port 5173MONGODB_URI=mongodb://mongodb:27017/taskmanager
PORT=5000
UPLOAD_DIR=./uploads
JWT_SECRET=your_secret_key_herePOST /api/auth/register- Регистрация{ "email": "user@example.com", "password": "password123" }POST /api/auth/login- Вход{ "email": "user@example.com", "password": "password123" }GET /api/auth/profile- Профиль (требует JWT токен)
Все остальные роуты требуют JWT токен в заголовке:
Authorization: Bearer <token>
GET /api/projects- Список проектовGET /api/projects/:id- Проект по IDPOST /api/projects- Создать проект{ "name": "Название", "description": "Описание" }PUT /api/projects/:id- Обновить проектDELETE /api/projects/:id- Удалить проект
GET /api/tasks?projectId=xxx- Список задач (с фильтром по проекту)GET /api/tasks/:id- Задача по IDPOST /api/tasks- Создать задачу{ "title": "Название", "description": "Описание", "status": "todo", "projectId": "xxx", "assigneeName": "Имя исполнителя", "attachments": ["/uploads/file.pdf"] }PUT /api/tasks/:id- Обновить задачуDELETE /api/tasks/:id- Удалить задачу
POST /api/upload- Загрузить файл (multipart/form-data, полеfile)- Возвращает:
{ "url": "/uploads/filename.ext" }
- Возвращает:
-
Регистрация
POST http://localhost:5000/api/auth/register Body: { "email": "test@test.com", "password": "123456" } -
Вход
POST http://localhost:5000/api/auth/login Body: { "email": "test@test.com", "password": "123456" } Response: { "token": "...", "user": {...} } -
Создать проект (с токеном)
POST http://localhost:5000/api/projects Headers: Authorization: Bearer <token> Body: { "name": "Мой проект", "description": "Описание" } -
Создать задачу
POST http://localhost:5000/api/tasks Headers: Authorization: Bearer <token> Body: { "title": "Новая задача", "projectId": "xxx", "status": "todo", "assigneeName": "Иван" } -
Загрузить файл
POST http://localhost:5000/api/upload Headers: Authorization: Bearer <token> Body: form-data, поле "file"
├── backend/
│ ├── controllers/ # Контроллеры (auth, projects, tasks)
│ ├── models/ # Mongoose модели
│ ├── middleware/ # JWT auth, upload
│ ├── uploads/ # Загруженные файлы
│ ├── app.js # Главный файл сервера
│ └── db.js # Подключение к MongoDB
├── src/
│ ├── api/ # API клиенты
│ ├── components/ # React компоненты
│ ├── context/ # Context API (проекты, задачи)
│ ├── pages/ # Страницы приложения
│ └── types/ # TypeScript типы
└── docker-compose.yml # Docker конфигурация