Управление списками задач в проектах - создание, редактирование, удаление и запрос списков
Обзор
Списки в 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
подписку