Сервис управления промокодами
Общая информация
Сервис "Промокоды" отвечает за управление и применение промокодов в системе.
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" }
- 500 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) - Код ответа 201message: (string) - Сообщение об успешном удалении.- 500 Internal Server Error:
{ "error": "Internal Server Error" }
Примечания:
- Все запросы, кроме
POST /требуют авторизации с рольюadmin. - Все запросы возвращают
500 Internal Server Errorв случае внутренней ошибки на сервере.