Вы устроились на работу в компанию Fridge Master.
Компания занимается хранением портящихся продуктов для клиентов по всему миру. Имея холодильные мощности в 6 локациях, гибкую систему бронирования и отличный сервис, компания завоевала доверие крупных корпораций. Но последние 3 года рост замедляется, хотя и удается занимать бОльшую долю рынка.
Недавно пришел новый CEO, который решил, что для развития компании необходимо начать предоставлять услуги для малого и микро-бизнеса. В рамках решения задачи требуется существенно упростить процессы бронирования и разработать мобильное приложение, которое позволит бронировать и отслеживать свои продукты “в 1 клик”.
Вам, как бекенд-разработчику, было поручено разработать API для мобильного приложения. CEO не является экспертом в технической области, и все, что команде удалось у него узнать о функциональности разрабатываемого приложения, изложено ниже в виде описания бизнес-процессов и пользовательского потока (user flow).
У компании есть 6 локаций холодильных мощностей:
- Уилмингтон (Северная Каролина)
- Портленд (Орегон)
- Торонто
- Варшава
- Валенсия
- Шанхай
На каждой локации размещается много морозильных помещений. В каждом помещении поддерживается заданная температура и оно вмещает определенное количество “морозильных блоков” (в компании их называют просто “block”). Все блоки имеют “стандартный размер”: 2 метра в длину и 1 метр в ширину/высоту.
Когда клиент обращается за бронью - ему предлагают минимально возможное количество блоков для размещения его продуктов. Блоки, удовлетворяющие бронь, должны размещаться в помещениях с температурой +-2 *C от заказанной клиентом, но “не пересекать границу” 0 *С.
Стоимость хранения одного блока не зависит от локации или температуры помещения, а тарификация производится с округлением к суткам (в часовом поясе локации).
- При заходе в приложение пользователь должен увидеть весь список доступных локаций с информацией о количестве свободных блоков в каждой.
- Выбрав одну из локаций пользователю показывается калькулятор, где он может ввести объем продуктов (в м3), необходимую
температуру хранения и сроки хранения (не дольше 24 дней). После нажатия кнопки
Calculateотображается необходимое количество блоков, исходя из которого вычисляется стоимость хранения и доступность (не всегда есть достаточное количество свободных блоков). - При согласии пользователя с результатами калькулятора, он нажимает на кнопку бронирования
Book blocks. - В меню приложения есть кнопка
My bookings, где отображаются все его брони за все время с актуальными статусами и затратами. - Для того чтобы доставить или забрать продукты, необходимо на складе показать специальный код доступа (12 рандомных
букв и цифр). Этот код можно увидеть нажав на свое бронирование в списке
My bookings. - Отменять или редактировать бронь на данном этапе (MVP приложения) - нельзя.
💡 Все взаиморасчеты происходят согласно договорам, т.е. логин-пароль для авторизации в приложение выдается после подписания договора о сотрудничестве. Беспокоится об оплате не стоит. Необходимо лишь знать “помесячный долг” пользователя, который он заплатит в конце каждого месяца (месяц оплаты для каждой брони вычисляется по дате ее окончания).
- Разработать полную документацию (все ендпоинты) формата OpenAPI 3.0 для будущей RESTful API, фронтенд- разработчики отказываются использовать другой способ взаимодействия.
- Все вычисления должны выполняться на бекенде.
- Реализовать на Laravel исключительно один ендпоинт - кнопки бронирования.
Ссылка на открытый репозиторий на одном из git-хостингов (GitHub, GitLab, Bitbucket etc).
- Клонировать проект
git clone. - Установить все зависимости
composer install. - Создать базу данных MySQL или MariaDB
fridge_masterили на ваше усмотрение. - Скопировать и переименовать файл
.env.exampleв.envв корневой папке, внести актуальные параметры вашей БД. - Запустить миграции
php artisan migrate --seed. - Запустить сервер
php artisan serve.
Документация по API доступна по адресу http://localhost:8000/api/v1/docs
Кастомизация API доступна в файле настроек .env.
API_BOOKING_VOLUME_MIN- минимальное значение объема продуктов (в м3) при букинге (int).API_BOOKING_VOLUME_MAX- максимальное значение объема продуктов (в м3) при букинге (int).API_BOOKING_TEMP_MIN- минимальная температура хранения продуктов (в *C) при букинге (int).API_BOOKING_TEMP_MAX- максимальная температура хранения продуктов (в *C) при букинге (int).API_BOOKING_TEMP_DEVIATION_HIGH- верхнее допустимое отклонение температуры (в *C) холодильного помещения (int).API_BOOKING_TEMP_DEVIATION_LOW- нижнее допустимое отклонение температуры (в *C) холодильного помещения (int).API_BOOKING_TEMP_LIMIT_HIGH- верхний допустимый предел температуры (в *C) хранения продуктов (int).API_BOOKING_MAX_ORDER_PERIOD- максимальный срок (в днях) букинга (int).API_BOOKING_BLOCK_DAY_PRICE- суточная стоимость (в денежных единицах) букинга блока (float).API_BLOCK_SIZE_LENGTH- длинна (в мм) внутреннего пространства блока (int).API_BLOCK_SIZE_WIDTH- ширина (в мм) внутреннего пространства блока (int).API_BLOCK_SIZE_HEIGHT- высота (в мм) внутреннего пространства блока (int).
