Запрос

PATCH https://delivery.ucs.ru/orders/api/v1/orders/{orderId}

Content-Type: application/json

Метод PATCH позволяет производить полное или частичное обновление модели.

Пример запроса — частичное изменение "Гостя"

{
 "guest": {
   "phone": "79215724648",
   "firstName": "Максим"
 }
}
JSON

Пример запроса — частичное изменение "Гостя" и "Адреса"

{
 "guest":{
    "phone":"77733595836",
    "firstName":"Валерий Генадьевич"
  },
 "address":{
    "postcode":"109443",
    "street":"Юных Ленинцев",
    "lat":55.69945,
    "lon":37.773144,
    "cityName":"Москва",
    "apartmentNumber":"456",
    "houseNumber":"85",
    "entrance":"1 ",
    "fullAddress":"109443, г Москва, ул Юных Ленинцев, д 85 к 1"
  }
}
JSON

Пример запроса — полное изменение

{
 "comment": "приготовьте с любовью ",
 "restaurantId": "76439fb3-c0c4-42ca-a269-64f031a6a33b",
 "orderStatusId": 1,
 "orderStatusName": "Новый",
 "persons": "1",
 "dishList": [
   {
     "id": "76439fb3-c0c4-42ca-a269-64f031a6a33b",
     "name": "салат цезарь",
     "price": "400",
     "measure": {
        "value": "0.300",
        "unit": "кг"
     },	
     "quantity": "1",
     "ingredients": [ 
       {
         "id": "76439fb3-c0c4-42ca-a269-64f031a6a33b",
         "name": "помидоры",
    	 "price": "120",
         "measure": {
            "value": "0.100",
            "unit": "кг" 
         },
         "quantity": "2"
       }
     ]
   }
 ],
 "expeditionType": "delivery",
 "expectedAt":"2020-10-22T10:44:51.586+00:00",
 "paymentTypeId": "card",
 "changeFrom": "5000",
 "guest": {
   "phone": "79215724648",
   "firstName": "Максим"
 },
 "address": {
   "postcode": "109443",
   "cityId": "73439fb3-c0c4-42ca-a269-64f031a6a33b",
   "street": "Юных Ленинцев",
   "comment": " дом находится справа от школы",
   "lat": "55.700897",
   "lon": "37.773808",
   "cityName": "Москва",
   "entrance": "1",
   "houseNumber": "85",
   "apartmentNumber": "6",
   "subway": "Кузьминки",
   "fullAddress": "109443, г Москва, ул Юных Ленинцев, д 85 к 2, кв 6" 
 }
}
JSON

Ответ при успешном изменении заказа: 200 OK 

Параметры

Обязательные поля зависят от выбранного способа доставки:

  • delivery — доставка курьером 
  • pickup — самовывоз

Проверка на заполнение обязательных полей:

  1. Передаётся определённые параметр (не обязательный) — проверка не включается
  2. Передаётся определённые параметр (обязательный) — проверка включается
  3. Передаётся весь заказ — проверка обязательных полей для заказа включается
  4. Передается параметр expeditionType — проверка обязательных полей для заказа включается 
Параметр
ОписаниеОбязательный для deliveryОбязательный для pickup
orderIdstringномер заказадада
commentstringкомментарий к заказунетнет
restaurantIdstringid ресторананетда
personsintколичество персоннетнет
dishListarrayсостав заказадада

-id

stringid блюда(формат GUID) из представления меню Delivery, которое используется для синхронизации с кассойдада
-namestringнаименование блюданетнет
-price

double

разделителем всегда будет  точка - "." 

цена блюданетнет
-measure
меранетнет
--valuedoubleразмер порциинетнет
--unitstringединица измерения: кг, литр, шт. Значение не словарное нетнет
-quantity

double

разделителем всегда будет  точка - "." 

