Skip to content

bromimo/fridge_master

Repository files navigation

История

Вы устроились на работу в компанию Fridge Master.

Компания занимается хранением портящихся продуктов для клиентов по всему миру. Имея холодильные мощности в 6 локациях, гибкую систему бронирования и отличный сервис, компания завоевала доверие крупных корпораций. Но последние 3 года рост замедляется, хотя и удается занимать бОльшую долю рынка.

Недавно пришел новый CEO, который решил, что для развития компании необходимо начать предоставлять услуги для малого и микро-бизнеса. В рамках решения задачи требуется существенно упростить процессы бронирования и разработать мобильное приложение, которое позволит бронировать и отслеживать свои продукты “в 1 клик”.

Описание

Вам, как бекенд-разработчику, было поручено разработать API для мобильного приложения. CEO не является экспертом в технической области, и все, что команде удалось у него узнать о функциональности разрабатываемого приложения, изложено ниже в виде описания бизнес-процессов и пользовательского потока (user flow).

Бизнес-процессы

У компании есть 6 локаций холодильных мощностей:

  • Уилмингтон (Северная Каролина)
  • Портленд (Орегон)
  • Торонто
  • Варшава
  • Валенсия
  • Шанхай

На каждой локации размещается много морозильных помещений. В каждом помещении поддерживается заданная температура и оно вмещает определенное количество “морозильных блоков” (в компании их называют просто “block”). Все блоки имеют “стандартный размер”: 2 метра в длину и 1 метр в ширину/высоту.

Когда клиент обращается за бронью - ему предлагают минимально возможное количество блоков для размещения его продуктов. Блоки, удовлетворяющие бронь, должны размещаться в помещениях с температурой +-2 *C от заказанной клиентом, но “не пересекать границу” 0 *С.

Стоимость хранения одного блока не зависит от локации или температуры помещения, а тарификация производится с округлением к суткам (в часовом поясе локации).

Пользовательский поток

  1. При заходе в приложение пользователь должен увидеть весь список доступных локаций с информацией о количестве свободных блоков в каждой.
  2. Выбрав одну из локаций пользователю показывается калькулятор, где он может ввести объем продуктов (в м3), необходимую температуру хранения и сроки хранения (не дольше 24 дней). После нажатия кнопки Calculate отображается необходимое количество блоков, исходя из которого вычисляется стоимость хранения и доступность (не всегда есть достаточное количество свободных блоков).
  3. При согласии пользователя с результатами калькулятора, он нажимает на кнопку бронирования Book blocks.
  4. В меню приложения есть кнопка My bookings, где отображаются все его брони за все время с актуальными статусами и затратами.
  5. Для того чтобы доставить или забрать продукты, необходимо на складе показать специальный код доступа (12 рандомных букв и цифр). Этот код можно увидеть нажав на свое бронирование в списке My bookings.
  6. Отменять или редактировать бронь на данном этапе (MVP приложения) - нельзя.

💡 Все взаиморасчеты происходят согласно договорам, т.е. логин-пароль для авторизации в приложение выдается после подписания договора о сотрудничестве. Беспокоится об оплате не стоит. Необходимо лишь знать “помесячный долг” пользователя, который он заплатит в конце каждого месяца (месяц оплаты для каждой брони вычисляется по дате ее окончания).


Выполнение тестового задания

  1. Разработать полную документацию (все ендпоинты) формата OpenAPI 3.0 для будущей RESTful API, фронтенд- разработчики отказываются использовать другой способ взаимодействия.
  2. Все вычисления должны выполняться на бекенде.
  3. Реализовать на Laravel исключительно один ендпоинт - кнопки бронирования.

Результат выполнения

Ссылка на открытый репозиторий на одном из git-хостингов (GitHub, GitLab, Bitbucket etc).


Установка и настройка

  1. Клонировать проект git clone.
  2. Установить все зависимости composer install.
  3. Создать базу данных MySQL или MariaDB fridge_master или на ваше усмотрение.
  4. Скопировать и переименовать файл .env.example в .env в корневой папке, внести актуальные параметры вашей БД.
  5. Запустить миграции php artisan migrate --seed.
  6. Запустить сервер php artisan serve.

Документация по API

Документация по API доступна по адресу http://localhost:8000/api/v1/docs

Кастомизация API

Кастомизация 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).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages