Управление списками задач в проектах - создание, редактирование, удаление и запрос списков


Обзор

Списки в Blue являются контейнерами для организации задач в рамках проекта. Каждый список может содержать несколько задач и помогает структурировать работу в логические группы. Списки поддерживают позиционирование, блокировку и контроль доступа на основе ролей.

Ключевые концепции

  • Каждый проект может иметь до 50 списков
  • Списки упорядочены по позиции (по возрастанию)
  • Списки могут быть заблокированы для предотвращения изменений
  • Списки учитывают разрешения на уровне проекта и на основе ролей
  • Удаленные списки перемещаются в корзину (мягкое удаление)

Запросы

Получить один список

Получите конкретный список задач по ID.

query GetTodoList($id: String!) {
  todoList(id: $id) {
    id
    uid
    title
    position
    isDisabled
    isLocked
    createdAt
    updatedAt
    project {
      id
      name
    }
    createdBy {
      id
      username
    }
  }
}

Получить все списки в проекте

Получите все списки задач для конкретного проекта.

query GetProjectLists($projectId: String!) {
  todoLists(projectId: $projectId) {
    id
    uid
    title
    position
    isDisabled
    isLocked
    createdAt
    updatedAt
  }
}

Расширенный запрос списка

Запрос списков с фильтрацией, сортировкой и постраничной навигацией.

query SearchTodoLists($filter: TodoListsFilterInput!, $sort: [TodoListsSort!], $skip: Int, $take: Int) {
  todoListQueries {
    todoLists(filter: $filter, sort: $sort, skip: $skip, take: $take) {
      items {
        id
        uid
        title
        position
        isDisabled
        isLocked
        createdAt
        updatedAt
        project {
          id
          name
        }
      }
      pageInfo {
        hasNextPage
        hasPreviousPage
        total
      }
    }
  }
}

Мутации

Создать список

Создайте новый список задач в проекте.

mutation CreateTodoList($input: CreateTodoListInput!) {
  createTodoList(input: $input) {
    id
    uid
    title
    position
    isDisabled
    isLocked
    createdAt
    project {
      id
      name
    }
  }
}

Пример:

mutation {
  createTodoList(input: {
    projectId: "project-123"
    title: "Sprint 1 Tasks"
    position: 1.0
  }) {
    id
    title
  }
}

Редактировать список

Обновите свойства существующего списка задач.

mutation EditTodoList($input: EditTodoListInput!) {
  editTodoList(input: $input) {
    id
    title
    position
    isLocked
    updatedAt
  }
}

Пример:

mutation {
  editTodoList(input: {
    todoListId: "list-123"
    title: "Sprint 1 - In Progress"
    position: 2.0
    isLocked: true
  }) {
    id
    title
    isLocked
  }
}

Удалить список

Удалите список задач (перемещается в корзину).

mutation DeleteTodoList($input: DeleteTodoListInput!) {
  deleteTodoList(input: $input) {
    success
  }
}

Пример:

mutation {
  deleteTodoList(input: {
    projectId: "project-123"
    todoListId: "list-123"
  }) {
    success
  }
}

Отметить список как выполненный/невыполненный

Отметьте все задачи в списке как выполненные или невыполненные.

# Mark as done
mutation MarkListDone($todoListId: String!, $filter: TodosFilter) {
  markTodoListAsDone(todoListId: $todoListId, filter: $filter)
}

# Mark as undone
mutation MarkListUndone($todoListId: String!, $filter: TodosFilter) {
  markTodoListAsUndone(todoListId: $todoListId, filter: $filter)
}

Входные типы

CreateTodoListInput

Параметр Тип Обязательный Описание
projectId String! ✅ Да ID проекта, в котором будет создан список
title String! ✅ Да Название списка
position Float! ✅ Да Позиция списка (для сортировки)

EditTodoListInput

Параметр Тип Обязательный Описание
todoListId String! ✅ Да ID списка для редактирования
title String Нет Новое название для списка
position Float Нет Новая позиция для списка
isLocked Boolean Нет Должен ли список быть заблокирован

DeleteTodoListInput

Параметр Тип Обязательный Описание
projectId String! ✅ Да ID проекта (для проверки)
todoListId String! ✅ Да ID списка для удаления

TodoListsFilterInput