количество блюддада
-ingredientsarrayингредиентынетнет
--idstringid ингредиента (формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой

--namestringнаименование ингредиента

--price

double

разделителем всегда будет  точка - "." 

цена ингредиента

--quantity

double

разделителем всегда будет  точка - "." 

количество ингредиентадада
--ingredientsarrayмодификаторы 

---idstringid модификатора (формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой

---namestringнаименование модификатора

---price

double

разделителем всегда будет  точка - "." 

цена модификатора

---quantity

double

разделителем всегда будет  точка - "." 

количество модификаторадада
expeditionTypestringспособ получения заказа (delivery, pickup)дада
expectedAtDateTimeвремя к которому ожидается заказдада
paymentTypeIdstring

id способа оплаты:

  • cash - оплата наличными,
  • card - оплата картой,
  • online - онлайн оплата.
дада
changeFrom

double

разделителем всегда будет  точка - "." 

сдача с какой суммынетнет
guest
гостьданет
-emailstringэлектронная почта гостянетнет
-phonestringномер телефонаданет
-firstNamestringимянетнет
-lastNamestringфамилия нетнет
address
адрес доставкинетнет
-postcodestringпочтовый индекснетнет
-streetstringулицаданет
-commentstringкомментарий к адресунетнет
-lat

double

разделителем всегда будет  точка - "." 

широтанетнет
-lon

double

разделителем всегда будет  точка - "." 

долготанетнет
-cityIdstringid городанетнет
-cityNamestringнаименование городаданет
-floorintэтажнетнет
-houseNumberstringномер домада
-apartmentNumberstringномер квартиры нетнет
-entrancestringвходнетнет
-subwaystringметронетнет
-fullAddressstringполный адресданет

Изменение статуса заказа

Статус "Подтвержден"

PUT /api/v1/orders/{orderId}/confirm
Переводит заказ в статус Подтверждён (Confirmed). Используется источниками заказов (агрегаторами, сайтами) для подтверждения принятия заказа в работу.

Примечания:

  • Метод предназначен только для API-интеграций (источники заказов)
  • Переход возможен из статуса Новый (New) в Подтверждён (Confirmed)
  • Для отмены заказа используется PUT /api/v1/orders/{orderId}/reject

Аутентификация:

  • Схема: Bearer Token (`token`)
  • Роль: `ordersource`
  • Политика: `ShouldActive` (активный пользователь)

Параметры пути:

ПараметрТипОбязательныйОписание
`orderId`stringДа  Идентификатор заказа (строковый)

Тело запроса:

Не требуется (пустой `PUT`).

Ответы:

КодОписание
200 OKСтатус заказа успешно изменён на Подтверждён
400 Bad RequestОшибка валидации (заказ не поддерживает такой переход)
401 UnauthorizedОтсутствует или недействителен токен
403 Forbidden*Нет роли `ordersource`
404 Not FoundЗаказ не найден или нет доступа к нему
422 Unprocessable EntityЗаказ уже в финальном статусе (выполнен/отменён)

Пример запроса

http
PUT /api/v1/orders/ORD-12345/confirm HTTP/1.1
Host: api.example.com
Authorization: Bearer <token>
Content-Type: application/json
JSON

Статус "Передан на кухню"

PUT /api/v1/orders/{orderId}/tokitchen

Переводит заказ в статус Передан на кухню (OnKitchen). Используется источниками заказов для уведомления о том, что заказ принят в работу на кухне ресторана.

Примечания:

  • Метод предназначен только для API-интеграций (источники заказов)
  • Переход возможен из статуса Принят в ресторане (Accepted) в Передан на кухню (OnKitchen)
  • Перед вызовом заказ должен быть в статусе Подтверждён или Принят в ресторане.

Аутентификация:

  • Схема: Bearer Token (`token`)
  • Роль: `ordersource`
  • Политика: `ShouldActive` (активный пользователь)

Параметры пути:

ПараметрТипОбязательныйОписание
`orderId`stringДаИдентификатор заказа (строковый)

Тело запроса:

Не требуется (пустой `PUT`).

Ответы:

КодОписание
200 OKСтатус заказа успешно изменён на Передан на кухню
400 Bad RequestОшибка валидации (заказ не поддерживает такой переход)
401 UnauthorizedОтсутствует или недействителен токен
403 Forbidden*Нет роли `ordersource`
404 Not FoundЗаказ не найден или нет доступа к нему
422 Unprocessable EntityЗаказ уже в финальном статусе (выполнен/отменён)

Пример запроса

http
PUT /api/v1/orders/ORD-12345/tokitchen HTTP/1.1
Host: api.example.com
Authorization: Bearer <token>
Content-Type: application/json
JSON

Статус "Отменен"

PUT /api/v1/orders/{orderId}/reject

Отменяет заказ и переводит его в статус Отменён (Cancelled). Используется для отмены заказа с указанием причины.

Примечания:

  • Список доступных причин отмены для заказа: `GET /api/v1/orders/{orderId}/rejectionReasons`
  • Заказ в финальном статусе (выполнен или уже отменён) отменить нельзя
  • Роль `ordersource` имеет доступ только к заказам своего источника.

Аутентификация:

  • Схема: Bearer Token (`token`)
  • Роли: `ordersource`
  • Политика: `ShouldActive` (активный пользователь)

Параметры пути:

ПараметрТипОбязательныйОписание
`orderId`stringДаИдентификатор заказа (строковый)

Тело запроса:

ПараметрТипОбязательныйОписание
`rejectionReasonId`Guid?Зависит*Идентификатор причины отмены. Список: `GET /api/v1/orders/{orderId}/rejectionReasons`
`rejectionReasonText`stringЗависит*Текстовое описание причины отмены (требуется для некоторых причин)  
`isExternal`  boolНет  Признак внешней отмены (по умолчанию `false`)

* Для некоторых причин отмены обязателен `rejectionReasonId`, для других — `rejectionReasonText`. Точные требования зависят от настроек корпорации.

Ответы:

КодОписание
200 OKЗаказа успешно отменен
400 Bad RequestОшибка валидации (не указана причина, неверный формат и т.п.)
401 UnauthorizedОтсутствует или недействителен токен
403 Forbidden*Нет требуемой роли
404 Not FoundЗаказ не найден или нет доступа к нему; причина отмены не найдена
422 Unprocessable EntityЗаказ уже в финальном статусе (выполнен/отменён)

Пример запроса

http
PUT /api/v1/orders/ORD-12345/reject HTTP/1.1
Host: api.example.com
Authorization: Bearer <token>
Content-Type: application/json

{
  "rejectionReasonId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "rejectionReasonText": "Клиент отказался от заказа",
  "isExternal": false
}
JSON

Общий пример успешного ответа

http
HTTP/1.1 200 OK
Content-Type: application/json

{
  "status": "ok",
  "data": null
}
JSON