Сервис для автоматического назначения ревьюеров на Pull Request'ы (PR) внутри команд разработки. Позволяет управлять командами, участниками и автоматически распределять ревью между активными членами команды.
- Управление пользователями и командами
- Создание и управление пользователями с флагом активности isActive
- Создание и управление командами разработчиков
- Назначение пользователей в команды
- Создание PR с автоматическим назначением ревьюеров
- Автоматический подбор до 2 активных ревьюеров из команды автора
- Исключение автора PR из списка возможных ревьюеров
- Переназначение ревьюеров при необходимости
- Merge PR с блокировкой дальнейших изменений состава ревьюеров
- Получение списка PR, назначенных конкретному пользователю
- Проверка статуса PR (OPEN/MERGED)
- Идемпотентная операция merge
Основной стек
Язык: Go
База данных: PostgreSQL
API: RESTful HTTP API с OpenAPI спецификацией
Контейнеризация: Docker + Docker Compose
- Объём данных: до 20 команд и 200 пользователей
- RPS: 5 запросов в секунду
- Время ответа (SLI): ≤ 300 мс
- Успешность (SLI): ≥ 99.9%
- Порт: 8080
- При создании PR система автоматически выбирает до 2 активных ревьюеров из команды автора
- Автор PR исключается из списка кандидатов
- Если доступных кандидатов меньше двух, назначается доступное количество (0 или 1)
- Неактивные пользователи (isActive = false) не назначаются
- Замена одного ревьюера на случайного активного участника из команды заменяемого ревьюера
- После merge PR изменение состава ревьюеров запрещено
- Операция merge идемпотентна
Тестирование проводилось с использованием инструмента k6 для оценки производительности сервиса управления Pull Request'ами.
- POST /pullRequest/create - создание Pull Request с назначением ревьюверов
- GET /stats - получение глобальной статистики и топа ревьюверов
| Метрика | Результат | Требование ТЗ | Статус |
|---|---|---|---|
| RPS (запросов/сек) | 15.04 | 5 | ✅ Выполнено |
| Время ответа | 21.42 ms | < 300 ms | ✅ Выполнено |
| Успешность запросов | 100% | > 99.9% | ✅ Выполнено |
- Всего запросов: 554
- Ошибок: 0 (0.00%)
- Среднее время ответа: 10.53 ms
- Максимальное время ответа: 78.35 ms
- Процент успешных запросов: 100%