Метод GET /api/v1/get_projects
Краткое описание
Метод позволяет:
получить список проектов по указанному Коннектору с поддержкой фильтрации, пагинации и опциональным включением данных проекта (data);
получить шаблоны проектов (внутренний xml-формат «Экстрактора 1С»);
получить метаданные проектов (json);
Обязательный параметр:
?idConnector={idConnector};
Требуется аутентификация (Depends(check_login_pass)).
Входные параметры
Параметры запроса (query):
id_connector (string, обязательный)
Уникальный идентификатор коннектора
Проект должен принадлежать этому коннектору
Пример: "conn-prod-001"
id_project (string, опционально)
Фильтр по идентификатору проекта (точное совпадение)
Если указано — вернёт только проект с этим id
Пример: "proj-123"
include_data (boolean, опционально, default=False)
Если True — включить в ответ поле data (содержимое проекта)
Если False — поле data будет null
Используйте False для быстрого получения списка без нагрузки на БД
include_template (boolean, опционально, default=False)
Если True — включить в ответ поле template (шаблон проекта)
Если False — поле template будет null
Используйте в зависимости от необходимости
dt_from (datetime, опционально)
Вернуть только проекты с ecc_dt > dt_from
Формат: ISO 8601 (например "2025-01-01T00:00:00")
Пример: "2025-01-01T00:00:00"
dt_to (datetime, опционально)
Вернуть только проекты с ecc_dt < dt_to
Формат: ISO 8601
Пример: "2025-12-31T23:59:59"
project_name (string, опционально)
Фильтр по имени проекта (точное совпадение)
Пример: "My Project"
parent_id_project (string, опционально)
Фильтр по идентификатору родительского проекта
Специальное значение "null" (строковый литерал) вернёт проекты без родителя (NULL в БД)
Пример: "null" или "parent-proj-001"
page_size (int, опционально, default=100)
Размер страницы (LIMIT)
Максимальное количество проектов в ответе
Пример: 50
offset (int, опционально, default=0)
Смещение для пагинации (OFFSET)
Пример: 100 (пропустить первые 100 проектов)
Authorization (обязательный)
Токен аутентификации
Требуется при наличии зависимости check_login_pass
Алгоритм работы метода
ЭТАП 1: Валидация Коннектора
Проверяется существование коннектора с id_connector
Если коннектор не найден — возвращается HTTP 404
ЭТАП 2: Формирование базового SQL запроса
Создаются два statement-а:
count_statement: SELECT COUNT(*) для получения общего количества проектов
statement: SELECT Project для выборки проектов
Базовый WHERE условие: Project.id_connector == id_connector
ЭТАП 3: Применение фильтров
Каждый фильтр применяется как к statement, так и к count_statement:
Если id_project указан:
Добавляется WHERE Project.id_project == id_project
Если dt_from указана:
Добавляется WHERE Project.ecc_dt > dt_from
Если dt_to указана:
Добавляется WHERE Project.ecc_dt < dt_to
Если project_name указано:
Добавляется WHERE Project.name == project_name
Если parent_id_project == "null" (строка):
Добавляется WHERE Project.parent_id_project IS NULL
Возвращаются проекты без родителя
Если parent_id_project — любое другое значение:
Добавляется WHERE Project.parent_id_project == parent_id_project
ЭТАП 4: Получение общего количества
Выполняется count_statement и получается total_count
Это число записей, удовлетворяющих всем фильтрам
ЭТАП 5: Применение пагинации
К statement добавляется ORDER BY Project.ecc_dt
Применяется LIMIT page_size
Применяется OFFSET offset
Выполняется запрос и получается список projects_db
ЭТАП 6: Обработка data и template
Если projects_db не пуст и (include_data или include_template):
a) Собираются PK (id_connector, id_project) для всех полученных проектов b) Выполняется запрос на получение всех версий ProjectData для этих проектов c) Результаты сортируются по (id_project, version DESC) d) Для каждого проекта сохраняется ПОСЛЕДНЯЯ (MAX version) запись ProjectData
ЭТАП 7: Формирование ответа
Для каждого проекта из projects_db:
Берётся базовая информация проекта (Project fields)
Если проект найден в latest_project_data_map:
Если include_data == True — берётся data из ProjectData
Если include_template == True — берётся template из ProjectData
Если проект не найден в карте или флаги False:
data = null и/или template = null
Объект преобразуется в ProjectReadSchema
Добавляется в результирующий список
ЭТАП 8: Возврат результата
Возвращается ProjectsListPageResponse с полями:
count: общее количество записей (без учёта paging)
limit: размер страницы
offset: смещение
data: список ProjectReadSchema
Успешный ответ (200 OK)
Формат: JSON, схема ProjectsListPageResponse
Пример:
{ "count": 250, "limit": 100, "offset": 0, "data": [ { "id_connector": "conn-prod-001", "id_project": "proj-123", "name": "My Project", "parent_id_project": null, "ecc_dt": "2025-11-14T12:34:56+03:00", "data": { "config": "...", "settings": { ... } }, "template": { "sections": [ ... ] } }, { "id_connector": "conn-prod-001", "id_project": "proj-124", "name": "Child Project", "parent_id_project": "proj-123", "ecc_dt": "2025-11-13T10:20:30+03:00", "data": null, "template": null } // ... больше проектов до page_size ] }
Метаданные будут выгружаться в разделе json «data».
