Сервис автоматического назначения ревьюверов для Pull Request'ов с учетом командной структуры и активности участников.
Сервис реализует систему управления командами, пользователями и Pull Request'ами с автоматическим назначением ревьюверов. При создании PR система автоматически выбирает до 2 активных ревьюверов из команды автора, исключая самого автора и учитывая текущую нагрузку.
- Управление командами и участниками
- Автоматическое назначение до 2 ревьюверов при создании PR
- Интеллектуальный выбор ревьюверов с учетом нагрузки (количество активных ревью)
- Переназначение ревьюверов на других членов команды
- Управление активностью пользователей (админ-функция)
- Отслеживание PR'ов назначенных пользователю
- Go 1.24 - язык программирования
- Gin - веб-фреймворк
- PostgreSQL 16 - база данных
- GORM - ORM
- Docker & Docker Compose - контейнеризация
- golang-migrate - миграции БД
- mockery - генерация моков для тестов
- golangci-lint - статический анализ кода
- Docker и Docker Compose
- Go 1.24+ (для локальной разработки)
- Make (опционально)
- Клонировать репозиторий и перейти в директорию:
cd PR_manager- Создать .env файл на основе примера:
cp .env.example .env- Запустить сервис:
docker-compose up --buildAPI будет доступен по адресу: http://localhost:8080
Создать команду с участниками (создаёт или обновляет пользователей).
curl -X POST http://localhost:8080/team/add \
-H "Content-Type: application/json" \
-d '{
"team_name": "backend",
"members": [
{"user_id": "u1", "username": "Alice", "is_active": true},
{"user_id": "u2", "username": "Bob", "is_active": true},
{"user_id": "u3", "username": "Charlie", "is_active": true}
]
}'Получить команду с участниками.
curl "http://localhost:8080/team/get?team_name=backend"Установить флаг активности пользователя (требуется admin токен).
curl -X POST http://localhost:8080/users/setIsActive \
-H "Content-Type: application/json" \
-H "Authorization: Bearer secret_token" \
-d '{
"user_id": "u2",
"is_active": false
}'Получить PR'ы, где пользователь назначен ревьювером.
curl "http://localhost:8080/users/getReview?user_id=u2"Создать PR с автоматическим назначением ревьюверов.
curl -X POST http://localhost:8080/pullRequest/create \
-H "Content-Type: application/json" \
-d '{
"pull_request_id": "pr-1001",
"pull_request_name": "Add search feature",
"author_id": "u1"
}'Пометить PR как MERGED (идемпотентная операция).
curl -X POST http://localhost:8080/pullRequest/merge \
-H "Content-Type: application/json" \
-d '{
"pull_request_id": "pr-1001"
}'Переназначить ревьювера на другого члена команды.
curl -X POST http://localhost:8080/pullRequest/reassign \
-H "Content-Type: application/json" \
-d '{
"pull_request_id": "pr-1001",
"old_user_id": "u2"
}'Проверка работоспособности сервиса.
curl http://localhost:8080/health make test-unit make test-e2e make lintPR_manager/
├── cmd/ # Точка входа
│ └── main.go
├── db/scripts/ # SQL миграции
├── internal/
│ ├── api/ # HTTP слой
│ │ ├── handlers/
│ │ └── routers/
│ ├── config/ # Конфигурация
│ ├── custom/ # Кастомные ошибки
│ ├── logger/ # Логирование
│ ├── service/ # Бизнес-логика
│ └── storage/ # Слой данных
│ ├── models/
│ └── repository/
└── docker-compose.yml # Docker конфигурация