Реализовать сервис курьерской доставки для покупателей интернет-магазинов.
- Интернет-магазин делает запрос в сервис доставки на создание заказа.
- Сервис доставки регистрирует заказ и возвращает свой UUID для отображения пользователю интернет-магазина.
- Интернет-магазин может сделать запрос на отмену заказа или получение текущего статуса доставки.
- Разработать RESTFul API сервиса доставки согласно спецификации.
API
должен позволять делать:POST /order
: Создание заказа на доставку.DELETE /order/{id}
: Отмену заказа.GET /order/{id}
: Получение статуса заказа.
- Допускается использование любого PHP фреймворка из списка:
- Yii2
- Symfony
- Laravel
- Slim
- Проект следует разместить в отдельном публичном репозитории на
GitHub
илиBitbucket
. - Развертывание проекта должно осуществляться с использованием
Docker
контейнеров. - Проект должен включать инструкции и скрипты для его развертывания в
DEV
окружении. - Стартовые миграции базы данных должны выполняться автоматически.
- Реализуйте аутентификацию и авторизацию запросов, используя JWT согласно
спецификации
. - Создайте автоматические модульные (unit) тесты для проверки корректности работы API.
- Добавьте файловое логирование событий, связанных с созданием и удалением заказов с учетом, что целевая нагрузка на систему - 10 заказов в секунду, 24/7.
- Добавьте в реализацию отдельный сервис аутентификации и авторизации.
- Сервис должен выдавать короткоживущие многоразовые токены доступа
JWT
и долгоживущие одноразовыеrefresh token
. - Решение должно минимизировать последствия кражи токенов доступа и снижать количество запросов к БД.
- При этом клиенты не должны часто "отлогиниваться" или испытывать какой-либо дискомфорт.
- Реализуйте методы определения времени и стоимости доставки.
- В целях расчёта времени доставки, вам понадобится использовать один из сервисов гео локации для определения расстояния между двумя точками на карте.
- Для получения данных, позволяющих определить стоимость доставки:
- Необходимо доработать метод
POST /order
сервиса доставки путём расширенияспецификации
. - Для примера, можно добавить требование к интернет-магазинам передавать параметры, необходимые для расчёта стоимости.
- В простом случае, стоимость доставки можно посчитать как 5% от общей суммы заказа.
- Необходимо доработать метод