Сервис для автоматического назначения ревьюеров на PR из команды автора, с возможностью перераспределения и управления активностью пользователей.
- Управление командами и пользователями
- Автоматическое назначение ревьюеров при создании PR
- Перераспределение ревьюеров
- Массовая деактивация пользователей с автоматическим перераспределением PR
- Статистика
# Запуск всех сервисов
make docker-up
# или docker-compose up
# Остановка
make docker-downДолжны быть установлены
Для MacOS
# Запустить контейнер с БД (или можно поднять у себя локально)
docker compose -f docker-compose-db.yml up --build
# Провести миграцию
GOOSE_DRIVER=postgres \
GOOSE_DBSTRING="postgres://user:pass@localhost:5432/pr_service?sslmode=disable" \
goose -dir ./migrations up
# Запустить программу
go run ./cmd/main.goДля Windows
# Запустить контейнер с БД (или можно поднять у себя локально)
docker compose -f docker-compose-db.yml up --build
# Миграции (PowerShell)
$env:GOOSE_DRIVER = "postgres"
$env:GOOSE_DBSTRING = "postgres://user:pass@localhost:5432/pr_service?sslmode=disable"
goose -dir ./migrations up
# Миграции (cmd.exe)
set GOOSE_DRIVER=postgres
set GOOSE_DBSTRING=postgres://user:pass@localhost:5432/pr_service?sslmode=disable
goose -dir .\migrations up
# Запустить программу
go run ./cmd/main.gomake build # Сборка
make run # Запуск
make test # Unit тесты
make test-all # Все тесты (включая e2e)
make test-cover # Unit тесты с coverage
make bench # Бенчмарки
make lint # Линтинг
make migrate-up # Применить миграции
make migrate-down # Откатить миграцииПроверить и использовать API можно двумя способами:
- OpenAPI:
api/openapi.yml - Postman:
docs/postman_collection.json
Команды:
POST /team/add- создание командыPOST /team/add-member- добавление участникаGET /team/get?team_name=...- получение команды
Пользователи:
POST /users/setIsActive- изменение активностиGET /users/getReview?user_id=...- PR пользователяPOST /users/deactivateByTeam- деактивация команды
PR:
POST /pullRequest/create- создание PRPOST /pullRequest/merge- мерж PRPOST /pullRequest/reassign- перераспределение ревьюера
Статистика:
GET /stats/prs-total- общее количество PRGET /stats/prs-status- PR по статусамGET /stats/top-reviewers- топ ревьюеровGET /stats/assignments-per-user- назначения по пользователямGET /stats/avg-close-time- среднее время закрытияGET /stats/idle-users-per-team- неактивные пользователи по командамGET /stats/needy-prs-per-team- PR, требующие ревьюеров
Health:
GET /health- проверка работоспособности
.
├── cmd/ # Точка входа
├── internal/
│ ├── handlers/ # HTTP обработчики
│ ├── services/ # Бизнес-логика
│ ├── repository/ # Слой данных
│ ├── models/ # Модели данных
│ ├── config/ # Конфигурация
│ └── logger/ # Логирование
├── tests/
│ ├── unit/ # Unit тесты
│ ├── integration/ # Интеграционные тесты
│ ├── e2e/ # End-to-end тесты
│ └── benchmark/ # Бенчмарки производительности
├── migrations/ # Миграции БД
├── api/ # OpenAPI спецификация
└── docs/ # Документация
Переменные окружения (см. env.example):
PORT- порт сервера (по умолчанию: 8080)DB_URL- строка подключения к PostgreSQLLOG_LEVEL- уровень логирования (debug, info, warn, error)LOG_OUTPUT- вывод логов (stdout, stderr, file)LOG_FILE_PATH- путь к файлу логов (если LOG_OUTPUT=file)
# Unit тесты
make test
# Все тесты
make test-allТестами покрыто более 77%
- Go 1.21+
- PostgreSQL 16+