Метод POST /api/v1/create_task

Краткое описание

Создаёт новую задачу (task) или обновляет существующую задачу в рамках указанного Коннектора и опционально проекта. Требуется аутентификация (Depends(check_login_pass)).

Порядок присваивания idTask:

  • Если exec_id отсутствует, то его необходимо присвоить на стороне DCC;

  • Если exec_id передан в данных, то установить/обновить существующую запись задачи в DCC.

Входные параметры

Заголовки (обязательные):

  1. Authorization (обязательный)

    • Токен аутентификации для идентификации пользователя

    • Передаётся через dependency check_login_pass

Тело запроса (JSON) — схема: Task

Основные поля модели Task:

  1. id_connector (string, обязательный)

    • Уникальный идентификатор коннектора

    • Коннектор должен существовать в системе

    • Пример: "conn-prod-001"

  2. id_project (string, опционально)

    • Уникальный идентификатор проекта в рамках коннектора

    • Если указано — проект должен существовать

    • Если не указано — задача создаётся на уровне коннектора

    • Пример: "proj-123"

  3. id_task (string, опционально)

    • Уникальный идентификатор задачи

    • Если указано и задача с таким id существует:

      • Выполняется обновление существующей задачи

      • Если не указано — генерируется новый UUID

      • Пример: task-abc123 или оставить пустым для auto-generation

  4. status (string, опционально)

    • Статус задачи

    • Возможные значения: null (по умолчанию), received, started, error, success, waiting

    • Обычно устанавливается через эндпоинт /update_task_status

    • Пример: null

  5. status_info (string, опционально)

    • Дополнительная информация о статусе задачи

    • Может содержать описание ошибки, детали процесса и т.д.

    • Пример: Processing started at 12:34:56

  6. command_type (string, опционально)

    • Тип команды для задачи

    • Возможные значения: exec, другие типы (определяются логикой приложения)

    • Влияет на обновление статуса коннектора и проекта

    • Примеры (примеры описаны в актуальном для выполнения порядке):

      • Функция load_template (загрузка шаблона проекта):

        Структура задачи параметров:

        Примечание:

        В source могут быть указаны ссылки на проект и подключение, в target — ссылки на локальные объекты, если их надо обновить. Также можно изменить имена для подключения и проекта через target.db_connection_name и target.project_name.

        { "target": { "id_project": "00000000-0000-0000-0000-000000000000", "id_db_connection": "00000000-0000-0000-0000-000000000000", "db_connection_name": "Наименование подключения", "project_name": "Наименование проекта" }, "source": { "db_connection": { "id_connector": "00000000-0000-0000-0000-000000000000", "id_db_connection": "00000000-0000-0000-0000-000000000000" }, "project": { "id_connector": "00000000-0000-0000-0000-000000000000", "id_project": "00000000-0000-0000-0000-000000000000" } } }

        Примеры использования:

        • Загрузка шаблона проекта без указания подключения

          { "id_connector": "6810e05f-f0ad-4c0a-b0c2-433f61f12bc0", //id базы 1С в DCC куда загружаем "command_type": "load_template", "data": { "target": { // "id_project": "", // если указать id проекта, то будет загружен в него. Если не указывать, то создастся новый // "id_db_connection": "8cf037c9-6266-11f0-a263-a7e09b56690b", //Если указать id подключения, то будет загружен в него. // //Если не указывать, то создастся новый // "db_connection_name": "Наименование подключения новое", "project_name": "Наименование копии проекта в базе" }, "source": { // "db_connection": { // "id_connector": "00000000-0000-0000-0000-000000000000", //id базы 1С в DCC источник // "id_db_connection": "00000000-0000-0000-0000-000000000000" //id подключения источника // }, "project": { "id_connector": "dfff5668-85ac-42f7-b02a-e75462675522", //id базы 1С в DCC источник "id_project": "f7dfb958-a907-11f0-a26b-9d9b823029e2" //id проекта источника } } } }
        • Загрузка шаблона проекта с указанием подключения в уже существующий проект базы-приемника

          { "id_connector": "6810e05f-f0ad-4c0a-b0c2-433f61f12bc0", //id базы-приемника "command_type": "load_template", "data": { "target": { "id_project": "f94eeff8-f222-11f0-a463-edb39089b8dd", // если указать id существующего проекта в базе-приемнике, то шаблон будет загружен в него. "id_db_connection": "8cf037c9-6266-11f0-a263-a7e09b56690b", //проект будет создан с этим подключением базы приемника (без каких-либо изменений в нем) "project_name": "Новое наименование проекта после загрузки в него шаблона проекта из другой базы" }, "source": { "project": { "id_connector": "dfff5668-85ac-42f7-b02a-e75462675522", //id базы-источника "id_project": "f7dfb958-a907-11f0-a26b-9d9b823029e2" //id проекта в базе-источнике, шаблон которого загружаем в существующий проект базы-примника } } } }
        • Загрузка шаблона подключения из базы-источника в базу-приемник (создание нового подключения)

          { "id_connector": "6810e05f-f0ad-4c0a-b0c2-433f61f12bc0", //id базы-приемника "command_type": "load_template", "data": { "target": { "db_connection_name": "Наименование подключения нового, импортированного из другой базы" }, "source": { "db_connection": { "id_connector": "dfff5668-85ac-42f7-b02a-e75462675522", //id базы-источника "id_db_connection": "6c5b0b03-a905-11f0-a26b-9d9b823029e2" //id подключения в базе-источнике, шаблон которого загружаем в новое подключение базы-примника } } } }
        • Импорт шаблона подключения в существующее подключение базы-приемника

          { "id_connector": "6810e05f-f0ad-4c0a-b0c2-433f61f12bc0", //id базы-приемника "command_type": "load_template", "data": { "target": { "db_connection_name": "Новое наименование для подключения", "id_db_connection": "4f81796b-e2aa-11f0-a463-edb39089b8dd" //подключение базы-приемника, которое будет заменено шаблоном подключения из базы-источника }, "source": { "db_connection": { "id_connector": "dfff5668-85ac-42f7-b02a-e75462675522", //id базы-источника "id_db_connection": "6c5b0b03-a905-11f0-a26b-9d9b823029e2" //id подключения в базе-источнике, шаблон которого загружаем в существующее подключение базы-приемника } } } }
        • Загрузка шаблонов подключения и проекта одновременно (создание нового подключения и проекта в базе приемнике)

          { "id_connector": "6810e05f-f0ad-4c0a-b0c2-433f61f12bc0", //id базы-приемника "command_type": "load_template", "data": { "target": { "db_connection_name": "Новое подключение из другой базы", "project_name": "Новй проект из другой базы" }, "source": { "db_connection": { "id_connector": "dfff5668-85ac-42f7-b02a-e75462675522", //id базы-источника "id_db_connection": "6c5b0b03-a905-11f0-a26b-9d9b823029e2" //id подключения источника }, "project": { "id_connector": "dfff5668-85ac-42f7-b02a-e75462675522", //id базы-источника "id_project": "f7dfb958-a907-11f0-a26b-9d9b823029e2" //id проекта источника } } } }
      • Функция initial_project (выполнение команды «Сформировать очередь» для данного проекта)

        Пример использования:

        { "id_connector": "3e08303c-be02-41ab-a215-d941047728dc", "id_project": "5330cc9f-8d80-11f0-a267-e1abc21de4b8", "command_type": "initial_project", "timestamp": "2026-01-12T18:00:29.965Z" }
      • Функция exec (выполнение проекта):

        Пример использования:

        { "id_connector": "3e08303c-be02-41ab-a215-d941047728dc", "id_project": "5330cc9f-8d80-11f0-a267-e1abc21de4b8", "command_type": "exec", "timestamp": "2026-01-12T18:00:29.965Z" }
      • Функция add_queue (можно использовать, если необходимо вручную добавить параметр в очередь, после чего следует выполнить команду exec).

        Структура задачи параметров:

        {       "id_project": "00000000-0000-0000-0000-000000000000",       "id_line": 0,       "delete_mode": "always|successful|never",       "comment": "комментарий",       "timestamp": 0,       "operation": "insert|update|delete",       "user": "пользователь",       "params": {          "param": "value",          "param_type": {             "type": "тип",             "value": "строка"          },          "param_array": [             "param": "value",             "param_type": {                "type": "тип",                "value": "строка"             }          ]       },       "params_ext": {          см. data.params       },       "params_ini": {          см. data.params       },       "params_string": "Представление параметров"    }

        Пример использования:

        {     "id_connector": "994784f5-ae71-4d7e-b634-a20ed639e604",     "id_project": "23c9fb0a-920d-11f0-bf85-74563c043d10",     "command_type": "add_queue",     "data": {         "id_project": "23c9fb0a-920d-11f0-bf85-74563c043d10",         "id_line": 1,         "params": {             "Период": {                 "type": "Date",                 "value": "2017-01-17T00:00:00"             }         },         "delete_mode": "never",         "comment": "Попытка 2",         "timestamp": 1762520751317,         "user": "Администратор (ФедоровБМ)",         "operation": "update",         "params_string": "20170117"     } }
  7. data (object, опционально)

    • Содержимое задачи (JSON объект с произвольной структурой).

      • В частности, можно передать номер строки, выполняемого проекта: {«id_line» : 1}

    • Может содержать параметры для выполнения задачи

    • Пример: { "config": "...", "params": {...} }

  8. Другие поля Task (согласно модели)

    • timestamp (datetime, опционально) — время создания задачи

    • created_by (string, auto) — логин пользователя, создавшего задачу (устанавливается автоматически)

    • updated_by (string, опционально) — логин пользователя, обновившего задачу

    • ecc_dt (datetime, auto) — дата/время последнего изменения (устанавливается автоматически)

Алгоритм работы метода

ЭТАП 1: Валидация Коннектора

  • Проверяется существование коннектора с id_connector

  • Если коннектор не найден — возвращается HTTP 404 с описанием

  • Функция: connector_exists(id_connector, db_session)

ЭТАП 2: Валидация проекта (опционально)

  • Если в задаче указан id_project:

    • Проверяется существование проекта (id_connector + id_project)

    • Если проект не найден — возвращается HTTP 404

    • Функция: project_exists(id_connector, id_project, db_session)

  • Если id_project не указан — эта проверка пропускается

ЭТАП 3: Проверка существования задачи (обновление или создание)

  • Если в теле запроса указан id_task:

    • Выполняется SELECT для поиска существующей задачи: WHERE Task.id_task == id_task AND Task.id_connector == id_connector

    • Если задача найдена — вызывается update_exists_model(task, db_task) для обновления существующих полей новыми значениями

    • Если задача не найдена — используется переданный id_task для новой задачи

  • Если id_task не указан:

    • Генерируется новый UUID: id_task = str(uuid.uuid4())

ЭТАП 4: Установка служебных полей

  • ecc_dt = datetime.now(tz=get_localzone())

    • Текущее время с локальной временной зоной

    • Используется для отслеживания времени последнего изменения

  • created_by = user.login

    • Логин аутентифицированного пользователя

    • Извлекается из dependency check_login_pass

ЭТАП 5: Сохранение в базу данных

  • db_session.add(task) — добавляет задачу в сессию

  • db_session.commit() — фиксирует изменения в БД

  • db_session.refresh(task) — перезагружает объект из БД (получает сгенерированные значения)

ЭТАП 6: Возврат результата

  • Возвращается объект Task с полностью заполненными полями

  • Включая сгенерированные id_task, ecc_dt, created_by

Успешный ответ (200 OK)

Формат: JSON, схема Task

Пример ответа при создании:

{ "id_task": "550e8400-e29b-41d4-a716-446655440000", "id_connector": "conn-prod-001", "id_project": "proj-123", "status": null, "status_info": null, "command_type": "exec", "data": { "config": "...", "params": {...} }, "timestamp": "2025-11-14T12:34:56+03:00", "created_by": "jdoe", "updated_by": null, "ecc_dt": "2025-11-14T12:34:56+03:00" }