API Documentation

Заказ

POST /order/

Описание: Создание нового заказа.

Теги: Заказ

Summary: Создаёт новый заказ и возвращает его данные.

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

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

{
  "user": {
    "id": "user_id_uuid",
    "name": "Имя пользователя",
    "phone": "+79991234567"    
  },
    "coupon": "promocode",
    "spendBonus": 100,
  "order": {
    "payment": "ONL",
    "delivery": "delivery",
    "deliveryDateTime": "2024-03-15T12:00:00.000Z",
    "comment": "Комментарий к заказу",
    "personsCount": 2,
     "basket": [
       {
            "product": {
                "id": "some_product_uuid",
                 "name": "Название продукта",
                "code": "product_code",
                "price": 100,
                 "isGift": true
            },
            "quantity": 1,
             "mods": [
              {
                 "id": "mod_id",
                  "name": "Название модификатора",
                 "code": "mod_code",
                  "price": 10,
                 "amount": 1,
                  "groupId": "some_group_id",
                 "groupName": "Название группы модификаторов"
             }
           ]
       }
     ],
    "total": 1200,
     "zoneId": "zone_uuid",
     "isSelfService": true,
      "addressId": 1
  }
}
  • user: (object, required) - Информация о пользователе.
    • id: (string, optional) - ID пользователя.
    • name: (string, required) - Имя пользователя.
    • phone: (string, required) - Номер телефона пользователя.
  • coupon: (string, optional) - Промокод пользователя.
  • spendBonus: (integer, optional) - Количество бонусов, которые пользователь хочет потратить.
  • order: (object, required) - Информация о заказе.
    • payment: (string, required) - Тип оплаты (ONL, CASH, CARD).
    • delivery: (string, required) - Способ доставки (self, delivery).
    • deliveryDateTime: (string, date-time, required) - Дата и время доставки.
    • comment: (string, optional) - Комментарий к заказу.
    • personsCount: (integer, required) - Количество человек.
    • basket: (array, required, minItems: 1) - Список продуктов в корзине.
      • product (object, required) - Информация о продукте.
        • id (string, required) - ID продукта
        • name: (string, required) - Название продукта.
        • code: (string, required) - Код продукта.
        • price: (integer, required) - Цена продукта.
        • isGift: (boolean, required) - Является ли продукт подарком.
      • quantity: (integer, required) - Количество продукта в корзине.
      • mods: (array, optional) - Модификаторы продукта.
        • id (string, required) - ID модификатора
        • name: (string, required) - Название модификатора.
        • code: (string, required) - Код модификатора.
        • price: (integer, required) - Цена модификатора.
        • amount: (integer, required) - Количество модификатора.
        • groupId: (string, required) - ID группы модификаторов.
        • groupName: (string, required) - Название группы модификаторов.
    • total: (integer, required, minimum: 0) - Общая сумма заказа после скидок.
    • zoneId: (string, required) - ID зоны доставки.
    • isSelfService: (boolean, required) - Является ли заказ заказом на самовывоз.
    • addressId: (integer, optional) - ID адреса доставки (необходим для доставки).

Ответ:

  • 201 Created:
    {
        "isOrderCreated": true,
        "orderId": 123
    }
    
    • isOrderCreated: (boolean) - Флаг успешного создания заказа.
    • orderId: (integer) - ID созданного заказа.
  • 400 Bad Request:
      {
        "statusCode": 400,
        "error": "Bad Request",
        "message": "Некорректные данные для создания заказа"
      }
    
  • 403 Forbidden:
    {
        "statusCode": 403,
         "error": "Forbidden",
        "message": "Доставка по данному адресу временно недоступна"
     }
    
  • 422 Unprocessable Entity:
     {
        "statusCode": 422,
        "error": "Unprocessable Entity",
        "message": "Некорректные данные для создания заказа"
      }
    
  • 500 Internal Server Error:
    {
       "statusCode": 500,
       "error": "Internal Server Error",
       "message": "Внутренняя ошибка сервера"
    }
    

GET /order/

Описание: Получение списка заказов с пагинацией.

Теги: Заказ

Summary: Возвращает массив заказов с информацией о пагинации.

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

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

  • page: (integer, optional, default: 1) - Номер страницы для пагинации (минимум 1).
  • filter: (string, optional) - Фильтр в формате JSON.
  • order: (string, optional) - Порядок сортировки в формате JSON.
  • limit: (integer, optional, default: 50) - Количество элементов на странице (минимум 1).

