Skip to content

Repository files navigation

PR Reviewer Assignment Service

Сервис для автоматического назначения ревьюеров на PR из команды автора, с возможностью перераспределения и управления активностью пользователей.

Возможности

  • Управление командами и пользователями
  • Автоматическое назначение ревьюеров при создании PR
  • Перераспределение ревьюеров
  • Массовая деактивация пользователей с автоматическим перераспределением PR
  • Статистика

Быстрый старт

Docker Compose

# Запуск всех сервисов
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.go

Команды

make 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

Проверить и использовать 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 - создание PR
  • POST /pullRequest/merge - мерж PR
  • POST /pullRequest/reassign - перераспределение ревьюера

Статистика:

  • GET /stats/prs-total - общее количество PR
  • GET /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 - строка подключения к PostgreSQL
  • LOG_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+

About

A service that assigns reviewers to PRs from the author's team allows you to reassign reviewers, retrieve a list of PRs assigned to a specific user, and manage teams and user activity.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages