Skip to main content

Регулярное обновление данных в проекте

Пользовательские сценарии

Стартовое состояние – пользователь находится в диспетчере данных, создан скрипт загрузки

Действие: Пользователь нажимает на кнопку "Обновление данных"

Результат: Открывается окно для создания или изменения задания на обновление данных с 5 возможными графиками: ежечасно, ежедневно, еженедельно, ежемесячно, CRON.

 

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

Результат:

  • Изменяются поля ввода данных согласно выбранному графику: можно ввести час для ежечасного, день для ежедневного и т.д. Всегда есть ещё одно поле ввода для времени. По сути, каждый график представляет собой вариант CRON-задания, у которого вручную задаётся только часть параметров
  • Загружается иконка для выбора времени (только один раз)

 

Действие: Пользователь вводит данные для графика обновления

Результат:

  • Изменения фиксируются в интерфейсе
  • Изменения сбрасываются при выборе другого графика
  • До подтверждения загрузки никаких взаимодействий с бэкендом не происходит

 

Действие: Пользователь нажимает на кнопку "Создать/Изменить"

Результат: Формируется задание на автообновление данных согласно выбранному графику и установленным пользователем параметрам

 

Техническое описание

График обновления данных проекта устанавливается пользователем при нажатии на соответствующую кнопку на странице скрипта загрузки и подтверждении графика

image.png


При подтверждении (кнопка "создать" или "изменить", если задание уже существует), на Nest.js сервис отправляется POST запрос, содержащий информацию по графику обновления данных и флаг (поле isActive), контролирующий активно ли обновление или нет.

Идентификатор задачи на обновление равен идентификатору проекта и добавляется как параметр в запросе

https://fastbord-back-dev4.fb-dev.winsolutions.ru/api/v1/cronjob/{cronId}, где cronId – идентификатор задачи (соответствует id проекта)

Тело запроса:

image.png

{
    "isActive": false,
    "cron": {
        "type": "hour",
        "minutes": 0,
        "hours": 0
    }
}

Ответ:

image.png

{
    "kind": "cronjobItemWithId",
    "cronjobItemWithId": {
        "name": "111222113",
        "cron": {
            "type": "hour",
            "hours": 0,
            "minutes": 0
        },
        "isActive": false,
        "type": "project_import",
        "message": "Error",
        "duration": "00:00:09",
        "startedTask": "2025-06-04T14:07:34.048Z",
        "finishedTask": "2025-06-04T14:07:43.510Z",
        "status": "aborted",
        "nextStartAt": "2025-06-19T09:00:00.000Z",
        "id": "b3d298c1-a58c-44e6-8a1a-1dad28ca0820"
    }
}

Если по каким-либо причина проекта не существует, будет возвращена ошибка 604 (проект не найден)

Последовательность выполнения запроса
  • инициация POST запроса от пользователя, с указанием периода обновления
  • регистрация (прием) запроса в контроллере Nest.js (проверка лицензии, роли). Если роль не админ, разработчик или нет лицензии пользователю возвращается ошибка
  • проверка существования проекта по id из запроса. Если проекта нет, возвращается ошибка
  • отправка внутреннего запроса (в пределах сервера) от микросервиса обрабатывающего пользовательские запросы микросервису планировки задач (cron), через брокер (rabbitMQ). микросервис принимающий запросы клиентов à  брокер (rabbitMq) à микросервис планировки задач
  • в микросервисе планировки (cron) создается задача и её метаданные сохраняются в базу данных postgress.

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

Обновление проекта – это функция cron, которая с помощью брокера отправляет в микросервис, отвечающий за скрипт загрузки, команду запускающую соответствующий проекту скрипт