Skip to content

someqst/warehouse-service-test-task

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Сервис мониторинга состояния складов

Требования

  • Обязательное использование языка Python и фреймворка FastAPI для разработки микросервиса. Обязательное использование Kafka как брокера сообщений.
  • Кандидат имеет свободу выбора технологий и библиотек(кроме указанных выше) для реализации остальных аспектов задачи.

Сдача

Склонируйте проект, выполните задачу и пришлите ссылку на репозиторий.

Задание

Вам предстоит разработать микросервис на языке Python, предназначенный для обработки сообщений от складов, которые уведомляют о приемках и отправках товаров. Микросервис будет сохранять данные о перемещениях и предоставлять API для получения информации о конкретных перемещениях и текущих состояниях складов.

Основные задачи

  1. Обрабатывать сообщения, поступающие из очереди Kafka. Сообщения содержат информацию о приемке или отправке товаров на складах.
  2. Сохранять информацию о каждом перемещении товара, включая отправителя, получателя, время, количество товаров, тип перемещения.
  3. Учитывать, что количество товаров на складе не может быть меньше 0.
  4. Предоставить информацию о текущем количестве товаров на складе.
  5. Предоставить информацию о перемещении товара, включая отправителя, получателя, время, прошедшее между отправкой и приемкой, а также разницу в количестве товара, если таковая имеется.
  6. Предоставить OpenAPI спецификацию к API

Примеры сообщений в Kafka

Прибытие
{
    "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 // количество товара
    }
}

Дополнительные задачи (опционально):

  1. Реализовать систему кэширования для повышения скорости ответов на запросы API.
  2. Настроить мониторинг сервиса для отслеживания его состояния и производительности.
  3. Покрыть кода тестами.
  4. Провести нагрузочное тестирование и предоставить график, иллюстрирующий, как приложение ведет себя под разной нагрузкой.

Спецификация API

Основные эндпоинты:

1. Получение информации о перемещении

  • URL: /api/movements/<movement_id>
  • Метод: GET
  • Описание: Возвращает информацию о перемещении по его ID, включая отправителя, получателя, время, прошедшее между отправкой и приемкой, и разницу в количестве товара.

2. Получение информации о состоянии склада

  • URL: /api/warehouses/<warehouse_id>/products/<product_id>
  • Метод: GET
  • Описание: Возвращает информацию текущем запасе товара в конкретном складе.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors