Skip to content

kt0ns/Reviewer-Service

Repository files navigation

Reviewer Service

Это бэкенд-сервис для автоматического назначения ревьюеров для Pull Requests (PR) внутри команд. Сервис написан на Go и использует PostgreSQL в качестве базы данных. Он предоставляет HTTP API для управления командами, пользователями и PR.

Содержание

Структура проекта

Проект организован следующим образом:

  • cmd/ — точка входа (main.go).
  • api/ — спецификация API (OpenAPI).
  • internal/ — внутренняя логика приложения:
    • domain/ — структуры данных (User, Team, PR).
    • handler/ — обработка HTTP запросов.
    • service/ — бизнес-логика.
    • repository/ — работа с базой данных.
    • config/ — настройки приложения.
  • migrations/ — SQL файлы для создания таблиц.
  • load-test/ — нагрузочные тесты (k6).
  • interation-tests/ — интеграционные тесты (Python).

Инструкция по запуску

Для удобства управления проектом используется Makefile.

Основные команды

  • Запуск проекта в Docker (рекомендуемый способ):

    make docker-run

    Эта команда соберет и запустит все необходимые контейнеры (приложение, база данных, мигратор). Сервис будет доступен по адресу http://localhost:8080.

  • Остановка проекта:

    make docker-stop
  • Локальная сборка (без Docker):

    make build
  • Локальный запуск (без Docker):

    make run

    Примечание: для локального запуска требуется запущенная база данных PostgreSQL.

  • Запуск тестов:

    make test
  • Запуск линтера:

    make lint
  • Очистка:

    make clean

Миграция базы данных

Для создания таблиц в базе данных используются миграции. Я выбрал этот подход, чтобы хранить историю изменений структуры БД в коде и иметь возможность легко и предсказуемо обновлять базу при добавлении новых функций, вместо того чтобы каждый раз пересоздавать её вручную.

При запуске через docker-compose миграции применяются автоматически.

Конфигурация

Настройки конфигурации управляются в internal/config/config.go. Вы можете загружать конфигурации из переменных окружения или конфигурационных файлов.

Запуск сервиса

Для запуска сервиса используйте Docker Compose:

  1. Сборка и запуск сервиса:
    docker-compose up

Сервис будет доступен по адресу http://localhost:8080.

API Эндпоинты

Эндпоинты API определены в файле api/openapi.yaml.

Детали реализации и принятые решения

В процессе разработки было принято несколько архитектурных решений и улучшений:

  • Поддержка нескольких команд: Хотя первоначальные требования можно было интерпретировать как строгую модель "один пользователь - одна команда", система была спроектирована с учетом будущего расширения. Внутренняя логика поддерживает концепцию принадлежности пользователей к нескольким командам, что позволит в будущем создавать более сложные организационные структуры.
  • Улучшения тестируемости: Для обеспечения надежного интеграционного тестирования был добавлен API эндпоинт clear. Это позволяет полностью сбросить базу данных, гарантируя чистое состояние для каждого запуска набора тестов.
  • Расширяемость Admin API: Структура API спроектирована так, чтобы легко вместить будущие расширения Admin API для лучшего управления системой.
  • Проверка производительности: Были проведены комплексные нагрузочные и интеграционные тесты для проверки того, что сервис соответствует требуемым техническим спецификациям и надежно работает под нагрузкой.

Результаты нагрузочного тестирования

Нагрузочное тестирование проводилось с использованием инструмента k6. Сценарий эмулировал работу пользователей, выполняющих полный жизненный цикл Pull Request (создание, переназначение, слияние) и запросы на получение информации.

Параметры теста:

  • Целевая нагрузка: 10 запросов в секунду (в 2 раза выше требований ТЗ).
  • Длительность: 5 минут.
  • Виртуальные пользователи: 20-200.

Результаты:

Метрика Значение Требование ТЗ Статус
RPS (HTTP) 17.51 - -
RPS (Сценарии) 9.56 5 ✅ OK (x2)
Latency P95 12.61 ms < 300 ms ✅ OK
Success Rate (SLI) 100.00% > 99.9% ✅ OK
Error Rate (5xx) 0.00% < 0.1% ✅ OK

Подробную информацию о методике тестирования и инструкцию по запуску можно найти в README нагрузочных тестов.

Интеграционное тестирование

В проекте реализованы интеграционные тесты, покрывающие основные сценарии использования API. Подробную информацию о них и инструкцию по запуску можно найти в README интеграционных тестов.

Конфигурация линтера

В корень проекта был добавлен файл .golangci.yml для обеспечения согласованности кода. Он настроен с набором стандартных линтеров.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors