Задание
|
Предыдущий урок
Value Object
|
3 из 5 уроков
Необходимо выполнить задание
|
Следующий урок
Оценка качества проверки ДЗ
|
Время выполнения задания: ~1 час
Сложность: ⭐️⭐️ (максимум ⭐️⭐️⭐️⭐️⭐️)
Бонусы: 200
На вашем счету сейчас: 1 бонуса/ов
Use Case
микросервиса Delivery
На схеме показана Use Case диаграмма микросервиса Delivery. Нажмите на схему для увеличения.
Use Case микросервиса Delivery
Use Cases
Данное описание дано исключительно для понимания системы. В задании ориентируйтесь на бизнес-правила, указанные в самом задании.
Basket ->Создать заказ
Сервис Delivery создаёт заказ, вследствие оформления корзины. Сообщение "Корзина оформлена" будет приходить из Kafka, как только мы реализуем интеграцию с Basket.
Delivery -> Переместить курьеров
Разные курьеры имеют разную скорость перемещения. К примеру, если у курьера скорость равна 4, то за 1 такт курьер проходит 4 клетки, по X или Y, но суммарно не больше 4ех. В реальной системе мы бы получали координаты о самих курьеров. В нашей же системе будет Job, который имеет такт 1 секунду и при срабатывании такта - все курьеры перемещаются на сторону заказа с учетом их скорости.
Если курьер доставил заказ (=дошёл до точки), то в рамках этого же Use Case мы завершаем заказ, а курьер снова свободен и может брать новые заказы.
Этот Use Case мы будем запускать с помощью Job в 8 модуле.
Delivery -> Назначить заказ на курьера
Система сама распределяет заказы, она берёт первый по списку неназначенный заказ и ищет самого подходящего курьера. Основными критериями выбора являются:
- Время доставки курьером (расстояние от курьера до заказа деленное на скорость транспорта)
- Наличие свободных мест хранения, с учетом обьема заказа.
Этот Use Case мы будем запускать с помощью Job в 8 модуле.
Менеджер -> Получить всех курьеров
В любое время менеджер может отслеживать на карте местоположение курьеров, которые выполняют заказ. Он делает это в web-приложении Backoffice.
Менеджер -> Получить все незавершенные заказы (в статусе Created и Assigned)
В любое время менеджер может отслеживать на карте местоположение заказов. Он делает это в web-приложении Backoffice.
Domain Model
микросервиса Delivery
На схеме показана показана доменная модель микросервиса Delivery. Нажмите на схему для увеличения.
Задание
Легенда:
Вы отвечаете за разработку микросервиса Delivery (доставка)
Подготовка:
- Вы работаете в своем Git репозитории "delivery"
- Создайте ветку module-2
- Выполните задание в ней
Задача:
- Изучите Domain Model микросервиса Delivery
- Перейдите в папку domain и создайте в ней папку:
- kernel (так обычно называют папку, в которой хранятся сущности, которые могут быть использованы в разных агрегатах)
- Создайте в папке kernel файл:
- location.go
- Реализуйте в файле Value Object в соответствии с бизнес-правилами
- Скомпилируйте приложение
- Реализуйте Unit Test'ы в достаточном количестве (хотя бы 1)
Бизнес-правила Location:
- Location - это координата на доске, она состоит из X (горизонталь) и Y (вертикаль)
- Минимально возможная для установки координата 1,1
- Максимально возможная для установки координата 10,10
- 2 координаты равны, если их X и Y равны, обеспечьте функционал проверки на эквивалентность
- Нельзя изменять объект Location после создания
- Должна быть возможность рассчитать расстояние между двумя Location. Расстояние между Location - это совокупное количество шагов по X и Y, которое необходимо сделать курьеру, чтобы достигнуть точки. Курьер может двигаться только по вертикали и горизонтали. На картинке ниже: расстояние между курьером и заказом - 2 шага по X и 3 шага по Y, суммарно 5 шагов.
- Должна быть возможность создать рандомную координату. В будущем эта функциональность будет использована в целях тестирования
Поле с координатами
Критерии оценивания
- Сущности соответствуют паттерну Value Object
- Приложение компилируется и запускается
- Исходный код залит в Git репозиторий
- Сущность покрыта Unit Test'ами (хотя бы 1)
По любым вопросам обращайтесь в комментариях к уроку или в Telegram
Если вы обнаружили ошибку или неточность в данном уроке, сообщите о ней в комментариях к данному уроку. Это поможет сделать курс лучше.