Метод GET /api/v1/get_tasks

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

Возвращает список задач для указанного Коннектора с поддержкой фильтрации, пагинации и фильтра по статусу. Требуется аутентификация (Depends(check_login_pass)).

Отобрать команды, еще не обработанные Коннектором, можно с использованием параметра include_empty_status (true/false).

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

Параметры запроса (query):

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

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

    • Все возвращаемые задачи будут принадлежать этому коннектору

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

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

    • Фильтр по идентификатору проекта

    • Если указано — вернёт только задачи для этого проекта в рамках коннектора

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

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

  3. include_empty_status (boolean, опционально, default=True)

    • Если True — включить задачи со статусом NULL (ещё не обработанные)

    • Если False — исключить задачи с пустым статусом (вернёт только задачи со статусами)

    • Используется для получения либо необработанных, либо обработанных задач

    • Пример: True

  4. dt_from (datetime, опционально)

    • Вернуть только задачи с ecc_dt > dt_from

    • Формат: ISO 8601 (например "2025-01-01T00:00:00")

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

    • Пример: "2025-11-01T00:00:00"

  5. dt_to (datetime, опционально)

    • Вернуть только задачи с ecc_dt < dt_to

    • Формат: ISO 8601

    • Пример: "2025-11-30T23:59:59"

  6. page_size (int, опционально, default=100)

    • Размер страницы (LIMIT)

    • Максимальное количество задач в одном ответе

    • Пример: 50

  7. offset (int, опционально, default=0)

    • Смещение для пагинации (OFFSET)

    • Пример: 100 (пропустить первые 100 задач)

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

    • Токен аутентификации (при наличии зависимости check_login_pass)

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

ЭТАП 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: Формирование базовых SQL запросов

  • Создаются два statement-а:

    • count_statement: SELECT COUNT(*) для получения общего количества задач

    • statement: SELECT Task для выборки самих задач

  • Базовое WHERE условие: Task.id_connector == id_connector

ЭТАП 4: Применение фильтра по статусу

  • Если include_empty_status == True (по умолчанию):

    • Добавляется WHERE Task.status == NULL

    • Возвращаются только необработанные задачи (со статусом NULL)

  • Если include_empty_status == False:

    • Условие НЕ добавляется

    • Возвращаются все задачи, включая обработанные (с не-NULL статусами)

ЭТАП 5: Применение фильтра по проекту

  • Если id_project указан:

    • Добавляется WHERE Task.id_project == id_project

    • К обоим statement-ам (count и select)

ЭТАП 6: Применение фильтров по датам

  • Если dt_from указана:

    • Добавляется WHERE Task.ecc_dt > dt_from

    • К обоим statement-ам

  • Если dt_to указана:

    • Добавляется WHERE Task.ecc_dt < dt_to

    • К обоим statement-ам

ЭТАП 7: Получение общего количества

  • Выполняется count_statement

  • Получается total_count — количество записей, удовлетворяющих фильтрам

ЭТАП 8: Применение пагинации

  • К statement добавляется:

    • ORDER BY Task.ecc_dt (сортировка по дате изменения)

    • LIMIT page_size

    • OFFSET offset

  • Выполняется запрос и получается список tasks

ЭТАП 9: Формирование и возврат ответа

  • Возвращается объект TasksPage с полями:

    • count: общее количество задач (без учёта paging)

    • limit: размер страницы

    • offset: смещение

    • data: список объектов Task

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

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

Пример ответа:

{ "count": 150, "limit": 100, "offset": 0, "data": [ { "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": { "action": "extract", "source": "1c" }, "timestamp": "2025-11-14T12:34:56+03:00", "created_by": "jdoe", "updated_by": null, "ecc_dt": "2025-11-14T12:34:56+03:00" }, { "id_task": "660e8400-e29b-41d4-a716-446655440001", "id_connector": "conn-prod-001", "id_project": "proj-123", "status": null, "status_info": null, "command_type": "exec", "data": { "action": "validate", "source": "1c" }, "timestamp": "2025-11-14T11:20:30+03:00", "created_by": "jane", "updated_by": null, "ecc_dt": "2025-11-14T11:20:30+03:00" } // ... ещё задачи до page_size ] }