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

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

  • Создаёт новый проект или обновляет существующий проект в рамках указанного Коннектора.

  • Требуется аутентификация (Depends(check_login_pass)).

Аутентификация

  • Зависимость check_login_pass: передавайте учётные данные в том виде, как настроено (например, Authorization header).

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

  • Основные поля (в проекте могут быть и другие поля, см. ProjectCreateSchema):

    • id_connector (string, обязательный) — идентификатор коннектора, в рамках которого создаётся проект.

    • id_project (string, обязательный) — уникальный идентификатор проекта внутри коннектора.

    • name (string, опционально) — имя проекта.

    • parent_id_project (string | null, опционально) — ссылка на родительский проект.

    • data (object | null, опционально) — содержимое проекта (хранится в ProjectData).

    • template (object | null, опционально) — шаблон проекта (хранится в ProjectData).

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

Что делает сервер:

  • Проверяет существование коннектора с id_connector. Если коннектор не найден — 404.

  • Ищет существующую запись Project по (id_connector, id_project):

    • Если есть — обновляет поля проекта (кроме data/template, они хранятся отдельно в ProjectData).

    • Если нет — создаёт новый объект Project.

  • Устанавливает project.ecc_dt = текущее локальное время.

  • Управляет версиями ProjectData:

    • Получает последнюю версию ProjectData для (id_connector, id_project).

    • Если переданы data или template и они отличаются от последней версии (или версии нет) — создаётся новая запись ProjectData с incremented version.

    • В ответе возвращается либо новые data/template, либо последние доступные версии (или null, если их нет).

  • Коммитит изменения (db_session.commit()) и возвращает ProjectReadSchema.

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

  • Возвращается объект по схеме ProjectReadSchema, содержащий поля проекта и поля data/template (включены только если - - include logic выше создала или нашла их).

  • Пример:

{ "id_connector": "conn-001", "id_project": "proj-123", "name": "My Project", "parent_id_project": null, "ecc_dt": "2025-11-14T12:34:56+03:00", "data": { ... } | null, "template": { ... } | null }