# 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>