Skip to content

neft1k/Reviewer_assignment_service

Repository files navigation

Запуск

  1. Отредактируйте .env, если требуется
  2. Выполните docker-compose up --build
  3. API будет доступен на http://localhost:8080

Если нужно управлять миграциями вручную, запустите контейнер migrate отдельно (docker-compose run migrate) или отключите автоматический запуск, установив APPLY_MIGRATIONS=false и MIGRATE_ONLY=false для сервиса, после чего поднять его можно отдельной командой docker-compose up app. На лекции в Авито говорили, что прогон миграций при каждом запуске — плохая практика, но по тз сервис должен запускаться одной командой, поэтому используется отдельный миграционный контейнер

Переменные окружения

  • PORT — HTTP-порт сервиса (по умолчанию 8080)
  • POSTGRES_HOST, POSTGRES_PORT, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB — параметры соединения с БД
  • MIGRATIONS_DIR — путь до каталога миграций (по умолчанию internal/db/migrations)
  • APPLY_MIGRATIONS — включение автоматического запуска миграций (по умолчанию true)
  • MIGRATE_ONLY — если true, приложение только применит миграции и завершится

Основные эндпоинты

  • POST /team/add
  • GET /team/get?team_name=...
  • POST /users/setIsActive
  • GET /users/getReview?user_id=...
  • POST /pullRequest/create
  • POST /pullRequest/merge
  • POST /pullRequest/reassign
  • GET /stats/reviewers — дополнительный эндпоинт статистики (топ ревьюеров)

Тестирование

Интеграция (без реальной БД)

docker run --rm -v "$PWD":/app -w /app golang:1.23 go test ./tests

E2E с реальной БД

docker-compose -f docker-compose.e2e.yml up --build tester

Команда поднимает Postgres, приложение и контейнер tester, который дожидается запуска сервиса и выполняет сценарий team/add → pullRequest/create → users/bulkDeactivate. После завершения обязательно остановите окружение и удалите volume, чтобы база была чистой перед следующим запуском:

docker-compose -f docker-compose.e2e.yml down -v

Линтер

Конфигурация для golangci-lint хранится в .golangci.yml. Запускать можно через Docker:

docker run --rm -v "$PWD":/app -w /app golangci/golangci-lint:v1.60.3 golangci-lint run ./...

Нагрузочное тестирование

Сценарий k6 (tests/load/k6.js):

VUs:      10
Длительность: 30 секунд
Эндпоинт: POST /pullRequest/create

Запуск:

docker run --rm \
  -v "$PWD/tests/load":/load -w /load \
  --network reviewer_assignment_service_default \
  -e BASE_URL=http://app:8080 \
  grafana/k6 run k6.js

Ключевые метрики:

  • Всего запросов: 300 (≈9.8 req/s), 0 ошибок.
  • http_req_duration: среднее 12.96 ms, p(90) = 9.4 ms, p(95) = 16.38 ms, максимум = 204.9 ms.
  • iteration_duration: среднее ≈1.01 s (включая паузы в скрипте).

После прогона теста остановите окружение docker-compose down -v.

About

Test assignment from Avito

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages