Skip to content

Mockird31/avito_tech

Repository files navigation

Сервис назначения ревьюеров для Pull Request’ов

Стек технологий

  • Golang 1.24
  • PostgreSQL
  • Docker
  • make

Запуск проекта

Для запуска сначала необходимо скопировать .env файл

cp .env.example .env

Затем выполнить команду

make docker-up

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

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

Для запуска модульных тестов сначала необходимо сгенерировать моки командой

make generate-mocks

и затем выполнить команду

make test

В конце вывода будет показано покрытие кода тестами. На данный момент покрытие составляет примерно 40%.

Для запуска e2e-тестов необходимо выполнить команду

make e2e

Дополнительные команды

Для проверки кода с помощью линтеров необходимо выполнить следующую команду.

make run_linter

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

make run_format

Линтеры

Линтер Комментарий
goimports форматирует код и автоматически упорядочивает/добавляет/удаляет импорты
errcheck проверяет, что возвращаемые ошибки не игнорируются и корректно обрабатываются
goconst находит повторяющиеся литералы, которые стоит вынести в константы
govet выявляет подозрительные конструкции и типичные ошибки (например, теневание переменных, неверные форматные строки)
ineffassign обнаруживает неэффективные присваивания переменным, результаты которых не используются
staticcheck расширенный статический анализ - ловит баги, антипаттерны и потенциальные проблемы производительности
unused находит неиспользуемые переменные, функции, типы, поля и импорты
misspell исправляет/подсвечивает опечатки в комментариях и строках

Дополнительные обработчики

Обработчик Что делает
/stats/assignmentsByReviewers отдает массив словарей, которые содержат идентификатор пользователя и число открытых pull request'ов, где он назначен reviwer'ом
/users/deactivate/ на вход получает json, представленный ниже и деактивирует пользователей, если они в одной команде, также переназначает ревьюверов для pull request'а
"team_name": "test_backend",
"users_ids": [
    "tb1",
    "tb6"
]

}

Индексы

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

Таблица Колонка с индексом
"user" id (при создании таблицы)
"user" team_name
"user" (team_name, id) is_active = TRUE (составной индекс)
pull_request_reviewers reviewer_id, pull_request_id (составной индекс)
pull_request author_id
pull_request name

Команды make

Команда Описание
docker-up Поднимает сервисы из docker-compose с пересборкой образов.
docker-remove Полностью очищает Docker, удаляя все контейнеры и образы.
docker-stop Останавливает docker-compose и удаляет связанные ресурсы.
clean Удаляет временные файлы, каталоги моков и отчёты покрытия.
generate-mocks Генерирует моки для Go-интерфейсов с помощью Mockery.
test Запускает проектный скрипт тестирования.
e2e Выполняет end-to-end тесты с тегом e2e.
run_linter Запускает golangci-lint для анализа кода.
run_format Форматирует Go-код и упорядочивает импорты.

Сделанные допущения

В случае, когда не на кого переназначить pull request, проверяющий остается прежний. В логи пишется, что не удалось найти проверяющего, а пользователю отдается валидный JSON, в котором проверяющий остался тот же.

В случае, когда пытаются изменить ревьюверов у pull request'а, указывая old_reviewer_id, который на самом деле не является ревьювером этого pull request'а, сервер отдаст ошибку 404 (resource not found).

В случае, когда не осталось активных проверяющих при вызове обработчика /users/deactivate, остаются те же проверяющие, что и до вызова метода.

Ошибка присылается структурой

{
  "error": {
    "code": 409,
    "message": "team_name already exists"
  }
}

Решил отправлять код ошибки, вместо текстового описания кода ошибки.

Дополнительные задачи

  • Добавить простой эндпоинт статистики (например, количество назначений по пользователям и/или по PR).
  • Добавить метод массовой деактивации пользователей команды и безопасную переназначаемость открытых PR (стремиться уложиться в 100 мс для средних объёмов данных).
  • Реализовать интеграционное или E2E-тестирование.
  • Описать конфигурацию линтера.

TODO

Покрыть тестами repository, usecase, handler.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages