- Обязательное использование языка Python и фреймворка FastAPI для разработки микросервиса. Обязательное использование Kafka как брокера сообщений.
- Кандидат имеет свободу выбора технологий и библиотек(кроме указанных выше) для реализации остальных аспектов задачи.
Склонируйте проект, выполните задачу и пришлите ссылку на репозиторий.
Вам предстоит разработать микросервис на языке Python, предназначенный для обработки сообщений от складов, которые уведомляют о приемках и отправках товаров. Микросервис будет сохранять данные о перемещениях и предоставлять API для получения информации о конкретных перемещениях и текущих состояниях складов.
- Обрабатывать сообщения, поступающие из очереди Kafka. Сообщения содержат информацию о приемке или отправке товаров на складах.
- Сохранять информацию о каждом перемещении товара, включая отправителя, получателя, время, количество товаров, тип перемещения.
- Учитывать, что количество товаров на складе не может быть меньше 0.
- Предоставить информацию о текущем количестве товаров на складе.
- Предоставить информацию о перемещении товара, включая отправителя, получателя, время, прошедшее между отправкой и приемкой, а также разницу в количестве товара, если таковая имеется.
- Предоставить OpenAPI спецификацию к API
{
"id": "b3b53031-e83a-4654-87f5-b6b6fb09fd99", // id сообщения
"source": "WH-3423", // источник отправки. формат - WH-****
"specversion": "1.0",
"type": "ru.retail.warehouses.movement",
"datacontenttype": "application/json",
"dataschema": "ru.retail.warehouses.movement.v1.0",
"time": 1737439421623,
"subject": "WH-3423:ARRIVAL",
"destination": "ru.retail.warehouses",
"data": {
"movement_id": "c6290746-790e-43fa-8270-014dc90e02e0", // id перемещения. Одинаковое для отправки/приемки
"warehouse_id": "c1d70455-7e14-11e9-812a-70106f431230", // id склада
"timestamp": "2025-02-18T14:34:56Z", // время приемки
"event": "arrival", // тип события
"product_id": "4705204f-498f-4f96-b4ba-df17fb56bf55", // id товара
"quantity": 100 // количество товара
}
}{
"id": "b3b53031-e83a-4654-87f5-b6b6fb09fd99",
"source": "WH-3322",
"specversion": "1.0",
"type": "ru.retail.warehouses.movement",
"datacontenttype": "application/json",
"dataschema": "ru.retail.warehouses.movement.v1.0",
"time": 1737439421623,
"subject": "WH-3322:DEPARTURE",
"destination": "ru.retail.warehouses",
"data": {
"movement_id": "c6290746-790e-43fa-8270-014dc90e02e0", // id перемещения. Одинаковое для отправки/приемки
"warehouse_id": "25718666-6af6-4281-b5a6-3016e36fa557", // id склада
"timestamp": "2025-02-18T12:12:56Z", // время отбытия
"event": "departure", // тип события
"product_id": "4705204f-498f-4f96-b4ba-df17fb56bf55", // id товара
"quantity": 100 // количество товара
}
}- Реализовать систему кэширования для повышения скорости ответов на запросы API.
- Настроить мониторинг сервиса для отслеживания его состояния и производительности.
- Покрыть кода тестами.
- Провести нагрузочное тестирование и предоставить график, иллюстрирующий, как приложение ведет себя под разной нагрузкой.
- URL:
/api/movements/<movement_id> - Метод: GET
- Описание: Возвращает информацию о перемещении по его ID, включая отправителя, получателя, время, прошедшее между отправкой и приемкой, и разницу в количестве товара.
- URL:
/api/warehouses/<warehouse_id>/products/<product_id> - Метод: GET
- Описание: Возвращает информацию текущем запасе товара в конкретном складе.