Задание
|
Предыдущий урок
Postman коллекция
|
4 из 6 уроков
Необходимо выполнить задание
|
Следующий урок
Запуск приложения
|
Время выполнения задания: ~1-1.5 часа
Сложность: ⭐️⭐️ (максимум ⭐️⭐️⭐️⭐️⭐️)
Бонусы: 200
На вашем счету сейчас: 1 бонуса/ов
💎 Запустить инфраструктуру
Для того чтобы сервис работал, ему нужна база данных и прочие зависимости. Все эти зависимости запускаются в Docker и находятся в проекте Infrastructure.
Подтяните последнюю версию Infrastructure
- Если вы ранее не скачивали проект, то:
git clone https://gitlab.com/microarch-ru/ddd-in-practice/infrastructure.git
- А если скачивали, то просто обновите:
git pull https://gitlab.com/microarch-ru/ddd-in-practice/infrastructure.git
- Откройте терминал и перейдите в папку Infrastructure
- Выполните команду
docker-compose up
- Если ваш компьютер маломощный, то вы можете запускать инфраструктурные системы выборочно. Оставьте в команде, только нужные системы:
docker-compose up postgres kafka init-kafka kowl geo notification discount backoffice basket
💎 Подготовка к заданию
Установите в проект следующие пакеты:
Задание
Легенда
Вы отвечаете за разработку микросервиса Delivery (доставка)
Подготовка
- Вы работаете в своём Git репозитории "delivery"
- Создайте ветку module-8
- Выполните задание в ней
Задача
- Реализуйте HTTP API методы микросервиса Delivery. Для этого:
- Реализуйте HTTP Handler в соответствии с контрактом.
- Реализуйте Job (регулярные задачи)
- Перемещение курьеров 1 раз в 1 секунду
- Назначение заказов 1 раз в 1 секунду
- В методе CreateOrder вызовите команду с вымышленными параметрами (пример показан ниже).
- Скомпилируйте приложение
- Запустите приложение
- Убедитесь, что методы корректно работают (используйте Postman коллекцию)
server.cfg.yaml файл
package: servers
output: internal/generated/servers/servers.gen.go
generate:
- types
- echo-server
- embedded-spec
- models
- strict-server
import-mapping: {}
Команда генерации HTTP сервера
oapi-codegen -config configs/server.cfg.yaml https://gitlab.com/microarch-ru/ddd-in-practice/system-design/-/raw/main/services/delivery/contracts/openapi.yml
Метод для тестирования "CreateOrder"
Далее в курсе мы будем создавать заказ, обрабатывая сообщение из Kafka от микросервиса Basket, но пока этот функционал у нас не реализован, а тестировать уже хочется. Ниже показано, как может выглядеть реализация тестового API метода CreateOrder:
func (s *Server) CreateOrder(c echo.Context) error {
createOrderCommand, err := commands.NewCreateOrderCommand(uuid.New(), "Несуществующая", 5)
if err != nil {
return problems.NewBadRequest(err.Error())
}
err = s.createOrderCommandHandler.Handle(c.Request().Context(), createOrderCommand)
if err != nil {
if errors.Is(err, errs.ErrObjectNotFound) {
return problems.NewNotFound(err.Error())
}
return problems.NewConflict(err.Error(), "/")
}
return c.JSON(http.StatusOK, nil)
}
Критерии оценивания
- API методы есть и работают
- Приложение компилируется и запускается
- Исходный код залит в Git репозиторий
По любым вопросам обращайтесь в комментариях к уроку или в Telegram
Если вы обнаружили ошибку или неточность в данном уроке, сообщите о ней в комментариях к данному уроку. Это поможет сделать курс лучше.