openapi: 3.0.3
info:
  title: preset
  version: 1.0.1785741092963
  description: Сервис preset
  license:
    name: CC BY-NC-ND 4.0
    url: https://gitlab.infra.rtkit.dev/openapi/key/raw/main/LICENCE.md
tags:
  - name: event(auth)
    description: Методы event. Требуют авторизацию. Доступны из интернета
  - name: preset(auth)
    description: Методы preset. Требуют авторизацию. Доступны из интернета
  - name: system(public)
    description: Методы system. Не требуют авторизацию. Доступны из интернета
paths:
  "/preset/api/v1/event/preset/{id}/install":
    post:
      summary: |-
        Метод установки пресета.
        Метод доступен для: admin, service
      operationId: EventService_PostEventPresetInstall
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostEventPresetInstallResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: Идентификатор пресета
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - event(auth)
      security:
        - oauth2:
            - preset:edit
          bearerHttp: []
  /preset/api/v1/preset:
    post:
      summary: >-
        Метод сохранения пресетов.

        Поддерживает создание и обновление.

        При обновлении пресета посылается задача PresetInstallTask в очередь key.preset.install.

        Данное сообщение должно отправляться только если изменению подверглось одно из следующих полей:

        - Sip;

        - Ntp;

        - Syslog;

        - Room;

        - VideoConfig;

        - Dtmf.

        Метод доступен для: admin, service
      operationId: PresetService_PostPreset
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPresetResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPresetResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPresetResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostPresetRequest"
        required: true
      tags:
        - preset(auth)
      security:
        - oauth2:
            - preset:edit
          bearerHttp: []
      parameters:
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
  /preset/api/v1/preset/count:
    get:
      summary: |-
        Метод получения количества пресетов.
        Метод доступен для: admin, service, bti, ltp_first, owner, employee
      operationId: PresetService_GetPresetCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetPresetCountResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetPresetCountResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetPresetCountResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.mrfIds
          description: По идентификаторам МРФ
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: integer
              format: int32
        - name: filter.rfIds
          description: По идентификаторам РФ
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: integer
              format: int32
        - name: filter.text
          description: |-
            Поиск по тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Наименование;
            # - Описание
          in: query
          required: false
          schema:
            type: string
        - name: filter.title
          description: |-
            Поиск по наименованию.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Наименование
          in: query
          required: false
          schema:
            type: string
        - name: filter.statusTypes
          description: |-
            По статусам

             - STATUS_TYPE_UNKNOWN: Значение не указано
             - ACTIVE: Активный
             - ARCHIVE: Архивный
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - ACTIVE
                - ARCHIVE
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - preset(auth)
      security:
        - oauth2:
            - preset:read
            - preset:edit
          bearerHttp: []
  /preset/api/v1/preset/default:
    get:
      summary: |-
        Метод получения дефолтного пресета.
        Метод доступен для: admin, service, bti, ltp_first, owner, employee
      operationId: PresetService_GetPresetDefault
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetPresetDefaultResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - preset(auth)
      security:
        - oauth2:
            - preset:read
            - preset:edit
          bearerHttp: []
      parameters:
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
  /preset/api/v1/preset/list:
    get:
      summary: |-
        Метод получения пресетов.
        Метод доступен для: admin, service, bti, ltp_first, owner, employee
      operationId: PresetService_GetPresetList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: "#/components/schemas/v1GetPresetListResponse"
                  error:
                    $ref: "#/components/schemas/rpcStatus"
                title: Поток объектов v1GetPresetListResponse
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.mrfIds
          description: По идентификаторам МРФ
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: integer
              format: int32
        - name: filter.rfIds
          description: По идентификаторам РФ
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: integer
              format: int32
        - name: filter.text
          description: |-
            Поиск по тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Наименование;
            # - Описание
          in: query
          required: false
          schema:
            type: string
        - name: filter.title
          description: |-
            Поиск по наименованию.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Наименование
          in: query
          required: false
          schema:
            type: string
        - name: filter.statusTypes
          description: |-
            По статусам

             - STATUS_TYPE_UNKNOWN: Значение не указано
             - ACTIVE: Активный
             - ARCHIVE: Архивный
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - ACTIVE
                - ARCHIVE
        - name: paging.orderByType
          description: >-
            Тип значения сортировки.

            Если значение не передано, то будет взято значение по умолчанию.

            # По умолчанию: CHANGED_AT

             - ORDER_BY_TYPE_UNKNOWN: Значение не указано
             - ID: По идентификатору
             - CREATED_AT: По времени создания
             - CHANGED_AT: По времени изменения
             - RANK: По рангу для поиска по тексту.
            Применяется когда передано поле для поиска по тексту.

            В случае если текстовое поле не передано, применяется значение по умолчанию
          in: query
          required: false
          schema:
            type: string
            enum:
              - ID
              - CREATED_AT
              - CHANGED_AT
              - RANK
        - name: paging.directionType
          description: |-
            Тип направления сортировки.
            # По умолчанию: DESC

             - DIRECTION_TYPE_UNKNOWN: Значение не указано
             - DESC: От большего к меньшему
             - ASC: От меньшего к большему
          in: query
          required: false
          schema:
            type: string
            enum:
              - DESC
              - ASC
        - name: paging.limit
          description: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: paging.offset
          description: |-
            Сдвиг.
            # Диапазон: 0..2147483647
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - preset(auth)
      security:
        - oauth2:
            - preset:read
            - preset:edit
          bearerHttp: []
  "/preset/api/v1/preset/{id}":
    get:
      summary: |-
        Метод получения пресета по идентификатору.
        Метод доступен для: admin, service, bti, ltp_first, owner, employee
      operationId: PresetService_GetPreset
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetPresetResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: Идентификатор
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - preset(auth)
      security:
        - oauth2:
            - preset:read
            - preset:edit
          bearerHttp: []
    delete:
      summary: |-
        Метод удаления пресета.
        Нельзя удалить пресет, если он используется на устройстве.
        Нельзя удалить дефолтный пресет.
        Метод доступен для: admin, service
      operationId: PresetService_DeletePreset
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeletePresetResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeletePresetResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeletePresetResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: Идентификатор пресета
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - preset(auth)
      security:
        - oauth2:
            - preset:edit
          bearerHttp: []
  /preset/api/v1/system/status:
    get:
      summary: |-
        Метод получения статуса сервиса.
        Не требует авторизации
      operationId: SystemService_GetSystemStatus
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSystemStatusResponse"
        "400":
          description: Ошибка
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - system(public)
      parameters:
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
components:
  schemas:
    DeletePresetResponseErrorNotAllowedForDefault:
      type: object
      title: Недоступно для дефолтного пресета
    FaceRecognitionConfigurationType:
      type: string
      enum:
        - DEFAULT
      description: |-
        - CONFIGURATION_TYPE_UNKNOWN: Значение не указано
         - DEFAULT: По умолчанию
      title: Тип конфигурации
    PresetDtmf:
      type: object
      properties:
        code:
          type: string
          title: |-
            Код.
            # Диапазон: 1..1
        relayIndex:
          type: integer
          format: int32
          title: |-
            Индекс реле.
            # Диапазон: 0..64
      title: Параметр DTMF
      required:
        - code
    PresetFaceRecognition:
      type: object
      properties:
        host:
          type: string
          title: Адрес
        altHost:
          type: string
          title: Альтернативный адрес
        endpoint:
          type: string
          title: Путь запроса к серверу
        authToken:
          type: string
          title: Токен
        configurationType:
          title: Тип конфигурации
          allOf:
            - $ref: "#/components/schemas/FaceRecognitionConfigurationType"
        originId:
          type: string
          title: Идентификатор источника в identix
        groupIds:
          type: array
          items:
            type: integer
            format: int32
          title: Идентификаторы групп профилей в identix
      title: Распознование лиц
      required:
        - host
        - endpoint
        - authToken
        - configurationType
        - originId
    PresetNtp:
      type: object
      properties:
        host:
          type: string
          title: |-
            Хост.
            # Диапазон: 5..256
        port:
          type: integer
          format: int32
          title: |-
            Порт.
            # Диапазон: 1..65536
      title: Параметр NTP
      required:
        - host
        - port
    PresetPagingDirectionType:
      type: string
      enum:
        - DESC
        - ASC
      description: |-
        - DIRECTION_TYPE_UNKNOWN: Значение не указано
         - DESC: От большего к меньшему
         - ASC: От меньшего к большему
      title: |-
        Справочник типов направлений сортировки.
        # Тип: byte
    PresetPagingOrderByType:
      type: string
      enum:
        - ID
        - CREATED_AT
        - CHANGED_AT
        - RANK
      description: >-
        - ORDER_BY_TYPE_UNKNOWN: Значение не указано
         - ID: По идентификатору
         - CREATED_AT: По времени создания
         - CHANGED_AT: По времени изменения
         - RANK: По рангу для поиска по тексту.
        Применяется когда передано поле для поиска по тексту.

        В случае если текстовое поле не передано, применяется значение по умолчанию
      title: |-
        Справочник типов значений сортировки.
        # Тип: byte
    PresetRoom:
      type: object
      properties:
        phone:
          type: string
          title: |-
            Номер телефона.
            # Диапазон: 5..14
        num:
          type: integer
          format: int32
          title: |-
            Номер помещения.
            # Диапазон: 1..10000
      title: Помещение
      required:
        - phone
        - num
    PresetSavingError:
      type: object
      properties:
        conflict:
          title: Конфликт версий
          allOf:
            - $ref: "#/components/schemas/SavingErrorConflict"
        notAllowedForDefault:
          title: Запрещено для дефолтного пресета
          allOf:
            - $ref: "#/components/schemas/PresetSavingErrorNotAllowedForDefault"
      title: >-
        Ошибка сохранения.

        Эти проверки выполняются при работе с базой данных и сторонними сервисами
    PresetSavingErrorNotAllowedForDefault:
      type: object
      title: |-
        Недоступно для дефолтного пресета.
        Причины:
        - Смена статуса на Архивный
    PresetSip:
      type: object
      properties:
        host:
          type: string
          title: |-
            Хост.
            # Диапазон: 5..256
        port:
          type: integer
          format: int32
          title: |-
            Порт.
            # Диапазон: 1..65536
        regHost:
          type: string
          title: |-
            Хост reg.
            # Диапазон: 5..256
        regPort:
          type: integer
          format: int32
          title: |-
            Порт reg.
            # Диапазон: 1..65536
        proxyHost:
          type: string
          title: |-
            Хост proxy.
            # Диапазон: 5..256
        proxyPort:
          type: integer
          format: int32
          title: |-
            Порт proxy.
            # Диапазон: 1..65536
      title: Параметр SIP
      required:
        - host
        - port
        - regHost
        - regPort
        - proxyHost
        - proxyPort
    PresetStatusType:
      type: string
      enum:
        - ACTIVE
        - ARCHIVE
      description: |-
        - STATUS_TYPE_UNKNOWN: Значение не указано
         - ACTIVE: Активный
         - ARCHIVE: Архивный
      title: |-
        Справочник статусов.
        # Тип: byte
    PresetSyslog:
      type: object
      properties:
        host:
          type: string
          title: |-
            Хост.
            # Диапазон: 5..256
        port:
          type: integer
          format: int32
          title: |-
            Порт.
            # Диапазон: 1..65536
        protocolType:
          title: Протокол
          allOf:
            - $ref: "#/components/schemas/SyslogProtocolType"
      title: Параметр Syslog
      required:
        - host
        - port
        - protocolType
    PresetVideoConfig:
      type: object
      properties:
        qualityType:
          title: Тип пресета
          allOf:
            - $ref: "#/components/schemas/VideoConfigQualityType"
        rtspUser:
          title: Пользователь
          allOf:
            - $ref: "#/components/schemas/VideoConfigRtspUser"
      title: Параметры конфигурации видео
      required:
        - qualityType
        - rtspUser
    SavingErrorConflict:
      type: object
      title: |-
        Конфликт версий.
        Причины:
        - В базе хранится другая версия строки, значения changed_at отличаются
    SyslogProtocolType:
      type: string
      enum:
        - UDP
        - TCP
      description: |-
        - PROTOCOL_TYPE_UNKNOWN: Значение не указано
         - UDP: Протокол UDP
         - TCP: Протокол TCP
      title: |-
        Тип протокола.
        # Тип: byte
    VideoConfigQualityType:
      type: string
      enum:
        - HIGH
        - MEDIUM
      description: |-
        - QUALITY_TYPE_UNKNOWN: Значение не указано
         - HIGH: Высокое качество
         - MEDIUM: Среднее качество
      title: |-
        Справочник качеств.
        # Тип: byte
    VideoConfigRtspUser:
      type: object
      properties:
        username:
          type: string
          title: |-
            Имя пользователя.
            # Диапазон: 3..256
        password:
          type: string
          title: |-
            Пароль.
            # Диапазон: 3..256
      title: Пользователь
      required:
        - username
        - password
    protobufAny:
      type: object
      properties:
        "@type":
          type: string
      additionalProperties: {}
      title: Произвольный JSON
    rpcStatus:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        details:
          type: array
          items:
            $ref: "#/components/schemas/protobufAny"
      title: Ошибка транспортного слоя
    v1DeletePresetResponse:
      type: object
      properties:
        error:
          title: Ошибка при удалении
          allOf:
            - $ref: "#/components/schemas/v1DeletePresetResponseError"
      title: Ответ на запрос удаления пресета
    v1DeletePresetResponseError:
      type: object
      properties:
        notAllowedForDefault:
          title: Запрещено для дефолтного пресета
          allOf:
            - $ref: "#/components/schemas/DeletePresetResponseErrorNotAllowedForDefault"
      title: Ошибка при удалении
    v1GetPresetCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего пресетов
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetPresetCountResponseError"
      title: Ответ на запрос получения количества пресетов
    v1GetPresetCountResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения количества пресетов
    v1GetPresetDefaultResponse:
      type: object
      properties:
        data:
          title: Пресет
          allOf:
            - $ref: "#/components/schemas/v1Preset"
      title: Ответ на запрос получения дефолтного пресета
    v1GetPresetListResponse:
      type: object
      properties:
        data:
          title: Пресет
          allOf:
            - $ref: "#/components/schemas/v1Preset"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetPresetListResponseError"
      title: Ответ на получение списка пресетов
    v1GetPresetListResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения списка пресетов
    v1GetPresetResponse:
      type: object
      properties:
        data:
          title: Пресет
          allOf:
            - $ref: "#/components/schemas/v1Preset"
      title: Ответ на запрос получения пресета
    v1GetSystemStatusResponse:
      type: object
      title: Ответ на запрос проверки доступности сервиса
    v1PostEventPresetInstallResponse:
      type: object
      title: Ответ на запрос на установку пресета
    v1PostPresetRequest:
      type: object
      properties:
        data:
          title: Пресет
          allOf:
            - $ref: "#/components/schemas/v1Preset"
      title: Запрос на создание/изменение пресета
      required:
        - data
    v1PostPresetResponse:
      type: object
      properties:
        data:
          title: Пресет
          allOf:
            - $ref: "#/components/schemas/v1Preset"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostPresetResponseError"
      title: Ответ на запрос на создание/изменение пресета
    v1PostPresetResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/PresetSavingError"
      title: Ошибка запроса сохранения пресета
    v1Preset:
      type: object
      properties:
        id:
          type: integer
          format: int32
          title: |-
            Идентификатор.
            # Диапазон: 0..2147483647
        title:
          type: string
          title: |-
            Наименование.
            # Диапазон: 3..256
        mrfIds:
          type: array
          items:
            type: integer
            format: int32
          title: |-
            Идентификатор МРФ.
            # Диапазон: 0..10
        rfIds:
          type: array
          items:
            type: integer
            format: int32
          title: |-
            Идентификатор РФ.
            # Диапазон: 0..100
        description:
          type: string
          title: |-
            Описание.
            # Диапазон: 3..1024
        createdAt:
          type: string
          format: date-time
          title: |-
            Дата и время создания.
            # Тип: DateTime
          readOnly: true
        changedAt:
          type: string
          format: date-time
          title: |-
            Дата последнего изменения.
            Заполняется и обновляется сервером.
            Заполняется при создании и изменении.
            Является версией объекта.
            # Тип: DateTime
          readOnly: true
        statusType:
          title: Статус
          allOf:
            - $ref: "#/components/schemas/PresetStatusType"
        sip:
          title: Параметр SIP
          allOf:
            - $ref: "#/components/schemas/PresetSip"
        ntp:
          title: Параметр NTP
          allOf:
            - $ref: "#/components/schemas/PresetNtp"
        syslog:
          title: Параметр Syslog
          allOf:
            - $ref: "#/components/schemas/PresetSyslog"
        rooms:
          type: array
          items:
            $ref: "#/components/schemas/PresetRoom"
          title: |-
            Помещения.
            # Диапазон: 0..10000
        videoConfig:
          title: Параметры конфигурации видео
          allOf:
            - $ref: "#/components/schemas/PresetVideoConfig"
        dtmf:
          type: array
          items:
            $ref: "#/components/schemas/PresetDtmf"
          title: |-
            Параметр DTMF.
            # Диапазон: 0..64
        faceRecognition:
          title: Распознование лиц
          allOf:
            - $ref: "#/components/schemas/PresetFaceRecognition"
      title: |-
        Пресет.
        Пресет с id=1 является дефолтным пресетом.
        # Описание модели
      required:
        - title
        - mrfIds
        - rfIds
        - statusType
        - sip
        - ntp
        - syslog
        - rooms
        - videoConfig
        - dtmf
    v1PresetFilter:
      type: object
      properties:
        mrfIds:
          type: array
          items:
            type: integer
            format: int32
          title: По идентификаторам МРФ
        rfIds:
          type: array
          items:
            type: integer
            format: int32
          title: По идентификаторам РФ
        text:
          type: string
          title: |-
            Поиск по тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Наименование;
            # - Описание
        title:
          type: string
          title: |-
            Поиск по наименованию.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Наименование
        statusTypes:
          type: array
          items:
            $ref: "#/components/schemas/PresetStatusType"
          title: По статусам
      title: Фильтр по пресетам
    v1PresetPaging:
      type: object
      properties:
        orderByType:
          title: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: CHANGED_AT
          allOf:
            - $ref: "#/components/schemas/PresetPagingOrderByType"
        directionType:
          title: |-
            Тип направления сортировки.
            # По умолчанию: DESC
          allOf:
            - $ref: "#/components/schemas/PresetPagingDirectionType"
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            # Диапазон: 0..2147483647
      title: Постраничный вывод
    v1ValidationError:
      type: object
      properties:
        path:
          type: string
          title: Путь к полю в формате наименования прото
        message:
          type: string
          title: Валидационное сообщение
      title: |-
        Ошибки валидации.
        Эти проверки выполняются до обращения в базу данных
      required:
        - path
        - message
  securitySchemes:
    bearerHttp:
      type: http
      scheme: bearer
      bearerFormat: JWT
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://oauth2-staging.k8s.key.rt.ru/oauth2/token
          scopes:
            preset:edit: Предоставляет полный доступ в сервис preset
            preset:read: Предоставляет доступ на чтение данных из сервиса preset
servers:
  - url: https://keyapis-staging.k8s.key.rt.ru
    description: staging
  - url: https://{feature}.k8s.key.rt.ru/
    description: https feature
    variables:
      feature:
        default: ""
        description: Feature name
  - url: http://{feature}.k8s.key.rt.ru/
    description: http feature
    variables:
      feature:
        default: ""
        description: Feature name
  - url: https://localhost:3001
    description: localhost
  - url: http://localhost:3001
    description: localhost
  - url: https://keyapis.key.rt.ru
    description: production
