/gophercart

Демо-проект по тестированию

Primary LanguageGo

Сервис корзины для gophermart

Учебный пример для вебинара по тестированию.

Сервис выполняет следующие задачи.

  • Создание корзины пользователя. Корзина создается при добавлении в нее первых товаров.
  • Добавление товара в корзину пользователя.
  • Удаление товара из корзины пользователя
  • Удаление корзины пользователя, при оплате.
  • Получение состояния корзины пользователя.

HTTP API сервиса

  • PUT /api/v1/cart/{id} // id пользователя
[
    {"good1": 1}, // название количетвотоваров, 
    {"good2": 1} // название количетвотоваров, 
]
  • 201 - создано

  • 500 - ошибка

  • DELETE /api/v1/cart/{id}/{good_id} // id пользователя good_id - id товара

  • 204 - удалено

  • 404 - не найдено

  • 500 - ошибка

  • POST /api/v1/buy/{id} //

  • 200

{
    {
    "good1": {
        "qty" : 0
        "status" : "NO_STOCKS"
    }, 
    "good2":{
        "qty" : 0
        "status" : "NOT_FOUND"
    },
    "good3":{
        "qty" : 100
        "status" : "OK"
    },    
}
  • 400

GET api/v1/cart/{id}

{
    {
    "good1": {
        "qty" : 0
        "status" : "NO_STOCKS" 
    }, 
    "good2":{
        "qty" : 0
        "status" : "NOT_FOUND"
    },
    "good3":{
        "qty" : 100
        "status" : "OK"
    },    
}
  • Добавление товара в корзину пользователя.
  • Удаление товара из корзины пользователя
  • Удаление корзины пользователя, при оплате.
  • Получение состояния корзины пользователя.

Сервис взаимодействует с внешним сервисом склада.

API склада

  • Запросить есть ли товары на складе
    • GET /api/v1/goods/{id}
    • 200
{
    "stocks": 100 // количетво товаров
}
  • 404 - Товар не найден

  • 500 внетренняя ошибка

  • Отправить товар(ы) со склада в доставку.

  • PUT /api/v1/goods/{id}

   {
    "stocks": 10, // отправить 10 товаров в доставку
    "user_id": uuid // пользователю с id 
   } 

Логика взаимодействия.

При добавлении товара, проверяется есть ли товар на складе, если есть, до резервируем и добавляем в корзину При покупке корзины - отправить товары в доставку. При получении корзины пользователя проверяем есть ли товары на складе.

TODO: добавить резервирование товаров