"Mutabor" — это веб-приложение для управления задачами с Kanban-доской, созданное для небольших команд. Ключевая особенность — встроенный AI-ассистент, который помогает автоматизировать рутинные задачи, такие как декомпозиция и анализ.
Продукт спроектирован как платформа, позволяющая пользователям подключать свои собственные ключи к AI-провайдерам для персонализации и контроля над расходами.
- 🚀 Установка и Запуск (Installation and Startup)
- 🛠️ Основные команды для разработки (Key Development Commands)
- 🏛️ Архитектура и Ключевые особенности (Architecture and Key Features)
- 🔌 API Документация (API Documentation)
- 💡 Точки расширения (Extension Points)
- ✅ Тестирование (Testing)
В этом разделе описываются различные способы установки и запуска проекта для локальной разработки.
- Node.js (v20.x или выше)
- Docker и Docker Compose
-
Клонировать репозиторий:
git clone https://github.com/your-repo/mutabor.git cd mutabor -
Создать и настроить файл
.envдля API: Скопируйтеapi/.env.exampleвapi/.env(cp api/.env.example api/.env) и проверьте переменные.Ключевые моменты конфигурации:
PORT: Мы рекомендуем установитьPORT=3001, чтобы избежать конфликтов с фронтенд-сервером разработки, который обычно занимает порт3000.DATABASE_URL: Используется приложением Nest.js для подключения к базе данных. Формат зависит от способа запуска БД (см. ниже).DB_*переменные: Обязательны для скрипта миграций Liquibase (npm run migrate). Они должны точно соответствовать настройкам вашей базы данных.JWT_SECRET: Замените значение по умолчанию на ваш собственный секретный ключ.
Этот режим идеален для разработки, так как позволяет запускать сервисы по отдельности.
1. Запуск базы данных в Docker
Мы рекомендуем запускать PostgreSQL через Docker Compose, даже при ручном запуске остальных сервисов.
-
Убедитесь, что у вас есть файл
docker-compose.ymlв корне проекта. -
Запустите только сервис базы данных
dbв фоновом режиме:docker compose up -d db
-
Настройте
api/.env: В вашем файлеapi/.envдолжны быть следующие значения для подключения к БД, запущенной в Docker:# Используется приложением Nest.js DATABASE_URL="postgresql://user:password@localhost:54321/mutabor?schema=public" # Используется скриптом миграций Liquibase DB_HOST=localhost DB_PORT=54321 DB_NAME=mutabor DB_USER=user DB_PASSWORD=password
Примечание: Порт
54321используется, так как он проброшен из контейнера вdocker-compose.yml. Если у вас локально установлен PostgreSQL на порту5432, измените эти значения соответственно. -
Примените миграции БД: После первого запуска или при изменениях схемы выполните:
npm run migrate -w api
Эта команда использует переменные
DB_HOST,DB_PORTи т.д. из вашего.envфайла.
2. Запуск сервисов вручную
Откройте два терминала:
-
Терминал 1: Запуск Бэкенда (API)
npm run start:dev -w api
API будет доступен по адресу
http://localhost:3001(или на порту, указанном вPORT). -
Терминал 2: Запуск Фронтенда (Client)
npm run dev -w client
Фронтенд будет доступен по адресу
http://localhost:3000.
Этот метод запускает всё приложение (фронтенд, бэкенд, БД) одной командой.
- Убедитесь, что ваш файл
api/.envсоздан и в нем установленJWT_SECRET. - Запустите все сервисы:
docker compose up --build
- Фронтенд (Client) будет доступен по адресу:
http://localhost:3000 - Бэкенд (API) будет доступен по адресу:
http://localhost:3001
- Фронтенд (Client) будет доступен по адресу:
npm run start:dev -w <workspace>: Запуститьclientилиapiв режиме разработки с hot-reload.npm run build -w <workspace>: Собрать продакшн-версиюclientилиapi.npm run test -w api: Запустить тесты (unit и интеграционные) для backend.npm run test -w client: Запустить тесты для frontend.npm run lint: Проверить код всего проекта на соответствие стандартам стиля.npm run migrate -w api: Применить новые миграции схемы базы данных Liquibase.
Проект построен как монорепозиторий с двумя основными частями: /api (backend на Nest.js) и /client (frontend на React).
- Модульность: Бэкенд строго разделен на модули (
auth,projects,tasks,notifications). - Строгие слои: Архитектура следует принципам
Layer Guides, где контроллеры "тонкие", а бизнес-логика находится в сервисах. - Человеко-понятные ID: Система использует легко читаемые идентификаторы для задач (
PHX-1,PROJ-10). - Контракты: Все взаимодействие происходит по строгим контрактам (DTO, OpenAPI), что гарантирует предсказуемость.
Автоматически генерируемая интерактивная документация API (Swagger) доступна после запуска бэкенда по адресу:
http://localhost:3001/api/v1/api-docs
Используйте её для изучения и тестирования эндпоинтов.
Пример: Добавление функции "AI-генерация тегов для задачи"
ai.service.ts: Добавьте новый метод в сервис-адаптер.tasks.controller.ts: Создайте новый эндпоинт, который вызывает сервис.tasks.service.ts: Оркестрируйте вызовAiServiceи сохранение результата.
- Шаг 1: Модель данных. Расширить модель
Project, добавив поля для URL репозитория и токена доступа. - Шаг 2: Сервис-адаптер. Создать
GitServiceдля работы с репозиторием. - Шаг 3: Расширение AI. Научить
AiServiceиспользовать контекст из файлов кода.
- Backend: Мы используем Jest. Запуск:
npm run test -w api. - Frontend: Мы используем Vitest. Запуск:
npm run test -w client.
Вы можете запустить генерацию отчетов о покрытии, используя команды test:cov.