Сервис отвечает за учет заказов и логистику.
Создает новый заказ для пользователя из списка переданных товаров. Товары при этом нужно зарезервировать на складе.
Request
{
user int64
items []{
sku uint32
count uint16
}
}
Response
{
orderID int64
}
Показывает информацию по заказу
Request
{
orderID int64
}
Response
{
status string // (new | awaiting payment | failed | payed | cancelled)
user int64
items []{
sku uint32
count uint16
}
}
Помечает заказ оплаченным. Зарезервированные товары должны перейти в статус купленных.
Request
{
orderID int64
}
Response
{}
Отменяет заказ, снимает резерв со всех товаров в заказе.
Request
{
orderID int64
}
Response
{}
Возвращает количество товаров, которые можно купить с разных складов. Если товар был зарезерванован у кого-то в заказе и ждет оплаты, его купить нельзя.
Request
{
sku uint32
}
Response
{
stocks []{
warehouseID int64
count uint64
}
}
Сервис отвечает за корзину и оформление заказа.
Добавить товар в корзину определенного пользователя. При этом надо проверить наличие товара через LOMS.stocks
Request
{
user int64
sku uint32
count uint16
}
Response
{}
Удалить товар из корзины определенного пользователя.
Request
{
user int64
sku uint32
count uint16
}
Response
{}
Показать список товаров в корзине с именами и ценами (их надо в реальном времени получать из ProductService)
Request
{
user int64
}
Response
{
items []{
sku uint32
count uint16
name string
price uint32
}
totalPrice uint32
}
Оформить заказ по всем товарам корзины. Вызывает createOrder у LOMS.
Request
{
user int64
}
Response
{}
Будет слушать Кафку и отправлять уведомления, внешнего API нет.
Swagger развернут по адресу: http://route256.pavl.uk:8080/docs/
GRPC развернуто по адресу: route256.pavl.uk:8082
Request
{
token string
sku uint32
}
Response
{
name string
price uint32
}
Request
{
token string
startAfterSku uint32
count uint32
}
Response
{
skus []uint32
}
- Checkout.addToCart
- добавляем в корзину и проверяем, что есть в наличии)
- Можем удалять из корзины
- Можем получать список товаров корзины
- название и цена тянутся из ProductService.get_product
- Приобретаем товары через Checkout.purchase
- идем в LOMS.createOrder и создаем заказ
- У заказа статус new
- LOMS резервирует нужное количество единиц товара
- Если не удалось зарезервить, заказ падает в статус failed
- Если удалось, падаем в статус awaiting payment
- Оплачиваем заказ
- Вызываем LOMS.orderPayed
- Резервы переходят в списание товара со склада
- Заказ идет в статус payed
- Можно отменить заказ до оплаты
- Вызываем LOMS.cancelOrder
- Все резервирования по заказу отменяются, товары снова доступны другим пользователям
- Заказ переходит в статус cancelled
- LOMS должен сам отменять заказы по таймауту, если не оплатили в течение 10 минут