Мастерские
Все операции. Авторизация. Запросы и повторы.
Все пути в этом файле дополняют /api/v1 на домене организации.
Описание и ограничения
Назначение
Справочник подразделений организации с направлением работы, часовым поясом и доступными возможностями.
Поля и назначение
| Публичное поле | Формат и смысл | Доступ |
|---|---|---|
id |
id |
только чтение |
name |
обязательная строка | чтение и запись |
primary_process |
repair / installation / maintenance, при создании по умолчанию repair | чтение и запись |
city |
обязательная при создании строка, максимум 255 символов | чтение и запись |
address |
обязательная при создании строка, максимум 255 символов | чтение и запись |
phone |
обязательная при создании строка, максимум 255 символов | чтение и запись |
hourly_rate |
null либо объект amount/currency, ставка нормочаса | чтение и запись |
Обязательность и null указаны в схемах каждой операции ниже.
Доступ и выборка
Чтение требует workshops:read и «Системные настройки → Базовый доступ к системе»; изменение — workshops:write и «Системные настройки → Информация о компании» для выбранной мастерской. Выборка пересекает текущие области ролей и workshop_ids подключения. Фильтры: q по названию, primary_process.
Создание требует workshops:write и организационного «Системные настройки → Информация о компании»: право настройки отдельной мастерской не разрешает создавать новые подразделения. В одной транзакции с созданием новый ID добавляется в workshop_ids текущего подключения. Остальные мастерские этим не открываются; повтор команды возвращает прежнюю карточку и не расширяет область повторно. Смена направления на installation/maintenance дополнительно проверяет доступность соответствующей возможности тарифа.
Правила и связи
- При создании проверяется лимит мастерских тарифа.
name,city,addressиphoneобязательны, не пусты и ограничены 255 символами. Обновление принимает только переданные публичные поля; null для этих строк не допускается.- hourly_rate.amount — строка с точным числом дробных разрядов валюты организации;
currencyсовпадает с валютой организации. Ставка должна помещаться в существующее хранение decimal(18,2) без округления. - Основное направление мастерской и тип документа — отдельные настройки.
- Смена направления проходит штатное обеспечение модулей и справочников.
- При заполнении профиля могут создаваться статусы, работы, сценарии ТО, пункты чек-листа и дополнительные поля. Их изменения отражаются в событиях. В
meta.affected_resourcesвходят только доступные сотруднику объекты. Создание мастерской не требует отдельных разрешений чтения всех начальных записей.
Созданные при заполнении профиля работы, сценарии и дополнительные поля доступны через соответствующие ресурсы API. События доставляются только при наличии прав чтения этих ресурсов.
Операции
| Метод | Путь | Назначение |
|---|---|---|
| GET | /workshops |
Список с фильтрами и пагинацией |
| POST | /workshops |
Создание |
| GET | /workshops/{id} |
Карточка |
| POST | /workshops/{id}/update |
Изменение разрешённых полей |
GET /workshops
Список с фильтрами и пагинацией.
Доступ. Разрешения подключения: workshops:read. Права сотрудника: «Системные настройки → Базовый доступ к системе». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.
Параметры
| Имя | Где | Тип | Обязательно | null | Ограничения |
|---|---|---|---|---|---|
Authorization |
заголовок | строка | да | нет | Bearer <SERVICEAPP_TOKEN> |
sort |
параметр запроса | строка | нет | нет | Допустимо: "id", "-id" |
page[size] |
параметр запроса | целое число | нет | нет | ≥ 1; ≤ 100 |
page[cursor] |
параметр запроса | строка | нет | нет | не более 8192 символов |
filter[q] |
параметр запроса | строка | нет | нет | не более 200 символов |
filter[primary_process] |
параметр запроса | строка | нет | нет | Допустимо: "repair", "installation", "maintenance" |
Ответы
| HTTP | Назначение и схема |
|---|---|
| 200 | Успех. Полная схема и пример |
| 401 | Требуется действующий Bearer. Коды и формат ошибки |
| 403 | Недостаточно допуска. Коды и формат ошибки |
| 404 | Не найдено или недоступно. Коды и формат ошибки |
| 409 | Конфликт состояния или повтора. Коды и формат ошибки |
| 422 | Ошибка входных данных. Коды и формат ошибки |
| 429 | Лимит запросов, Retry-After. Коды и формат ошибки |
| 503 | Временно недоступно. Коды и формат ошибки |
Каждый ответ содержит новый X-Request-Id в заголовке. Общие транспортные отказы и правила повтора действуют также при отказе до контроллера; см. ошибки.
Пример запроса
Запускается из каталога комплекта после настройки переменных в быстром старте. Замените демонстрационные идентификаторы 101 и UUID идентификаторами доступных записей. $RESOURCE_VERSION берётся из GET владельца версии, описанного выше. Для нового действия сохраните новый ключ; для повтора используйте прежний.
curl --silent --show-error --globoff \
"$API/workshops" \
--header "Authorization: Bearer $SERVICEAPP_TOKEN" \
--header "Accept: application/json"
POST /workshops
Создание.
Доступ. Разрешения подключения: workshops:write. Права сотрудника: «Системные настройки → Информация о компании». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.
Параметры
| Имя | Где | Тип | Обязательно | null | Ограничения |
|---|---|---|---|---|---|
Authorization |
заголовок | строка | да | нет | Bearer <SERVICEAPP_TOKEN> |
Idempotency-Key |
заголовок | строка | да | нет | не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._:-]+$ |
Тело запроса
Content-Type: application/json. Тело обязательно.
| Поле | Тип | Обязательно | null | Ограничения и смысл |
|---|---|---|---|---|
name |
строка | да | нет | не менее 1 символов; не более 255 символов |
city |
строка | да | нет | не менее 1 символов; не более 255 символов |
address |
строка | да | нет | не менее 1 символов; не более 255 символов |
phone |
строка | да | нет | не менее 1 символов; не более 255 символов |
primary_process |
строка | нет | нет | Допустимо: "repair", "maintenance", "installation"; Основное направление мастерской: ремонт, обслуживание или монтаж. |
hourly_rate |
объект / null | нет | да | Только перечисленные ключи; Ставка или null. amount содержит точное число дробных разрядов валюты организации, currency совпадает с GET /context. |
hourly_rate.amount |
строка | да | нет | Шаблон: ^(?:0|[1-9][0-9]{0,15})(?:\.[0-9]{1,4})?$; Условие: required_with:hourly_rate |
hourly_rate.currency |
строка | да | нет | не менее 3 символов; не более 3 символов; Условие: required_with:hourly_rate |
Ответы
| HTTP | Назначение и схема |
|---|---|
| 201 | Создано. Полная схема и пример |
| 400 | Некорректный запрос. Коды и формат ошибки |
| 401 | Требуется действующий Bearer. Коды и формат ошибки |
| 403 | Недостаточно допуска. Коды и формат ошибки |
| 404 | Не найдено или недоступно. Коды и формат ошибки |
| 409 | Конфликт состояния или повтора. Коды и формат ошибки |
| 412 | Версия устарела. Коды и формат ошибки |
| 415 | Неподдерживаемый Content-Type. Коды и формат ошибки |
| 422 | Ошибка входных данных. Коды и формат ошибки |
| 428 | Нужно предусловие версии. Коды и формат ошибки |
| 429 | Лимит запросов, Retry-After. Коды и формат ошибки |
| 503 | Временно недоступно. Коды и формат ошибки |
| HTTP | Заголовок ответа | Тип | Описание |
|---|---|---|---|
| 201 | Location |
строка | |
| 201 | Idempotency-Replayed |
строка |
Каждый ответ содержит новый X-Request-Id в заголовке. Общие транспортные отказы и правила повтора действуют также при отказе до контроллера; см. ошибки.
У принятого POST Location и meta.operation_id указывают на журнал операции; ETag отсутствует. При повторе запроса сохраняются исходные data/meta, добавляется Idempotency-Replayed: true. Версии передавайте по назначению, указанному в описании ресурса.
Пример запроса
Запускается из каталога комплекта после настройки переменных в быстром старте. Замените демонстрационные идентификаторы 101 и UUID идентификаторами доступных записей. $RESOURCE_VERSION берётся из GET владельца версии, описанного выше. Для нового действия сохраните новый ключ; для повтора используйте прежний.
curl --silent --show-error --globoff --request POST \
"$API/workshops" \
--header "Authorization: Bearer $SERVICEAPP_TOKEN" \
--header "Accept: application/json" \
--header "Idempotency-Key: example:v1-workshops-store:001" \
--header "Content-Type: application/json" \
--data-binary '@examples/requests/v1.workshops.store.json'
GET /workshops/{id}
Карточка.
Доступ. Разрешения подключения: workshops:read. Права сотрудника: «Системные настройки → Базовый доступ к системе». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.
Параметры
| Имя | Где | Тип | Обязательно | null | Ограничения |
|---|---|---|---|---|---|
Authorization |
заголовок | строка | да | нет | Bearer <SERVICEAPP_TOKEN> |
id |
путь | строка | да | нет | Шаблон: ^(?:[0-9]+)$ |
If-None-Match |
заголовок | строка | нет | нет | — |
Ответы
| HTTP | Назначение и схема |
|---|---|
| 200 | Успех. Полная схема и пример |
| 304 | Представление не изменилось, без тела. Условный GET |
| 401 | Требуется действующий Bearer. Коды и формат ошибки |
| 403 | Недостаточно допуска. Коды и формат ошибки |
| 404 | Не найдено или недоступно. Коды и формат ошибки |
| 422 | Ошибка входных данных. Коды и формат ошибки |
| 429 | Лимит запросов, Retry-After. Коды и формат ошибки |
| 503 | Временно недоступно. Коды и формат ошибки |
| HTTP | Заголовок ответа | Тип | Описание |
|---|---|---|---|
| 200 | ETag |
строка | |
| 304 | ETag |
строка |
Каждый ответ содержит новый X-Request-Id в заголовке. Общие транспортные отказы и правила повтора действуют также при отказе до контроллера; см. ошибки.
Пример запроса
Запускается из каталога комплекта после настройки переменных в быстром старте. Замените демонстрационные идентификаторы 101 и UUID идентификаторами доступных записей. $RESOURCE_VERSION берётся из GET владельца версии, описанного выше. Для нового действия сохраните новый ключ; для повтора используйте прежний.
curl --silent --show-error --globoff \
"$API/workshops/101" \
--header "Authorization: Bearer $SERVICEAPP_TOKEN" \
--header "Accept: application/json"
POST /workshops/{id}/update
Изменение разрешённых полей.
Доступ. Разрешения подключения: workshops:write. Права сотрудника: «Системные настройки → Информация о компании». Дополнительно действуют доступ к записям, мастерским, модулям и условия полей из описания ресурса выше.
Параметры
| Имя | Где | Тип | Обязательно | null | Ограничения |
|---|---|---|---|---|---|
Authorization |
заголовок | строка | да | нет | Bearer <SERVICEAPP_TOKEN> |
id |
путь | строка | да | нет | Шаблон: ^(?:[0-9]+)$ |
Idempotency-Key |
заголовок | строка | да | нет | не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._:-]+$ |
If-Resource-Version |
заголовок | строка | да | нет | не менее 1 символов; не более 128 символов; Шаблон: ^[A-Za-z0-9._~-]+$ |
Тело запроса
Content-Type: application/json. Тело обязательно.
| Поле | Тип | Обязательно | null | Ограничения и смысл |
|---|---|---|---|---|
name |
строка | нет | нет | не менее 1 символов; не более 255 символов |
city |
строка | нет | нет | не менее 1 символов; не более 255 символов |
address |
строка | нет | нет | не менее 1 символов; не более 255 символов |
phone |
строка | нет | нет | не менее 1 символов; не более 255 символов |
primary_process |
строка | нет | нет | Допустимо: "repair", "maintenance", "installation"; Основное направление мастерской: ремонт, обслуживание или монтаж. |
hourly_rate |
объект / null | нет | да | Только перечисленные ключи; Ставка или null. amount содержит точное число дробных разрядов валюты организации, currency совпадает с GET /context. |
hourly_rate.amount |
строка | да | нет | Шаблон: ^(?:0|[1-9][0-9]{0,15})(?:\.[0-9]{1,4})?$; Условие: required_with:hourly_rate |
hourly_rate.currency |
строка | да | нет | не менее 3 символов; не более 3 символов; Условие: required_with:hourly_rate |
Ответы
| HTTP | Назначение и схема |
|---|---|
| 200 | Успех. Полная схема и пример |
| 400 | Некорректный запрос. Коды и формат ошибки |
| 401 | Требуется действующий Bearer. Коды и формат ошибки |
| 403 | Недостаточно допуска. Коды и формат ошибки |
| 404 | Не найдено или недоступно. Коды и формат ошибки |
| 409 | Конфликт состояния или повтора. Коды и формат ошибки |
| 412 | Версия устарела. Коды и формат ошибки |
| 415 | Неподдерживаемый Content-Type. Коды и формат ошибки |
| 422 | Ошибка входных данных. Коды и формат ошибки |
| 428 | Нужно предусловие версии. Коды и формат ошибки |
| 429 | Лимит запросов, Retry-After. Коды и формат ошибки |
| 503 | Временно недоступно. Коды и формат ошибки |
| HTTP | Заголовок ответа | Тип | Описание |
|---|---|---|---|
| 200 | Location |
строка | |
| 200 | Idempotency-Replayed |
строка |
Каждый ответ содержит новый X-Request-Id в заголовке. Общие транспортные отказы и правила повтора действуют также при отказе до контроллера; см. ошибки.
У принятого POST Location и meta.operation_id указывают на журнал операции; ETag отсутствует. При повторе запроса сохраняются исходные data/meta, добавляется Idempotency-Replayed: true. Версии передавайте по назначению, указанному в описании ресурса.
Пример запроса
Запускается из каталога комплекта после настройки переменных в быстром старте. Замените демонстрационные идентификаторы 101 и UUID идентификаторами доступных записей. $RESOURCE_VERSION берётся из GET владельца версии, описанного выше. Для нового действия сохраните новый ключ; для повтора используйте прежний.
curl --silent --show-error --globoff --request POST \
"$API/workshops/101/update" \
--header "Authorization: Bearer $SERVICEAPP_TOKEN" \
--header "Accept: application/json" \
--header "Idempotency-Key: example:v1-workshops-update:001" \
--header "If-Resource-Version: $RESOURCE_VERSION" \
--header "Content-Type: application/json" \
--data-binary '@examples/requests/v1.workshops.update.json'