Сервис управления промокодами

Общая информация

Сервис "Промокоды" отвечает за управление и применение промокодов в системе.


API Documentation

Общее описание модуля

Этот документ описывает API endpoints для модуля

Промокоды

GET /

Описание: Получение списка всех доступных промокодов.

Теги: Промокоды

Summary: Возвращает все доступные промокоды.

Предварительная проверка: Требуется аутентификация пользователя (admin role).

Ответ:

  • 200 OK:
    [
      {
        "id": 1,
        "active": true,
        "coupon": "PROMO123",
        "fullPrice": 500,
        "code": "FREE_PIZZA",
        "dateFrom": "2024-03-15T10:00:00.000Z",
        "dateTo": "2024-03-20T10:00:00.000Z",
        "times": 2,
        "hasProduct": "pizza"
      },
      {
        "id": 2,
        "active": false,
        "coupon": "DISCOUNT50",
        "fullPrice": 1000,
        "code": "DISCOUNT_50",
        "dateFrom": null,
        "dateTo": null,
        "times": null,
        "hasProduct": null
      }
    ]
    
    • id: (integer) - ID промокода.
    • active: (boolean) - Активен ли промокод.
    • coupon: (string) - Код промокода.
    • fullPrice: (number) - Минимальная сумма для использования промокода.
    • code: (string) - Артикул товара, которой будет добавлен по промокоду.
    • dateFrom: (string, date-time, optional) - Дата начала действия промокода.
    • dateTo: (string, date-time, optional) - Дата окончания действия промокода.
    • times: (integer, optional) - Максимальное количество использований промокода.
    • hasProduct: (string, optional) - Необходимый продукт для использования промокода.
  • 500 Internal Server Error:
    {
      "error": "Internal Server Error"
    }
    

POST /

Описание: Проверка промокода. (скрыт в swagger)

Теги: Промокоды

Предварительная проверка: Требуется аутентификация пользователя (user role).

Тело запроса (body):

{
    "coupon": "PROMO123",
    "notGiftsAndNotDeliveryTotal": 600,
    "order": {
    "items": [
           {
                "code": "pizza"
            }
        ]
    },
    "customer":{
        "phone": "79991234567"
        }
}
  • coupon: (string, optional) - Промокод
  • notGiftsAndNotDeliveryTotal: (number, optional) - Сумма заказа без учета стоимости подарков и доставки.
  • order: (object, optional) - Информация о заказе
    • items: (array, optional) - Список товаров в заказе
      • code: (string, optional) - Код продукта
  • customer: (object, optional) - Информация о клиенте
    • phone: (string, optional) - Телефон клиента

Ответ:

  • 200 OK:
        {
            "discountTotal": 0,
            "discounts": 0,
            "loyaltyProgramErrors": [
                "Промокод применен"
            ],
            "freeProducts": [
                "FREE_PIZZA"
            ],
            "lostGift": []
        }
    
  • discountTotal: (number) - Общая сумма скидки.
  • discounts: (number) - Количество примененных скидок.
  • loyaltyProgramErrors: (array) - Ошибки программы лояльности.
  • freeProducts: (array) - Бесплатные продукты.
  • lostGift: (array) - Неиспользованные подарки.
  • 400 Bad Request:
    {
      "statusCode": 400,
       "error": "Bad Request",
       "message": "Invalid promo data"
    }
    
    • 500 Internal Server Error:
      {
        "error": "Internal Server Error"
      }
      

POST /add

Описание: Добавление нового промокода.

Теги: Промокоды

Summary: Добавляет новый промокод.

Предварительная проверка: Требуется аутентификация пользователя (admin role).

Тело запроса (body):

{
   "active": true,
   "coupon": "PROMO123",
   "fullPrice": 500,
  "code": "FREE_PIZZA",
   "dateFrom": "2024-03-15T10:00:00.000Z",
   "dateTo": "2024-03-20T10:00:00.000Z",
   "times": 2,
    "hasProduct": "pizza"
}
  • active: (boolean, optional, default: true) - Активен ли промокод.
  • coupon: (string, required) - Код промокода.
  • fullPrice: (number, optional, default: 0) - Минимальная сумма для использования промокода.
  • code: (string, required) - Артикул товара, которой будет добавлен по промокоду.
  • dateFrom: (string, date-time, optional) - Дата начала действия промокода.
  • dateTo: (string, date-time, optional) - Дата окончания действия промокода.
  • times: (integer, optional) - Максимальное количество использований промокода.
  • hasProduct: (string, optional) - Необходимый продукт для использования промокода.

Ответ:

  • 201 Created:
    {
      "id": 1,
       "coupon": "PROMO123",
       "active": true,
      "code": "FREE_PIZZA"
    }
    
  • id: (integer) - ID промокода.
  • coupon: (string) - Код промокода.
  • active: (boolean) - Активен ли промокод.
  • code: (string) - Артикул товара, которой будет добавлен по промокоду.
  • 409 Conflict:
      {
         "statusCode": 409,
         "error": "Conflict",
         "message": "Промокод 'some_promo' уже существует ",
         "code": "PROMO_IS_EXISTS"
      }
    
    *  Промокод уже существует.
  • 500 Internal Server Error:
    {
        "error": "Internal Server Error"
    }
    

PATCH /:id

Описание: Обновить существующий промокод.

Теги: Промокоды

Summary: Обновляет данные промокода по ID.

Предварительная проверка: Требуется аутентификация пользователя (admin role).

Параметры запроса (path):

  • id: (integer, required) - ID промокода.

Тело запроса (body):

{
   "active": true,
   "coupon": "PROMO123",
  "fullPrice": 500,
  "code": "FREE_PIZZA",
    "dateFrom": "2024-03-15T10:00:00.000Z",
   "dateTo": "2024-03-20T10:00:00.000Z",
    "times": 2,
    "hasProduct": "pizza"
}
  • active: (boolean, optional, default: true) - Активен ли промокод.
  • coupon: (string, optional) - Код промокода.
  • fullPrice: (number, optional, default: 0) - Минимальная сумма для использования промокода.
  • code: (string, optional) - Артикул товара, которой будет добавлен по промокоду.
  • dateFrom: (string, date-time, optional) - Дата начала действия промокода.
  • dateTo: (string, date-time, optional) - Дата окончания действия промокода.
  • times: (integer, optional) - Максимальное количество использований промокода.
  • hasProduct: (string, optional) - Необходимый продукт для использования промокода.

Ответ:

  • 201 Created:
    {
      "id": 1,
      "coupon": "PROMO123",
      "active": true,
      "code": "FREE_PIZZA"
    }
    
    • id: (integer) - ID промокода.
    • coupon: (string) - Код промокода.
    • active: (boolean) - Активен ли промокод.
    • code: (string) - Артикул товара, которой будет добавлен по промокоду.
  • 500 Internal Server Error:
    {
      "error": "Internal Server Error"
    }
    

DELETE /:id

Описание: Удалить промокод.

Теги: Промокоды

Summary: Удаляет промокод по ID.

Предварительная проверка: Требуется аутентификация пользователя (admin role).

Параметры запроса (path):

  • id: (integer, required) - ID промокода.

Ответ:

  • 201 Created:
    {
        "statusCode": 201,
        "message": "Промокод успешно удален"
    }
    
  • statusCode: (integer) - Код ответа 201
  • message: (string) - Сообщение об успешном удалении.
  • 500 Internal Server Error:
    {
      "error": "Internal Server Error"
    }
    

Примечания:

  • Все запросы, кроме POST / требуют авторизации с ролью admin.
  • Все запросы возвращают 500 Internal Server Error в случае внутренней ошибки на сервере.