Задание
|
Предыдущий урок
Mediator
|
3 из 4 уроков
Необходимо выполнить задание
|
Следующий урок
Оценка качества проверки ДЗ
|
Время выполнения задания: ~2 часа
Сложность: ⭐️⭐️⭐️ (максимум ⭐️⭐️⭐️⭐️⭐️)
Бонусы: 300
На вашем счету сейчас: 1 бонуса/ов
Use Cases
микросервиса Delivery
Описание Use Cases
Создать заказ
Сервис Delivery создаёт заказ, в результате оформления корзины. Сообщение "Корзина оформлена" будет приходить из Kafka, как только мы реализуем интеграцию с Basket. А пока нам достаточно реализовать Use Case создания заказа.
Поля Command следующие:
- OrderID uuid.UUID
- Street string
- Volume int
В следующих уроках мы будем передавать Street в сервис Geo и получать Location. Но пока у нас нет этой интеграции - используйте рандомную Location для создания заказа.
Создать курьера (опционально, если есть время и желание)
Мы можем добавлять курьеров.
- Name string
- Speed int
Добавить место хранения (опционально, если есть время и желание)
Мы можем добавлять места хранения к курьеру.
Поля Command следующие:
- CourierID uuid.UUID
- Name string
- TotalVolume int
Переместить курьеров
В реальной системе мы бы получали координаты от самих курьеров. В нашей же системе будет Job, который срабатывает каждую секунду. Сам Job мы сделаем в следующих уроках. При срабатывании Job будет вызываться этот Use Case.
Поэтому нам нужно реализовать UseCase, который смещает всех курьеров на 1 шаг в сторону заказа со скоростью их транспорта.
А если курьер доставил заказ (координата курьера и заказа совпадают), то в рамках этого же Use Case мы завершаем заказ (переводим в Completed), а курьер освобождает место хранения.
Поля Command следующие:
- В данной Command нет полей
Назначить заказ на курьера
Система сама распределяет заказы, она берёт первый неназначенный заказ и ищет самого подходящего курьера. Алгоритм назначения вы реализовали в 5 модуле.
Этот Use Case мы так же будем запускать с помощью Job, который реализуем в следующих уроках. А пока нам важно просто его реализовать.
В этом Use Case мы должны получить свободных курьеров и 1 любой неназначенный заказ, затем передать их алгоритму скоринга. Используйте репозиторий.
Заказ и назначенного Курьера мы сохраняем в БД одной транзакцией. Используйте Unit Of Work.
Поля Command следующие:
- В данной Command нет полей
Получить всех курьеров
Мы можем отслеживать на карте курьеров, которые выполняют заказ. Ответ данного Use Case должен содержать информацию о курьере и его местоположение.
Поля Query следующие:
- В данном Query нет полей
Response:
- Список DTO, с полями или error
- ID курьера
- Name курьера
- Location курьера
Получить все незавершенные заказы (статус Created и Assigned)
Мы можем отслеживать на карте заказы. Ответ данного Use Case должен содержать информацию о заказе и его местоположении.
Поля Query следующие:
- В данном Query нет полей
Response:
- Список DTO, с полями или error
- ID заказа
- Location заказа
Задание
Легенда
Вы отвечаете за разработку микросервиса Delivery (доставка)
Подготовка
- Вы работаете в своём Git репозитории "delivery"
- Создайте ветку module-7
- Выполните задание в ней
Задача
- Необходимо реализовать все Use Cases микросервиса Delivery, для этого:
- Перейдите в папку application/usecases и создайте в ней 2 папки:
- сommands
- queries
- Перейдите в папку application/usecases и создайте в ней 2 папки:
- Реализуйте все Command и Queries согласно их описанию
- Реализуйте Unit Test на один любой Handler (опционально)
- Не забудьте настроить Composition Root
- Скомпилируйте приложение
Критерии оценивания
- Количество Use Case соответствует схеме
- Разделение на Command и Query корректное
- Unit тесты проходят
- Приложение компилируется и запускается
- Исходный код залит в Git репозиторий
Задание
По любым вопросам обращайтесь в комментариях к уроку или в Telegram
Если вы обнаружили ошибку или неточность в данном уроке, сообщите о ней в комментариях к данному уроку. Это поможет сделать курс лучше.