Создайте полную копию существующего проекта с настраиваемыми параметрами для включения.
Копирование проекта
Мутация копирования проекта позволяет вам дублировать существующий проект в рамках одной компании или в другую компанию. Это полезно для создания шаблонов проектов, настройки аналогичных проектов или перемещения проектов между компаниями. Операция копирования выполняется асинхронно для эффективной обработки крупных проектов.
Простой пример
mutation CopyProject {
  copyProject(
    input: {
      projectId: "proj_123abc"
      name: "New Project Copy"
      options: {
        todos: true
        todoLists: true
        people: true
      }
    }
  )
}
Расширенный пример
mutation CopyProject {
  copyProject(
    input: {
      projectId: "proj_123abc"
      name: "Q2 Marketing Campaign"
      description: "Copy of Q1 campaign with updated timeline"
      imageURL: "https://example.com/campaign-logo.png"
      companyId: "comp_789xyz"
      options: {
        assignees: true
        automations: true
        checklists: true
        customFields: true
        discussions: false
        discussionComments: false
        dueDates: true
        files: true
        forms: true
        people: true
        projectUserRoles: true
        statusUpdates: false
        statusUpdateComments: false
        tags: true
        todoActions: true
        todoComments: false
        todoLists: true
        todos: true
      }
    }
  )
}
Входные параметры
CopyProjectInput
| Параметр | Тип | Обязательный | Описание | 
|---|---|---|---|
projectId | 
String! | ✅ Да | Идентификатор проекта, который необходимо скопировать | 
name | 
String! | ✅ Да | Название для нового проекта (макс. 50 символов) | 
description | 
String | Нет | Описание для нового проекта (макс. 500 символов) | 
imageURL | 
String | Нет | URL изображения для нового проекта | 
companyId | 
String | Нет | Идентификатор компании, в которой должен быть создан новый проект. Если не указано, используется компания исходного проекта | 
options | 
CopyProjectOptionsInput! | ✅ Да | Конфигурация для того, какие элементы копировать | 
CopyProjectOptionsInput
| Параметр | Тип | Обязательный | Описание | 
|---|---|---|---|
assignees | 
Boolean | Нет | Копировать назначенных задач (требуется people: true) | 
automations | 
Boolean | Нет | Копировать автоматизации и рабочие процессы проекта | 
checklists | 
Boolean | Нет | Копировать контрольные списки задач | 
customFields | 
Boolean | Нет | Копировать определения и значения пользовательских полей | 
discussions | 
Boolean | Нет | Копировать обсуждения проекта | 
discussionComments | 
Boolean | Нет | Копировать комментарии к обсуждениям (требуется discussions: true) | 
dueDates | 
Boolean | Нет | Копировать сроки выполнения задач | 
files | 
Boolean | Нет | Копировать вложения файлов | 
forms | 
Boolean | Нет | Копировать формы проекта | 
people | 
Boolean | Нет | Копировать участников проекта | 
projectUserRoles | 
Boolean | Нет | Копировать роли и разрешения пользователей (требуется people: true) | 
statusUpdates | 
Boolean | Нет | Копировать обновления статуса проекта | 
statusUpdateComments | 
Boolean | Нет | Копировать комментарии к обновлениям статуса (требуется statusUpdates: true) | 
tags | 
Boolean | Нет | Копировать теги проекта | 
todoActions | 
Boolean | Нет | Копировать действия/подзадачи задач | 
todoComments | 
Boolean | Нет | Копировать комментарии к задачам | 
todoLists | 
Boolean | Нет | Копировать списки/разделы задач | 
todos | 
Boolean | Нет | Копировать задачи | 
coverConfig | 
Boolean | Нет | Копировать конфигурацию обложки задачи | 
Ответ
Мутация возвращает значение Boolean:
true- Задача копирования успешно поставлена в очередьfalse- Задача копирования не может быть начата
Проверка статуса копирования
Поскольку копирование выполняется асинхронно, используйте запрос copyProjectStatus для проверки прогресса:
Поля статуса копирования
| Поле | Тип | Описание | 
|---|---|---|
queuePosition | 
Int | Позиция в очереди копирования | 
totalQueues | 
Int | Общее количество элементов в очереди | 
isActive | 
Boolean | Активна ли операция копирования в данный момент | 
oldProject | 
Project | Исходный проект, который копируется | 
newProjectName | 
String | Название нового проекта, который создается | 
isTemplate | 
Boolean | Является ли это копированием в качестве шаблона | 
oldCompany | 
Company | Исходная компания | 
newCompany | 
Company | Целевая компания | 
query CheckCopyStatus {
  copyProjectStatus {
    queuePosition
    totalQueues
    isActive
    oldProject {
      id
      name
    }
    newProjectName
    isTemplate
    oldCompany {
      id
      name
    }
    newCompany {
      id
      name
    }
  }
}
Необходимые разрешения
Чтобы скопировать проект, вам нужны соответствующие разрешения как в исходном, так и в целевом местах:
| Сценарий | Необходимые разрешения | 
|---|---|
| Copy within same company | OWNER, ADMIN, or MEMBER role in the source project | 
| Copy to different company | • OWNER, ADMIN, or MEMBER role in the source project• Must be a member of the target company  | 
Исходный проект должен быть активным (не архивированным), чтобы его можно было скопировать.
Ответы об ошибках
Проект не найден
{
  "errors": [{
    "message": "Record not found",
    "extensions": {
      "code": "PROJECT_NOT_FOUND"
    }
  }]
}
Происходит, когда исходный проект не существует или у вас нет доступа.
Компания не найдена
{
  "errors": [{
    "message": "Record not found",
    "extensions": {
      "code": "COMPANY_NOT_FOUND"
    }
  }]
}
Происходит, когда целевая компания не существует или у вас нет доступа.
Проект слишком большой
{
  "errors": [{
    "message": "Project is too large to copy",
    "extensions": {
      "code": "CREATE_PROJECT_LIMIT"
    }
  }]
}
Происходит, когда проект содержит более 250 000 задач.
Копирование уже в процессе
{
  "errors": [{
    "message": "Oops!"
  }]
}
Происходит, когда у вас уже есть операция копирования в процессе.
Важные заметки
- Асинхронная операция: Мутация ставит задачу в фоновую очередь и возвращает результат немедленно. Используйте 
copyProjectStatusдля отслеживания прогресса. - Одна копия за раз: В любой момент может быть активна только одна операция копирования для пользователя.
 - Ограничения по размеру: Проекты с более чем 250 000 задач не могут быть скопированы.
 - Логические зависимости: Некоторые параметры лучше работают вместе:
assigneesработает сpeople: true(назначенные не будут скопированы без людей)discussionCommentsработает сdiscussions: truestatusUpdateCommentsработает сstatusUpdates: trueprojectUserRolesработает сpeople: true
 - Обработка имен: Имена проектов обрезаются, и любые URL автоматически удаляются.
 - Приоритет очереди: Клиенты корпоративного уровня получают более высокий приоритет в очереди копирования.
 - Кэширование статуса: Статус копирования кэшируется на 6 часов после завершения.