#491 Реализация MVP постамата для выдачи заказов

Компании:
Яндекс
Темы:
System DesignПрактика

Постамат - автоматическая станция приёма/выдачи посылок.

В маркете формируются заказы, и хочется добавить возможность получения через постамат. Мы запускаем MVP: небольшая аудитория пользователей, несколько постаматов в Москве. При заказе пользователь сможет выбрать, что хочет получить заказ в постамате.

В рамках задачи нужно реализовать код для MVP решения:

  • Курьер привозит заказ и пробует положить его в ячейку, указывая номер заказа. Постамат сам выбирает ячейку и возвращает в ответ. Она откроется вызывающим этот метод кодом;
  • После того, как заказ положили в ячейку, пользователю отправляется СМС c кодом получения. Заказ будет ждать вечно;
  • В случае любых ошибок - курьер забирает заказ назад и попробует положить заказ в ячейку на следующий день (для MVP это ок);
  • Пользователь может получить заказ по коду выдачи из СМС. При вводе кода выдачи постамат должен вывести на экран текст "ваш заказ ХХХ в ячейке YYY", ячейка откроется сама.

Ограничения:

  • Все ячейки одного размера, но их может быть разное количество, зависит от конкретного постамата;
  • Один заказ - одна коробка, она влезает в ячейку;
  • Ячейки каждого постамата пронумерованы;
  • Каждый постамат сам хранит своё состояние.

Для отправки сообщения пользователю надо использовать клиент UserNotificationApi:

class PostalBox {
    private final UserNotificationApi notificationApi;

    // нужно реализовать методы хранения и выдачи заказа
}

Синхронный клиент, вызывающий postalbox.notify.market.yandex.net. Реализацию интерфейса описывать не нужно:

interface UserNotificationApi {
    // нужно описать метод(ы) для отправки сообщения с кодом выдачи
    // в ответ придёт код выдачи, который был отправлен пользователю
}

Разбор вопроса

Ментор
Ответь как на реальном собеседовании. Я задам уточняющие вопросы, а затем сравню твой ответ с эталонным и покажу точность в %.
Войди, чтобы начать диалог Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти