# API информации о заказе
Необходимо реализовать API для мобильной и десктопной версии сервиса информации о заказе.
## Десктоные API
Макеты для понимания задачи: https://www.figma.com/file/AfvW51JAtIabG2qVF2yDGF/%D0%9C%D0%BE%D0%B8-%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D1%8B?node-id=4353%3A26995
### Основная информация
Entry point: `/orders/v1/#id/desktop-main-view`
#### Возможные секции контента
* Все товары (all)
* Отправление 1-... (parcel{id})
* Не вошло в заказ (not-included-to-order)
* Заявки {requests}
* Не вошло в заявку (not-included-to-request)
<details>
<summary>Схема ответа</summary>
```javascript
{
id: 123456, // Идентификатор заказа/заявки
type: 'order', // Тип заказ (order) или заявка СП (request)
info: 'Активный, создан 04.04.2019, 15 товаров, 120 единиц', // Описание заказа
actions: [
{
type: 'rotate',
text: 'Повторить заказ',
},
{
type: 'cancel',
text: 'Отменить'
},
{
type: 'pay-order',
text: 'Оплатить заказ'
}
],
messages: [
{
type: 'description',
content_type: 'template',
text: 'Обратите внимание! Изменилось количество {link} не вошедших в заказ',
fields: {
link: {
text: 'товаров',
type: 'action',
action: 'show-not-included',
}
}
},
{
type: 'description',
content_type: 'template',
text: 'Обратите внимание! Некоторые {link} не вошли',
fields: {
link: {
text: 'товары',
type: 'action',
action: 'show-diff'
}
}
},
{
type: 'success',
content_type: 'text',
text: 'Пин-код для получения 1 посылки: 678037',
icon: 'information'
}
],
sections: [
{
id: 'all',
name: 'Все товары',
},
{
id: 'parcel-1',
name: 'Отправление 1',
},
{
id: 'parcel-2',
name: 'Отправление 2',
},
{
id: 'not-included',
name: 'Не вошло в заказ',
}
],
}
```
</details>
---
### Дополнительная информация
Entry point: `/orders/v1/#id/desktop-additional-view`
#### Парметры запроса
* section - в зависимости от переданной секции формируется набор данных, если не передана, то следуюет возвращать ошибку
#### Блок стоимости (block type: cost)
Данные блока расчитывается для секции. Например, цена для секции «Все товары» расчитывается для всего заказа, а цена для секции «Отправлени 1» расчитывается только для отравления.
Не отображается в секециях «Заявки», «Не вошло в заказ» и «Не вошло в заявку».
#### Блок «Заметка организатора СП» (block type: note)
Отображается только на странице заявки если пользователь является организатором СП.
#### Блок персоны (block type: person)
Информация о менеджере отображается только для заказов, но не для заявок СП.
Информация о организаторе СП отображается только для заявок, в случае, если человек получатель, а не организатор СП.
#### Блок «Добавлено в заказ» (block type: actions-list)
Не отожрается в секции «Отправление», а так же в заявках.
#### Блок «Счета» (block type: actions-list)
Для секции отправлений заголовок блока становится «Счета к отправлению {number}»
Не отожрается в секции «Не вошло в заказ», а так же в заявках.
#### Блок «Получатель» (block type: recipient)
Отображается только на странице заявки если пользователь является организатором СП.
#### Блок «Файлы» (block type: files)
В макетах предполагается разделение на файлы для всего заказа и файлы для отправления. И, соответственно, это должно влиять на именя файлов. Если для всех заказов файл называется «Счета по заказу», то в отправлении будет «Счета по отравлению 1». Однако, я не уверен, что сервис посылок возвращает эти данные и мы эти данные способны получить в принципе. Если такой возможности нет, то нужно будет обсудить это отдельно, но, в рамках первоначальной реализации, стоит сделать вывод всех файлов и в секциях отправлений.
Не отожрается в секции «Не вошло в заказ».
<details>
<summary>Схема ответа</summary>
```javascript
{
blocks: [
{
title: null,
type: 'cost',
blocks: [
{
title: 'Товары',
price: 18820,
type: 'cost-row',
block: null,
},
{
title: 'Доставка',
price: 1000,
blocks: [ // Из чего слкадывается стоимость доставки
{
title: 'Доставка Сима-ленд',
price: null,
notice: 'Включена в стоимость',
},
{
title: 'Доставка Сима-ленд',
price: 450,
notice: null
}
]
},
{
title: 'Итого', // или Итого за отправление 1
price: 10000,
type: 'cost-row',
block: null,
}
]
},
{
title: null,
type: 'note',
blocks: [
{
notice: 'Просил не звонить ему'
}
]
},
{
title: null,
type: 'person',
blocks: [
{
title: 'Менеджер заказа',
avatar: 'https://cdn2.static1-sima-land.com/manager/2536.jpg',
role: 'Менеджер по менеджерам',
name: 'Марина Михайловская',
email: 'per_ev@sima-land.ru',
skype: 'per_ev_sima@outlook.com',
phone: '+7 800 234 1000 (доб. 6784)',
phone_url: 'tel:+78002341000,,6784'
mobile_phone: '+7 912 042 94 53',
mobile_phone_url: 'tel:+79120429453',
},
{
title: 'Организатор закупки',
avatar: 'https://cdn2.static1-sima-land.com/manager/2536.jpg',
role: 'Организатор совместной закупки',
name: 'Сёмин Денис Геннадьевич (ежедневная отгрузка из Екатеринбурга)',
email: 'per_ev@sima-land.ru',
phone: '+7 800 234 1000 (доб. 6784)',
phone_url: 'tel:+78002341000,,6784'
mobile_phone: '+7 912 042 94 53',
mobile_phone_url: 'tel:+79120429453',
link: {
text: 'Профиль организатора',
url: '/path/to/profile/'
}
social: [
{
url: 'https://vk.com/oks2art',
text: 'https://vk.com/oks2art',
}
],
}
]
},
{
title: 'Добавлено в заказ',
type: 'action-list',
blocks: [
{
text: 'Дозаказ 02 апреля (ср) 15:00',
action: 'show-reorders-modal',
data: {
id: 5628516, // Идентификатор дозаказа
}
},
{
text: 'Дозаказ 02 апреля (ср) 15:00',
action: 'show-reorders-modal',
data: {
id: 5628516, // Идентификатор дозаказа
}
}
]
},
{
title: 'Счета', // Счета к отправлению {number} (только для отправлений)
type: 'action-list',
blocks: [
{
text: 'ТДС01515025', // Название счета
action: 'show-invoice-modal',
data: {
id: 1234567, // Идентификатор счета
}
},
]
},
{
title: null,
type: 'recipient',
blocks: [
{
title: 'Получатель',
type: 'info',
blocks: [
{
type: 'text',
content: 'Чернышева Светлана'
},
{
type: 'link',
content: {
text: 'svetiklalalaa@mail.ru',
href: 'mailto:svetiklalalaa@mail.ru'
}
},
{
type: 'link',
content: {
text: '+7 922 144 00 50',
href: 'tel:+79221440050'
}
}
],
},
{
title: 'Когда и куда доставлять',
type: 'info',
blocks: [
{
type: 'text',
content: 'Ориентировочно 15 апреля (пн)'
},
{
type: 'text',
content: 'г. Екатеринбург ул. Патриса Лумумбы, д. 3, кв 35'
}
]
}
]
},
{
title: 'Файлы',
type: 'files',
blocks: [
{
name: 'Счет по заказу',
url: '/bill-123456.xls',
format: 'xls',
},
{
name: 'Отгрузочные документы',
url: '/documents-123456.zip',
format: 'zip'
}
]
},
],
}
```
</details>
---
### Товары
Entry point: `/orders/v1/#id/desktop-items-view`
Ранее реализовывали API в [задаче #181](https://gitlab.sima-land.ru/dev-dep/dev/ilium/-/issues/181), можно взять его за основу, но изменить entry point.
#### Парметры запроса
* section - в зависимости от переданной секции формируется список товаров, если не передана, то следуюет возвращать ошибку
* after-sid — для переключения страниц
<details>
<summary>Схема ответа</summary>
```javascript
{
parcel: {
info: 'Отправление ждёт отмены. Это может занять несколько минут.',
deliveryDate: 'Доставка 15 апреля (пн) с 14:00 до 20:00',
deliveryType: 'Службой доставки Сима-ленд до двери по адресу: г. Екатеринбург, ул. Ленина, 1, кв 86',
contact: {
name: 'Иванов Иван',
phone_number: 'tel:+91234567890',
phone_number_formatted: '+7(123)456-78-90'
}
actions: [
{
type: 'action',
text: 'Отменить отправление',
action: 'cancel-parcel',
},
{
type: 'action',
text: 'Заказать еще',
action: 'rotate-parcel',
},
{
type: 'action',
text: 'Отслеживание'
action: 'show-tracking-modal',
data: {
trackNumber: 12345678910,
website: 'http://elivery-service.ru/',
}
},
{
type: 'link',
text: 'Отслеживание'
url: 'http://delivery-service.ru/?trackId=123678910',
},
{
type: 'show-pickup-point',
text: 'Подробно о пункте выдачи',
data: {
id: 1234567, // Идентификатор пункт выдачи
}
}
]
},
items: [
{
id: 123456,
sid: 456789,
photo: 'https://cdn.host.com/path/to/img.jpg',
title: 'Ножницы',
qty: '10 наборов',
unit: 'шт.', // единица измерения в Им падеже ед. числе
totalPrice: 2500,
price: 250,
isNotAvailable: true,
movedToOrder: {
id: 123456,
link: "link/to/order/123456",
},
deliveryCost: 100,
wholesaleType: 'Опт "Крупный опт"',
isWished: true,
}
],
nextPage: [
{
name: 'after-sid',
value: '123456'
}
]
}
```
</details>
---
## Мобильное API
Макеты для понимания задачи: https://www.figma.com/file/AfvW51JAtIabG2qVF2yDGF/%D0%9C%D0%BE%D0%B8-%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D1%8B?node-id=4353%3A29178
### Основная информация
Entry point: `/orders/v1/#id/mobile-main-view`
#### Поле messages
В отличии от десктопного API в поле `messages` не нужно добавлять пин-коды.
#### Поле sections
В секциях отправлений необходимо выводить не более трех товаров, в остальных секция товары не нужны.
<details>
<summary>Схема ответа</summary>
```javascript
{
id: 123456, // Идентификатор заказа/заявки
type: 'order', // Тип заказ (order) или заявка СП (request)
info: 'Активный, создан 04.04.2019, 15 товаров, 120 единиц', // Описание заказа
actions: [
{
type: 'pay-order',
text: 'Оплатить заказ'
},
{
type: 'rotate',
text: 'Повторить заказ',
},
{
type: 'cancel',
text: 'Отменить заказ'
},
],
messages: [
{
type: 'description',
content_type: 'template',
text: 'Обратите внимание! Изменилось количество {link} не вошедших в заказ',
fields: {
link: {
text: 'товаров',
type: 'action',
action: 'show-not-included'
}
}
},
{
type: 'description',
content_type: 'template',
text: 'Обратите внимание! Некоторые {link} не вошли',
fields: {
link: {
text: 'товары',
type: 'action',
action: 'show-diff'
}
}
},
],
sections: [
{
id: 'all',
name: 'Все товары',
description: '26 товаров, 124 единицы',
note: null,
products: null,
},
{
id: 'parcel-1',
name: 'Отправление 1',
description: 'Ожидает в пункте выдачи',
note: 'Пин-код: 123456',
products: [
{
title: 'Название товара',
image: '/path/to/image.png'
},
{
title: 'Название товара',
image: '/path/to/image.png'
},
{
title: 'Название товара',
image: '/path/to/image.png'
}
]
},
{
id: 'parcel-2',
name: 'Отправление 2',
description: 'В пути',
note: null,
products: [
{
title: 'Название товара',
image: '/path/to/image.png'
},
]
},
{
id: 'not-included',
name: 'Не вошло в заказ',
description: null,
note: null,
products: null,
}
{
id: 'requests',
name: 'Заявки',
description: '86 заявок покупателей',
note: null,
products: null,
}
],
}
```
</details>
---
### Дополнительная информация
Entry point: `/orders/v1/#id/mobile-additional-view`
Блоки:
- cost — выводится всегда
- note — выводится только на странице организатора СП
- person — менеджер выводится только на страницах заказов, а организатор СП только в заявках пользователей, не организаторов СП
- invoices — выводится только в заказах
- action-list (Добавлено в закаказ) — только в заказах у которых есть дозаказы
- recipient — только на странице организатора СП
- files — на всех страницах
<details>
<summary>Схема ответа</summary>
```javascript
{
blocks: [
{
title: null,
type: 'cost',
blocks: [
{
title: 'Товары',
price: 18820,
type: 'cost-row',
block: null,
},
{
title: 'Доставка',
price: 1000,
blocks: [ // Из чего слкадывается стоимость доставки
{
title: 'Доставка Сима-ленд',
price: null,
notice: 'Включена в стоимость',
},
{
title: 'Доставка Сима-ленд',
price: 450,
notice: null
}
]
},
{
title: 'Итого', // или Итого за отправление 1
price: 10000,
type: 'cost-row',
block: null,
}
]
},
{
title: null,
type: 'note',
blocks: [
{
notice: 'Просил не звонить ему'
}
]
},
{
title: null,
type: 'person',
blocks: [
{
title: 'Менеджер заказа',
avatar: 'https://cdn2.static1-sima-land.com/manager/2536.jpg',
role: 'Менеджер по менеджерам',
name: 'Марина Михайловская',
email: 'per_ev@sima-land.ru',
skype: 'per_ev_sima@outlook.com',
phone: '+7 800 234 1000 (доб. 6784)',
phone_url: 'tel:+78002341000,,6784',
mobile_phone: '+7 912 042 94 53',
mobile_phone_url: 'tel:+79120429453',
},
{
title: 'Организатор закупки',
avatar: 'https://cdn2.static1-sima-land.com/manager/2536.jpg',
role: 'Организатор совместной закупки',
name: 'Сёмин Денис Геннадьевич (ежедневная отгрузка из Екатеринбурга)',
email: 'per_ev@sima-land.ru',
phone: '+7 800 234 1000 (доб. 6784)',
phone_url: 'tel:+78002341000,,6784',
mobile_phone: '+7 912 042 94 53',
mobile_phone_url: 'tel:+79120429453',
link: {
text: 'Профиль организатора',
url: '/path/to/profile/'
}
social: [
{
url: 'https://vk.com/oks2art',
text: 'https://vk.com/oks2art',
}
],
}
]
},
{
title: 'Счета', // Счета к отправлению {number} (только для отправлений)
type: 'invoices',
blocks: [
{
id: 1234567, // Идентификатор счета
name: 'ТДС01515025' // Название счета
}
]
},
{
title: 'Добавлено в заказ',
type: 'action-list',
blocks: [
{
text: 'Дозаказ 02 апреля (ср) 15:00',
action: 'show-reorders-modal',
data: {
id: 5628516, // Идентификатор дозаказа
}
},
{
text: 'Дозаказ 02 апреля (ср) 15:00',
action: 'show-reorders-modal',
data: {
id: 5628516, // Идентификатор дозаказа
}
}
]
},
{
title: null,
type: 'recipient',
blocks: [
{
title: 'Получатель',
type: 'info',
blocks: [
{
type: 'text',
content: 'Чернышева Светлана'
},
{
type: 'link',
content: {
text: 'svetiklalalaa@mail.ru',
href: 'mailto:svetiklalalaa@mail.ru'
}
},
{
type: 'link',
content: {
text: '+7 922 144 00 50',
href: 'tel:+79221440050'
}
}
],
},
{
title: 'Когда и куда доставлять',
type: 'info',
blocks: [
{
type: 'text',
content: 'Ориентировочно 15 апреля (пн)'
},
{
type: 'text',
content: 'г. Екатеринбург ул. Патриса Лумумбы, д. 3, кв 35'
}
]
}
]
},
{
title: 'Файлы',
type: 'files',
blocks: [
{
name: 'Счет по заказу',
url: '/bill-123456.xls',
format: 'xls',
},
{
name: 'Отгрузочные документы',
url: '/documents-123456.zip',
format: 'zip'
}
]
},
]
}
```
</details>
---
### Товары
Entry point: `/orders/v1/#id/mobile-items-view`
API должно принимать секцию или идентификатор чека и возвращать товары для этой секции или чека. Если не передана ни секция, ни чек, то следует возвращать ошибку
#### Парметры запроса
* section - в зависимости от переданной секции формируется список товаров, если не передана, то следуюет возвращать ошибку
* after-sid — для переключения страниц
#### Поле «title»
В зависимости от переданных данных заголовок будет разный
* section=all — Товары из заказа
* section=parcel-1 — Отправление 1
* section=not-included-to-order - Не вошло в заказ
* section=requests — Заявки
* section=not-included-to-request — Не вошлов в заявку
* check={id} - Название чека, например «Счёт СЛ000007531»
#### Поле «subtitle»
Выводится, если передать следующие параметры
* section=all
* section=parcel-1
* section=not-included-to-order
* section=requests
* section=not-included-to-request
<details>
<summary>Схема ответа</summary>
```javascript
{
title: 'Отправление 1',
subtitle: '23 товара, 196 единиц',
items: [
{
id: 123456,
sid: 456789,
photo: 'https://cdn.host.com/path/to/img.jpg',
title: 'Ножницы',
qty: '10 наборов',
unit: 'шт.', // единица измерения в Им падеже ед. числе
totalPrice: 2500,
price: 250,
isNotAvailable: true,
movedToOrder: {
id: 123456,
link: "link/to/order/123456",
},
deliveryCost: 100,
wholesaleType: 'Опт "Крупный опт"'
}
],
nextPage: [
{
name: 'after-sid',
value: '123456'
}
]
}
```
</details>
---
### Детальная информация экрана
Entry point: `/orders/v1/#id/details-screen-view`
API должно принимать секцию или идентификатор чека и возвращать данные для этой секции или чека. Если не передана ни секция, ни чек, то следует возвращать ошибку
#### Парметры запроса
* section - в зависимости от переданной секции формируется список данных, если не передана, то следует возвращать ошибку
* check — идентификатор чека
#### Блок messages
В поле ыводятся данные пин-кодов для отправлений, но, в будущем, здесь могут быть и другие данные.
#### Блок cost
Выводится стоимть для чека или для отправления
#### Блок parcel
Выводится детальные данные отправления
#### Блок files
Выводится файлы актуальные для отправления или счета
<details>
<summary>Схема ответа</summary>
```javascript
{
blocks: [
{
title: null,
type: 'messages',
blocks: [
{
type: 'success',
content_type: 'text',
text: 'Пин-код для получения 1 посылки: 678037',
icon: 'information',
}
]
},
{
title: null,
type: 'cost',
blocks: [
{
title: 'Товары',
price: 18820,
type: 'cost-row',
block: null,
},
{
title: 'Доставка',
price: 1000,
blocks: [ // Из чего слкадывается стоимость доставки
{
title: 'Доставка Сима-ленд',
price: null,
notice: 'Включена в стоимость',
},
{
title: 'Доставка Сима-ленд',
price: 450,
notice: null,
},
],
},
{
title: 'Итого за отправление 1',
price: 10000,
type: 'cost-row',
block: null,
},
]
},
{
title: null,
type: 'parcel',
blocks: [
{
info: 'Отправление ждёт отмены. Это может занять несколько минут.',
deliveryDate: 'Доставка 15 апреля (пн) с 14:00 до 20:00',
deliveryType: 'Службой доставки Сима-ленд до двери по адресу: г. Екатеринбург, ул. Ленина, 1, кв 86',
contact: {
name: 'Иванов Иван',
phone_number: 'tel:+91234567890',
phone_number_formatted: '+7(123)456-78-90'
}
actions: [
{
type: 'action',
text: 'Отменить отправление',
action: 'cancel-parcel',
},
{
type: 'action',
text: 'Заказать еще',
action: 'rotate-parcel',
},
{
type: 'action',
text: 'Отслеживание'
action: 'show-tracking-modal',
data: {
trackNumber: 12345678910,
website: 'http://elivery-service.ru/',
}
},
{
type: 'link',
text: 'Отслеживание'
url: 'http://delivery-service.ru/?trackId=123678910',
},
{
type: 'show-pickup-point',
text: 'Подробно о пункте выдачи',
data: {
id: 1234567, // Идентификатор пункт выдачи
}
}
]
}
]
},
{
title: null,
type: 'files',
blocks: [
{
name: 'Счет по заказу',
url: '/bill-123456.xls',
format: 'xls',
},
{
name: 'Отгрузочные документы',
url: '/documents-123456.zip',
format: 'zip'
}
]
}
],
}
```
</details>
---
## Другие API
### Изменения в заказе
Entry point: `/orders/v1/#id/changed-items-view`
API должно возвращать список изменений в заказе
<details>
<summary>Схема ответа</summary>
```javascript
{
items: [
{
id: 123456,
sid: 456789,
photo: 'https://cdn.host.com/path/to/img.jpg',
title: 'Ножницы',
qty: '10 наборов',
unit: 'шт.', // единица измерения в Им падеже ед. числе
totalPrice: 2500,
price: 250,
isNotAvailable: true,
movedToOrder: {
id: 123456,
link: "link/to/order/123456",
},
deliveryCost: 100,
wholesaleType: 'Опт "Крупный опт"',
wasInOrder: '50 шт.', // Было в заказе
bacameInOrder: '10 шт.', // Вы получите
isWished: true,
}
],
nextPage: [
{
name: 'after-sid',
value: '123456'
}
]
}
```
</details>
---
### Список заявок
Entry point: `/orders/v1/#id/requests-view`
API должно возвращать список заявок относящихся к заказу организатора СП
<details>
<summary>Схема ответа</summary>
```javascript
{
items: [
{
id: 123456,
title: 'Заявка №8608172',
info: '1 товар, 1 единица',
cost: 17988166,
author: 'Константиновопльский Константин Констанотинович',
url: '/order/123456',
}
],
nextPage: [
{
name: 'after-id',
value: '123456'
}
]
}
```
</details>