Skip to content
 
 

Repository files navigation

Тестовое задание: Backend Developer

Стек проекта: Kotlin, Spring Boot, Gradle (Kotlin DSL).


📋 Задачи

1. Починка рантайм-ошибки

  • Проблема: При попытке вызвать существующий эндпоинт GET /api/delivery/assign?deliveryId=1 приложение падает с ошибкой в консоли и не возвращает результат.
  • Что нужно сделать: Локализуй проблему, пойми причину падения и исправь дефект так, чтобы запрос отрабатывал успешно.
  • Что мы оцениваем: Умение читать логи ошибок, пользоваться дебаггером и способность находить/устранять некорректные связи между компонентами Spring.

2. Рефакторинг алгоритма

  • Проблема: В классе ru.mvideo.test.delivery.service.CourierAssignmentService найди метод findBestCourier. Сейчас он написан в уродливом, нечитаемом императивном стиле с кучей вложенных циклов и условий.
  • Что нужно сделать: Перепиши этот алгоритм, используя возможности Kotlin. Код должен стать лаконичным и легко читаемым.
  • Что мы оцениваем: Понимание концепций функционального программирования, знание стандартной библиотеки Kotlin и умение писать чистый код без лишних мутаций данных (var).

3. Реализация новой фичи

  • Что нужно сделать: Добавь в проект возможность управлять жизненным циклом доставки. Для этого реализуй эндпоинт PUT /api/delivery/{id}/status, который меняет статус доставки (CREATED -> IN_TRANSIT -> DELIVERED).
  • Требования к фиче:
    • Реализуй валидацию переходов бизнес-логики: например, нельзя перевести доставку из статуса CREATED сразу в DELIVERED, минуя стадию IN_TRANSIT.
    • Если логика перевода статуса нарушена (или доставка с таким id не найдена), сервис должен возвращать понятную ошибку с корректным HTTP-статусом (например, 400 Bad Request или 404 Not Found), а не падать с 500 Internal Server Error.
    • Напиши 2–3 Unit-теста на слой валидации этих статусов.
  • Что мы оцениваем: Правильное разделение кода по слоям (Controller -> Service -> Repository), умение обрабатывать кастомные исключения в Spring Boot и базовую культуру написания тестов.

4. Оформление результатов

  • Что нужно сделать: Оформи результат выполнения задания в виде Pull Request (PR) на GitHub.

⚙️ Инструкция по запуску и проверке

  1. Склонируй репозиторий.
  2. Проверь, что проект успешно собирается локально:
   ./gradlew clean build

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages