Темный режим

API AI Get Workflow

1. Обзор workflow

API для получения данных искусственного интеллекта с фильтрацией по различным параметрам.

Названиеapi-ai-get
База данныхPostgreSQL (raw_ai_data, companies, departments, translations)
Методы2 webhook-узла для разных операций

2. GET /ai/get

Получение данных AI с фильтрацией по departmentId, type и paramNameMetric.

Цепочка выполнения:

  1. Webhook (ai/get)

    Принимает GET-запрос с параметрами:

    • headers.authorization - токен компании
    • query.departmentId - ID отдела (опционально)
    • query.type - тип данных (обязательно)
    • query.paramNameMetric - название метрики (опционально)
  2. Edit Fields1

    Извлекает параметры из запроса:

    query.token = $json.headers.authorization
    query.departmentId = $json.query.departmentId
    query.type = $json.query.type
    query.paramNameMetric = $json.query.paramNameMetric
  3. Postgres4

    Проверяет валидность токена и получает companyId:

    SELECT "companyId" FROM companies WHERE "token" = $1;
  4. Merge1

    Объединяет данные из Edit Fields1 и Postgres4.

  5. Code

    Определяет тип запроса на основе входных параметров:

    Логика работы:

    1. Проверяет departmentId и paramNameMetric на значения 'null', 'all' или пустую строку
    2. Преобразует departmentId в число (если возможно)
    3. Устанавливает switch-значение:
      • 1 - оба параметра заданы
      • 2 - только departmentId
      • 3 - только paramNameMetric
      • 4 - ни один параметр не задан
  6. Switch

    Направляет выполнение в одну из 4 веток в зависимости от switch-значения.

  7. Ветка 1 (оба параметра заданы):

    1. Postgres

      Выполняет запрос с фильтрацией по всем параметрам:

      SELECT * 
      FROM raw_ai_data 
      WHERE "companyId" = $1 
        AND "departmentId" = $2
        AND "type" = $3
        AND "paramNameMetric" = $4;
  8. Ветка 2 (только departmentId):

    1. Postgres1

      Выполняет запрос без фильтра по paramNameMetric:

      SELECT * 
      FROM raw_ai_data 
      WHERE "companyId" = $1 
        AND "departmentId" = $2
        AND "type" = $3;
  9. Ветка 3 (только paramNameMetric):

    1. Postgres2

      Выполняет запрос без фильтра по departmentId:

      SELECT * 
      FROM raw_ai_data 
      WHERE "companyId" = $1 
        AND "type" = $2
        AND "paramNameMetric" = $3;
  10. Ветка 4 (ни один параметр):

    1. Postgres3

      Выполняет запрос только по companyId и type:

      SELECT * 
      FROM raw_ai_data 
      WHERE "companyId" = $1 
        AND "type" = $2;
  11. find department name

    Получает названия отделов для обогащения данных:

    SELECT "departmentId", "name"
    FROM departments
    WHERE "companyId" = $1
       OR "departmentId" = 1;
  12. Merge

    Объединяет данные AI с названиями отделов.

  13. find metrics names

    Получает русские названия метрик:

    SELECT 
        t."ru" AS "paramNameMetricRu", 
        t."key" AS "paramNameMetric"
    FROM translations t
    WHERE t."type" = 'metric';
  14. Merge3

    Объединяет данные с русскими названиями метрик.

  15. Respond to ai/get

    Возвращает первые 30 записей:

    =$input.all().slice(0, 30)

Особенности:

  • Динамическое построение SQL-запроса в зависимости от входных параметров
  • Обогащение данных названиями отделов и метрик
  • Ограничение вывода 30 записями

3. GET /ai/get/long

Получение полных данных AI по конкретному ID с дополнительной информацией.

Цепочка выполнения:

  1. Webhook (ai/get/long)

    Принимает GET-запрос с параметрами:

    • headers.authorization - токен компании
    • query.id - ID записи AI
  2. Edit Fields

    Извлекает параметры из запроса:

    query.token = $json.headers.authorization
    ai_data_id = $json.query.id
  3. Postgres5

    Проверяет валидность токена и получает companyId:

    SELECT "companyId" FROM companies WHERE "token" = $1;
  4. Merge2

    Объединяет данные из Edit Fields и Postgres5.

  5. Postgres6

    Получает полные данные AI с дополнительной информацией:

    SELECT 
        raw_ai_data.*,
        (SELECT "name" 
         FROM departments 
         WHERE "departmentId" = raw_ai_data."departmentId") AS "departmentName",
        (SELECT "ru" 
         FROM translations 
         WHERE "key" = raw_ai_data."paramNameMetric") AS "paramNameMetricRu"
    FROM raw_ai_data
    WHERE "id" = $1;
  6. If

    Проверяет наличие longValue:

    Условие: $json.longValue не пустое
  7. Ветка 1 (longValue присутствует):

    1. If1

      Проверяет флаг read:

      Условие: $json.read == true
    2. Подветка 1.1 (read == false):
      1. Postgres save raw_ai_data

        Обновляет флаг read:

        UPDATE raw_ai_data
        SET "read" = true
        WHERE "id" = $1;
    3. Respond to ai/get/long

      Возвращает данные.

  8. Ветка 2 (longValue отсутствует):

    1. Merge4

      Объединяет данные для синхронизации.

    2. ai/syncdata/long

      Отправляет запрос на синхронизацию:

      POST https://api.hroom.ai/webhook/ai/syncdata/long
      Headers:
        Authorization: ={{ $json.query.token }}
      Body:
        ai_data_id: ={{ $json.ai_data_id }}
    3. Postgres7

      Повторно запрашивает данные после синхронизации:

      SELECT 
          raw_ai_data.*,
          (SELECT "name" 
           FROM departments 
           WHERE "departmentId" = raw_ai_data."departmentId") AS "departmentName",
          (SELECT "ru" 
           FROM translations 
           WHERE "key" = raw_ai_data."paramNameMetric") AS "paramNameMetricRu"
      FROM raw_ai_data
      WHERE "id" = $1;
    4. Respond to ai/get/long1

      Возвращает обновленные данные.

Особенности:

  • Механизм синхронизации при отсутствии longValue
  • Обновление флага read при первом доступе
  • Обогащение данных названиями отделов и метрик