Реализован API с помощью протокола JSON-RPC для работы с товарами на разных складах.
Что можно делать:
- Создавать товар, задавать имя, размер, уникальный код и общее количество товаров на складах (Goods.Create)
- Создавать склад, задавать имя и доступность склада в текущий момент (Warehouses.Add)
- Распределять товары по складам из общего источника (Goods.Add)
- Резерировать некоторое количество товаров на складе, для доставки (Goods.Reserve)
- Отменять резерв некоторого количества товаров (Goods.CancelReservation)
- Узнавать количество доступных для резерва (доставки) товаров на конкретном складе (Warehouses.GetAmount)
Для запуска можно использовать Makefile (make команда из списка ниже):
- all - собирает бинарный файл из cmd/main.go, запускает контейнер с БД (должен быть предварительно создан) и запускает сервис
- run - запускает контейнер с БД (должен быть предварительно создан) и запускает сервис без сохранения собранного бинарника
- docker - удаляет в случае наличия существующий образ приложения, создает новый образ и запускает docker compose
- migration-up ARGS="version" - выполняет миграцию базы данных в докере указанной версии
- migration-down ARGS="version" - отменяет миграцию базы данных в докере указанной версии
Также в проекте предоставлен файл my_own_postman.py для тестирования функциональности приложения, вызова разных процедур с удобным вводом передаваемых данных
База данных В качестве хранилища данных используется контейнер в docker с postres, который настраивается в файле docker-compose.yml
В базе данных lamoda созданы три таблицы для хранения информации о:
- Товарах (goods) - id товара, имя, размер, уникальный код и количество товаров, досутпное в общем источнике
- Складах (warehouses) - id склада, имя и доступность склада
- Информация о распределении товаров на складах (warehouse_goods) - id склада, code товара, количество доступных товаров и количество зарезервированных товаров
Создает новые виды товаров и размещает их в "сортировочном центре" для дальнейшего распределения по складам. Возвращает список успешно созданных товаров, ошибки создания логгирует в консоль.
Принимает слайс (список) json-структур (поля: name, size, code, amount):
args = [{
"name": "Coffee",
"size": 1.2,
"code": 123,
"amount": 100
},
{
"name": "Water",
"size": 5,
"code": 51,
"amount": 40
}]
Создает новые склады, с указанием их имени и доступности. Возвращает список успешно созданных складов, ошибки создания логгирует в консоль.
Принимает слайс (список) json-структур (поля: name, availability):
args = [{
"name": "Main",
"availability": true
},
{
"name": "Old",
"availability": false
}]
Перемещает некоторые количества товаров с goodCode из сортировочного центра на склады с id warehouseID, проверяя доступность складов и наличие необходимого количества товаров в сортировочном центре. Возвращает список успешно транспортированных товаров, ошибки транспортировки логгируются в консоль
Принимает слайс (список) json-структур (поля: goodCode, warehouseID, amount):
args = [{
"goodCode": 123,
"warehouseID": 1,
"amount": 50
},
{
"goodCode": 51,
"warehouseID": 1,
"amount": 10
}]
Резервирует некоторые количества товаров goodCode на складах с warehouseID проверяя доступность складов и наличие необходимых количеств товаров на этих складах. Возвращает список успешно зарезервированных товаров, ошибки резервирования логгируются в консоль
Принимает слайс (список) json-структур (поля: goodCode, warehouseID, amount):
args = [{
"goodCode": 123,
"warehouseID": 1,
"amount": 20
},
{
"goodCode": 51,
"warehouseID": 1,
"amount": 10
}]
Отменяет резервирование некоторых количеств товаров goodCode на складах с warehouseID проверяя доступность складов и наличие необходимых количеств товаров на этих складах. Возвращает список успешно отмененных резервов товаров, ошибки отмены логгируются в консоль
Принимает слайс (список) json-структур (поля: goodCode, warehouseID, amount):
args = [{
"goodCode": 123,
"warehouseID": 1,
"amount": 15
},
{
"goodCode": 51,
"warehouseID": 1,
"amount": 5
}]
Возвращает количество товаров goodCode, доступных для резервирования на складе с warehouseID.
Принимает json-структуру (поля: goodCode, warehouseID):
args = {
"goodCode": 123,
"warehouseID": 1
}
// возращает 45 при последовательном вызове методов с представленными данными