Параметр Тип Обязательный Описание
companyIds [String!]! ✅ Да Фильтр по ID компаний
projectIds [String!] Нет Фильтр по конкретным ID проектов
ids [String!] Нет Фильтр по конкретным ID списков
titles [String!] Нет Фильтр по названиям списков
search String Нет Поиск списков по названию

TodoListsSort Values

Значение Описание
title_ASC Сортировка по названию по возрастанию
title_DESC Сортировка по названию по убыванию
createdAt_ASC Сортировка по дате создания по возрастанию
createdAt_DESC Сортировка по дате создания по убыванию
updatedAt_ASC Сортировка по дате обновления по возрастанию
updatedAt_DESC Сортировка по дате обновления по убыванию
position_ASC Сортировка по позиции по возрастанию (по умолчанию)
position_DESC Сортировка по позиции по убыванию

Типы ответов

Тип TodoList

Поле Тип Описание
id ID! Уникальный идентификатор
uid String! Удобный для пользователя идентификатор
position Float! Позиция списка для сортировки
title String! Название списка
isDisabled Boolean! Является ли список отключенным
isLocked Boolean Является ли список заблокированным
createdAt DateTime! Временная метка создания
updatedAt DateTime! Временная метка последнего обновления
activity Activity Связанный журнал активности
createdBy User Пользователь, создавший список
project Project! Родительский проект
todos [Todo!]! Задачи в этом списке
todosCount Int! Количество задач

Тип TodoListsPagination

Поле Тип Описание
items [TodoList!]! Массив списков задач
pageInfo PageInfo! Информация о постраничной навигации

Необходимые разрешения

Разрешения на запрос

Операция Необходимое разрешение
todoList Must be authenticated
todoLists Must be authenticated and in company
todoListQueries.todoLists Must be authenticated and in company

Разрешения на мутацию

Операция Разрешенные роли на уровне проекта
createTodoList OWNER, ADMIN, MEMBER
editTodoList OWNER, ADMIN, MEMBER, CLIENT
deleteTodoList OWNER, ADMIN, MEMBER
markTodoListAsDone OWNER, ADMIN, MEMBER
markTodoListAsUndone OWNER, ADMIN, MEMBER

Примечание: Пользователи с ролью CLIENT могут редактировать списки, но не могут их создавать или удалять. Пользователи с ролями VIEW_ONLY или COMMENT_ONLY не могут создавать, редактировать или удалять списки.

Ошибки ответов

TodoListNotFoundError

{
  "errors": [{
    "message": "Todo list was not found.",
    "extensions": {
      "code": "TODO_LIST_NOT_FOUND"
    }
  }]
}

ProjectNotFoundError

{
  "errors": [{
    "message": "Project was not found.",
    "extensions": {
      "code": "PROJECT_NOT_FOUND"
    }
  }]
}

Ошибка максимального количества списков

{
  "errors": [{
    "message": "You have reached the maximum number of todo lists for this project.",
    "extensions": {
      "code": "INTERNAL_SERVER_ERROR"
    }
  }]
}

UnauthorizedError

{
  "errors": [{
    "message": "Unauthorized",
    "extensions": {
      "code": "UNAUTHORIZED"
    }
  }]
}

Важные заметки

  • Лимит списков: Каждый проект может иметь максимум 50 списков
  • Мягкое удаление: Удаленные списки перемещаются в корзину и могут быть восстановлены
  • Управление позициями: При создании списков убедитесь, что позиции не конфликтуют. Используйте инкрементальные значения (1.0, 2.0, 3.0), чтобы позволить вставку между списками
  • Доступ на основе ролей: Списки могут быть скрыты от определенных ролей с помощью разрешений ProjectUserRoleTodoList
  • Webhook'и: Создание, обновление и удаление списков запускают webhook'и, если они настроены
  • Отслеживание активности: Все операции со списками регистрируются в ленте активности
  • Обновления в реальном времени: Изменения в списках публикуются через подписки для обновлений в реальном времени

Связанные операции

  • Используйте todos запрос для получения задач в списке
  • Используйте createTodo мутацию для добавления задач в список
  • Используйте moveTodo мутацию для перемещения задач между списками
  • Подпишитесь на изменения в списках, используя subscribeToTodoList подписку

AI Ассистент

Ответы генерируются с использованием ИИ и могут содержать ошибки.

Как я могу вам помочь?

Спросите меня о чем угодно, связанном с Blue или этой документацией.

Введите для отправки • Shift+Enter для новой строки • ⌘I для открытия