Skip to content

Repository files navigation

test-backend-maxcore25

Review Assignment Due Date

Это репозиторий для выполнения тестового задания на стажировку в Авито.

Инструкция - в INSTRUCTIONS.md.

Подробное условие задания - в TASK.md.

Описание API — в api.yaml.

Результаты нагрузочного тестирования - в loadtest/RESULTS.md.

Конфигурация линтера - в .golangci.yaml.

Инструкция

Запустить сервис в Docker (работает без .env файла):

# linux
make up

# windows
.\tasks.ps1 up

# или просто
docker compose up -d --build

Swagger API доступен по адресу: http://localhost:8080/docs/index.html

Для защищённых эндпоинтов нажмите кнопку Authorize. В открывшемся окне введите Bearer <токен>.

Остановить сервис, запущенный в Docker:

# linux
make down

# windows
.\tasks.ps1 down

# или просто
docker compose down

# если нужно очистить БД (volume)
docker compose down -v

Заполнить БД тестовыми данными (seed) в Docker:

# linux
make seed

# windows
.\tasks.ps1 seed

Прогнать unit-тесты cо статистикой покрытия:

# linux
make test

# windows
.\tasks.ps1 test

Прогнать integration-тесты cо статистикой покрытия:

# linux
make test-integration

# windows
.\tasks.ps1 test-integration

Прогнать E2E-тесты с testcontainers для тестовой БД PostgreSQL:

# linux
make test-e2e

# windows
.\tasks.ps1 test-e2e

Провести нагрузочное тестирование (load testing):

# linux
make loadtest

# windows
.\tasks.ps1 loadtest

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

# linux
make up
make seed

# windows
.\tasks.ps1 up
.\tasks.ps1 seed

Прогнать линтер:

# linux
make lint

# windows
.\tasks.ps1 lint

Conference Service (мок) и сбои при создании брони

Для опционального поля createConferenceLink: true в POST /bookings/create используется мок внешнего сервиса (internal/bookings/conference), без реального HTTP.

Принятые решения при ошибках:

  1. Мок недоступен / вернул ошибку — бронь не создаётся. Клиент получает 500 с кодом INTERNAL_ERROR (в Swagger для этого сценария предусмотрен общий ответ 500). Ссылка на конференцию в БД не появляется, состояние данных согласовано.
  2. Мок успешен, но запись брони в БД не удалась (редкий сбой инфраструктуры) — в реальной системе могла бы остаться «висячая» конференция у провайдера; в моке побочных эффектов нет.
  3. Гонка двух запросов на один слот — проверка «нет активной брони» выполняется внутри транзакции перед INSERT; второй запрос получает 409 SLOT_ALREADY_BOOKED с сообщением slot is already booked, как в api.yaml.

Имитация сбоя замоканного сервиса: в .env задайте CONFERENCE_MOCK_FAIL=1 или true — любой вызов создания ссылки будет завершаться ошибкой (удобно для ручных проверок).

About

Test task for internship in Avito - service for booking and scheduling meeting rooms

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages