Skip to content

YUNIX-sudo/avito

Repository files navigation

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

Это реализация тестового задания для стажёра Backend (осенняя волна 2025). Сервис представляет собой HTTP API для управления командами, пользователями и назначения ревьюеров на Pull Request'ы.

Готовое (захощенное) решение представлено ниже

https://avito-pr-project-production.up.railway.app/

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

  • Язык: Python 3.11
  • Фреймворк: FastAPI
  • База данных: PostgreSQL
  • Оркестрация: Docker, Docker Compose
  • ORM: SQLAlchemy

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

Для запуска проекта у вас должны быть установлены Docker и Docker Compose.

  1. Клонируйте репозиторий:

    git clone https://github.com/YUNIX-sudo/avito
    cd <project-folder>
  2. Создайте файл .env: Скопируйте содержимое файла .env.example или создайте .env вручную со следующими переменными:

    # PostgreSQL Settings
    DB_NAME=pr_reviewer_db
    DB_USER=pr_reviewer_user
    DB_PASS=pr_reviewer_pass
    DB_HOST=db
    DB_PORT=5432
    
    # Application Settings
    APP_PORT=8080
  3. Makefile для запуска:

    • Запустить проект:

      make up

      Эта команда соберет Docker-образ и запустит контейнеры с приложением и базой данных в фоновом режиме.

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

      make down
    • Посмотреть логи приложения:

      make logs
    • Полностью удалить контейнеры и данные БД:

      make destroy

Доступ к API

  • API: http://localhost:8080
  • Интерактивная документация (Swagger UI): http://localhost:8080/docs
    • При переходе на корень (/) происходит автоматическая переадресация на эту страницу.
  • Альтернативная документация (ReDoc): http://localhost:8080/redoc

Описание допущений и решений

  • Хранение ревьюеров: Список ID ревьюеров для каждого PR хранится в виде строки с разделителями-запятыми (например, "u1,u2"). Это простое решение, подходящее для небольшого количества ревьюеров (до 2). Для более сложной системы можно было бы использовать отдельную связующую таблицу (many-to-many).
  • Миграции: Для простоты таблицы в базе данных создаются при старте приложения (Base.metadata.create_all(bind=engine)). В продакшн-проекте для управления изменениями схемы БД следовало бы использовать инструменты миграций, такие как Alembic.
  • RPC-стиль API: Структура эндпоинтов (/team/add, /users/setIsActive) продиктована предоставленным openapi.yml и следует стилю RPC (Remote Procedure Call), а не классическому REST.

Releases

No releases published

Packages

 
 
 

Contributors