Ответ:

  • 200 OK:
{
  "items": [
    {
      "id": 1,
      "userId": "user_id_uuid",
      "addressId": 1,
      "zoneId": "zone_uuid",
      "total": 1200,
      "paymentType": "ONL",
      "personsCount": 2,
      "isSelfService": true,
      "comment": "Комментарий к заказу",
       "coupon": "SOME_COUPON",
      "spendBonus": 100,
      "status": "NEW",
      "isIikoSend": false,
      "isTelegramSend": false,
      "deliveryDateTime": "2024-03-15T12:00:00.000Z",
       "createdAt": "2024-03-15T10:00:00.000Z",
      "updatedAt": "2024-03-15T10:00:00.000Z"
    }
  ],
  "pagination": {
    "currentPage": 1,
    "pageSize": 50,
    "totalPages": 1,
    "totalItems": 1
  }
}
  • items: (array) - Массив заказов.
    • id: (integer) - ID заказа.
    • userId: (string) - ID пользователя.
    • addressId: (integer) - ID адреса доставки.
    • zoneId: (string) - ID зоны доставки.
    • total: (number) - Общая сумма заказа.
    • paymentType: (string) - Тип оплаты.
    • personsCount: (integer) - Количество человек.
    • isSelfService: (boolean) - Является ли заказ самообслуживанием.
    • comment: (string) - Комментарий к заказу.
    • coupon: (string, optional) - Купон.
    • spendBonus: (integer, optional) - Потраченные бонусы.
    • status: (string) - Статус заказа (NEW, WAIT_PAYMENT, PAYED, COMPLETED, ERROR_PAYMENT).
    • isIikoSend: (boolean) - Отправлен ли заказ в iiko.
    • isTelegramSend: (boolean) - Отправлен ли заказ в Telegram.
    • deliveryDateTime: (string, date-time) - Дата и время доставки.
    • createdAt: (string, date-time) - Дата и время создания заказа.
    • updatedAt: (string, date-time) - Дата и время последнего обновления заказа.
  • pagination: (object) - Информация о пагинации.
    • currentPage: (integer) - Текущая страница.
    • pageSize: (integer) - Количество элементов на странице.
    • totalPages: (integer) - Общее количество страниц.
    • totalItems: (integer) - Общее количество элементов.
  • 500 Internal Server Error:
  {
    "statusCode": 500,
    "error": "Internal Server Error",
    "message": "Внутренняя ошибка сервера"
  }

GET /order/rest

Описание: Получение списка ресторанов для заказов.

Теги: Заказ

Summary: Возвращает список ресторанов для заказов.

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

Ответ:

  • 200 OK:
        [
            {
                "id": "restaurant_id_uuid",
                "name": "Название ресторана",
                "address": "Адрес ресторана"
             },
             {
                "id": "restaurant_id_uuid_2",
                "name": "Название ресторана 2",
                "address": "Адрес ресторана 2"
             }
         ]
    
    • id: (string) - ID ресторана.
    • name: (string) - Название ресторана.
    • address: (string) - Адрес ресторана.
  • 500 Internal Server Error:
{
     "statusCode": 500,
     "error": "Internal Server Error",
     "message": "Внутренняя ошибка сервера"
}

POST /order/validate-cart-items

Описание: Проверка элементов корзины.

Теги: Заказ

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

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

[
    {
        "product": {
            "id": "product_id",
             "price": 100
        },
        "quantity": 2,
         "mods": [
          {
             "id": "mod_id",
             "price": 10
          }
        ]
    },
      {
        "product": {
            "id": "product_id_2",
             "price": 100
        },
        "quantity": 1,
          "mods": []
    }
]
  • product: (object, required) - Информация о продукте.
    • id (string, required) - ID продукта
    • price: (integer, required) - Цена продукта.
  • quantity: (integer, required) - Количество продукта в корзине.
  • mods: (array, required) - Модификаторы продукта.
    • id (string, required) - ID модификатора
    • price: (integer, required) - Цена модификатора.

Ответ:

  • 200 OK:
true
  • В случае успеха вернет true
  • 422 Unprocessable Entity:
{
    "statusCode": 422,
    "error": "Unprocessable Entity",
     "message": "Ошибка корзины",
     "code": "WRONG_CART"
}
*   Некорректные данные в корзине
  • 500 Internal Server Error:
{
   "statusCode": 500,
   "error": "Internal Server Error",
   "message": "Внутренняя ошибка сервера"
}
*   Внутренняя ошибка сервера.

Примечания:

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