openapi: 3.0.3
info:
  title: FLK
  description: Спецификация REST-интерфейса для управления форматно-логическим контролем
  version: "1.0"
paths:
  /v3/requests/{request_id}/reportFLK:
    get:
      summary: Return report FLK check
      description: Возвращает отчет о формато логическом контроле загружаемых данных
      operationId: get-v2-request-request_id-reportFLK
      tags:
        - report
      parameters:
        - $ref: '#/components/parameters/requestId'
      responses:
        '200':
          description: OK
          content:
            text/csv:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/flkReportCsv'
                  - $ref: '#/components/schemas/flkReportErrorCsv'
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/flkReportJson'
                  - $ref: '#/components/schemas/flkReportErrorJson'
        '401':
          $ref: '#/components/responses/unauthorized'
        '500':
          $ref: '#/components/responses/internalServerError'
      security:
        - bearerAuth: []
  /v3/conditions/{datamart_name}/{table_name}:
    parameters:
      - $ref: '#/components/parameters/datamartName'
      - $ref: '#/components/parameters/tableName'
    post:
      summary: Create verification conditions
      description: Формирование правил проверки для датамарта/таблицы
      operationId: post-v2-conditions
      tags:
        - conditions
      requestBody:
        content:
          application/x-yaml: {}
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/unauthorized'
        '500':
          $ref: '#/components/responses/internalServerError'
      security:
        - bearerAuth: []
    put:
      summary: Update verification conditions
      description: Обновление правил проверки для датамарта/таблицы
      operationId: put-v2-conditions
      tags:
        - conditions
      requestBody:
        content:
          application/x-yaml: {}
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/unauthorized'
        '500':
          $ref: '#/components/responses/internalServerError'
      security:
        - bearerAuth: []
    get:
      summary: Return verification conditions
      description: Возвращение правил проверки для датамарта/таблицы
      operationId: get-v2-conditions
      tags:
        - conditions
      responses:
        '200':
          description: OK
          content:
            text/yaml: {}
        '401':
          $ref: '#/components/responses/unauthorized'
        '500':
          $ref: '#/components/responses/internalServerError'
      security:
        - bearerAuth: []
    delete:
      summary: Delete verification conditions
      description: Удаление правил проверки для датамарта/таблицы
      operationId: delete-v2-conditions
      tags:
        - conditions
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/unauthorized'
        '500':
          $ref: '#/components/responses/internalServerError'
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

  schemas:
    requestIdString:
      type: string
      description: Идентификатор запроса
      example: 125

    flkReportJson:
      description: "Отчет ФЛК"
      type: object
      properties:
        headers:
          type: array
          items:
            type: string
          description: Массив заголовков столбцов
          example: [ "line", "field", "err_code", "value", "text" ]
        rows:
          type: array
          items:
            type: array
            items:
              type: string
            description: Массив строк с данными об ошибках
            example: [
              [ "25", "email", "nonMatchRegex", "pisem@net", "значение не соответствует регулярному выражению \"/^\\S+@\\S+\\.\\S+$/\"" ],
              [ "25", "id", "nonUniq", "132", "значение не отвечает требованиям уникальности" ]
            ]
      required:
        - headers
        - rows

    flkReportErrorJson:
      description: "Ошибка запроса отчета ФЛК"
      type: object
      properties:
        errorMessage:
          type: string
          example: "Report not found"

    flkReportCsv:
      description: "Отчет ФЛК"
      type: array
      items:
        type: array
        items:
          type: string
      example: |
        line;field;err_code;value;text
        25;email;nonMatchRegex;pisem@net;значение не соответствует регулярному выражению "/^\S+@\S+\.\S+$/"
        25;id;nonUniq;132;значение не отвечает требованиям уникальности

    flkReportErrorCsv:
      description: "Ошибка запроса отчета ФЛК"
      type: array
      items:
        type: array
        items:
          type: string
      example: |
        errorMessage
        Report not found

  parameters:
    datamartName:
      name: datamart_name
      in: path
      description: 'Мнемоника витрины данных'
      required: true
      schema:
        type: string
    tableName:
      name: table_name
      in: path
      description: 'Наименование таблицы'
      required: true
      schema:
        type: string
    requestId:
      name: request_id
      in: path
      description: Идентификатор запроса
      required: true
      schema:
        $ref: '#/components/schemas/requestIdString'

  responses:
    internalServerError:
      description: Internal server error
      content:
        text/plain:
          schema:
            type: string
            description: Сообщение об ошибке
            example: Internal server error

    unauthorized:
      description: Unauthorized
      content:
        text/plain:
          schema:
            type: string
            description: Сообщение об ошибке
            example: Unauthorized

security:
  - bearerAuth: []
tags:
  - name: conditions
    description: Управление правилами проверок для таблицы
  - name: report
    description: Получение отчетов
