강력한 검색 및 페이지 매김 옵션을 사용하여 Blue에서 레코드(할 일)를 쿼리하고 필터링합니다.
레코드 목록
할 일 쿼리를 사용하면 Blue에서 포괄적인 필터링, 정렬 및 페이지 매김 옵션으로 레코드를 검색할 수 있습니다. 회사, 프로젝트 전반에 걸쳐 레코드를 쿼리하거나 담당자, 태그 및 날짜와 같은 특정 기준으로 필터링할 수 있습니다.
기본 예제
최소한의 매개변수로 회사의 모든 레코드를 나열합니다:
query ListRecords {
todoQueries {
todos(
filter: {
companyIds: ["company_123"]
}
) {
items {
id
title
done
duedAt
}
pageInfo {
totalItems
hasNextPage
}
}
}
}
고급 예제
포괄적인 필터링, 정렬 및 필드 선택으로 레코드를 쿼리합니다:
query ListRecordsAdvanced {
todoQueries {
todos(
filter: {
companyIds: ["company_123"]
projectIds: ["project_456", "project_789"]
assigneeIds: ["user_123"]
tagIds: ["tag_priority", "tag_urgent"]
showCompleted: false
dueStart: "2025-01-01T00:00:00Z"
dueEnd: "2025-12-31T23:59:59Z"
search: "product launch"
excludeArchivedProjects: true
fields: [
{
type: "CUSTOM_FIELD"
customFieldId: "cf_status_123"
customFieldType: "SELECT_SINGLE"
values: ["In Progress", "Review"]
op: "IN"
}
]
op: "AND"
}
sort: [duedAt_ASC, position_ASC]
limit: 50
skip: 0
) {
items {
id
uid
position
title
text
html
startedAt
duedAt
timezone
color
cover
done
archived
createdAt
updatedAt
commentCount
checklistCount
checklistCompletedCount
isRepeating
todoList {
id
title
}
users {
id
name
email
}
tags {
id
title
color
}
customFields {
id
title
type
value
}
createdBy {
id
name
}
}
pageInfo {
totalPages
totalItems
page
perPage
hasNextPage
hasPreviousPage
}
}
}
}
입력 매개변수
TodosFilter
매개변수 | 유형 | 필수 | 설명 |
---|---|---|---|
companyIds |
[String!]! | ✅ 예 | 쿼리할 회사 ID 또는 슬러그 |
projectIds |
[String!] | 아니요 | 특정 프로젝트 ID 또는 슬러그로 필터링 |
todoIds |
[String!] | 아니요 | ID로 특정 할 일을 검색 |
assigneeIds |
[String!] | 아니요 | 할당된 사용자 ID로 필터링 |
tagIds |
[String!] | 아니요 | 태그 ID로 필터링 |
tagColors |
[String!] | 아니요 | 태그 색상으로 필터링 (16진수 형식) |
tagTitles |
[String!] | 아니요 | 태그 제목으로 필터링 |
todoListIds |
[String!] | 아니요 | 할 일 목록 ID로 필터링 |
todoListTitles |
[String!] | 아니요 | 할 일 목록 제목으로 필터링 |
done |
Boolean | 아니요 | 완료 상태로 필터링 (사용 중단, showCompleted 사용) |
showCompleted |
Boolean | 아니요 | 완료된 할 일을 표시/숨기기 (기본값: true) |
startedAt |
DateTime | 아니요 | 시작 날짜로 필터링 |
duedAt |
DateTime | 아니요 | 정확한 기한 날짜로 필터링 |
dueStart |
DateTime | 아니요 | 기한 날짜 범위 시작 (포함) |
dueEnd |
DateTime | 아니요 | 기한 날짜 범위 끝 (포함) |
search |
String | 아니요 | 제목 및 텍스트 내용에서 검색 |
q |
String | 아니요 | 대체 검색 매개변수 (검색과 동일) |
excludeArchivedProjects |
Boolean | 아니요 | 아카이브된 프로젝트의 할 일 제외 |
coordinates |
JSON | 아니요 | 지도 보기용 지리적 필터 (다각형 좌표) |
fields |
JSON | 아니요 | 사용자 정의 필드 필터 (고급 필터링 참조) |
op |
FilterLogicalOperator | 아니요 | 필드 필터에 대한 논리 연산자 (AND/OR) |
쿼리 매개변수
매개변수 | 유형 | 필수 | 설명 |
---|---|---|---|
filter |
TodosFilter! | ✅ 예 | 쿼리에 대한 필터 기준 |
sort |
[TodosSort!] | 아니요 | 정렬 순서 (기본값: 빈 배열) |
limit |
Int | 아니요 | 페이지당 항목 수 (기본값: 20, 최대: 500) |
skip |
Int | 아니요 | 페이지 매김을 위한 건너뛸 항목 수 (기본값: 0) |
TodosSort 값
값 | 설명 |
---|---|
assignees_ASC |
담당자 이름으로 오름차순 정렬 |
assignees_DESC |
담당자 이름으로 내림차순 정렬 |
createdAt_ASC |
생성 날짜로 오름차순 정렬 (가장 오래된 것 먼저) |
createdAt_DESC |
생성 날짜로 내림차순 정렬 (가장 최근 것 먼저) |
createdBy_ASC |
생성자 이름으로 오름차순 정렬 |
createdBy_DESC |
생성자 이름으로 내림차순 정렬 |
duedAt_ASC |
기한 날짜로 오름차순 정렬 (가장 이른 것 먼저) |
duedAt_DESC |
기한 날짜로 내림차순 정렬 (가장 늦은 것 먼저) |
position_ASC |
위치로 오름차순 정렬 (기본 목록 순서) |
position_DESC |
위치로 내림차순 정렬 |
startedAt_ASC |
시작 날짜로 오름차순 정렬 |
startedAt_DESC |
시작 날짜로 내림차순 정렬 |
title_ASC |
제목으로 알파벳 순서로 오름차순 정렬 |
title_DESC |
제목으로 알파벳 순서로 내림차순 정렬 |
todoListPosition_ASC |
할 일 목록 위치로 오름차순 정렬 |
todoListPosition_DESC |
할 일 목록 위치로 내림차순 정렬 |
todoListTitle_ASC |
할 일 목록 제목으로 오름차순 정렬 |
todoListTitle_DESC |
할 일 목록 제목으로 내림차순 정렬 |
todoTags_ASC |
태그로 오름차순 정렬 |
todoTags_DESC |
태그로 내림차순 정렬 |
FilterLogicalOperator 값
값 | 설명 |
---|---|
AND |
모든 조건이 일치해야 함 |
OR |
어떤 조건이든 일치해야 함 |
사용자 정의 필드 필터링
fields
매개변수는 사용자 정의 필드를 통한 고급 필터링을 지원합니다:
{
"fields": [
{
"type": "CUSTOM_FIELD",
"customFieldId": "cf_123",
"customFieldType": "SELECT_SINGLE",
"values": ["Option1", "Option2"],
"op": "IN"
}
]
}
사용자 정의 필드 필터 구조
필드 | 유형 | 설명 |
---|---|---|
type |
String | "CUSTOM_FIELD"여야 함 |
customFieldId |
String | 사용자 정의 필드의 ID |
customFieldType |
String | 사용자 정의 필드의 유형 |
values |
[String!] | 필터링할 값 |
op |
String | 비교 연산자 (IN, NOT_IN, EQ 등) |
지원되는 사용자 정의 필드 유형
- 텍스트 필드:
TEXT_SINGLE
,TEXT_MULTI
,URL
,EMAIL
,PHONE
,UNIQUE_ID
- 숫자 필드:
CURRENCY
,NUMBER
,FORMULA
- 선택 필드:
SELECT_SINGLE
,SELECT_MULTI
,CHECKBOX
,COUNTRY
- 참조 필드:
REFERENCE
,LOOKUP
- 날짜 필드:
DATE
응답 필드
TodosResult
필드 | 유형 | 설명 |
---|---|---|
items |
[Todo!]! | 할 일 레코드의 배열 |
pageInfo |
PageInfo! | 페이지 매김 메타데이터 |
PageInfo
필드 | 유형 | 설명 |
---|---|---|
totalPages |
Int | 사용 가능한 총 페이지 수 |
totalItems |
Int | 모든 페이지의 총 항목 수 |
page |
Int | 현재 페이지 번호 (건너뛰기/제한에서 계산됨) |
perPage |
Int | 페이지당 항목 수 |
hasNextPage |
Boolean! | 다음 페이지가 있는지 여부 |
hasPreviousPage |
Boolean! | 이전 페이지가 있는지 여부 |
할 일 필드
필드 | 유형 | 설명 |
---|---|---|
id |
ID! | 고유 식별자 |
uid |
String! | 사용자 친화적인 고유 식별자 |
position |
Float! | 목록에서의 위치 |
title |
String! | 할 일 제목 |
text |
String! | 일반 텍스트 내용 |
html |
String! | HTML 형식의 내용 |
startedAt |
DateTime | 시작 날짜/시간 |
duedAt |
DateTime | 기한 날짜/시간 |
timezone |
String | 날짜의 시간대 |
color |
String | 시각적 색상 표시기 |
cover |
String | 커버 이미지 URL |
done |
Boolean! | 완료 상태 |
archived |
Boolean! | 아카이브 상태 |
createdAt |
DateTime! | 생성 타임스탬프 |
updatedAt |
DateTime! | 마지막 업데이트 타임스탬프 |
commentCount |
Int! | 댓글 수 |
checklistCount |
Int! | 총 체크리스트 항목 수 |
checklistCompletedCount |
Int! | 완료된 체크리스트 항목 수 |
isRepeating |
Boolean! | 할 일이 반복되는지 여부 |
isRead |
Boolean | 현재 사용자의 읽기 상태 |
isSeen |
Boolean | 현재 사용자의 조회 상태 |
todoList |
TodoList! | 상위 할 일 목록 |
users |
[User!]! | 할당된 사용자 |
tags |
[Tag!]! | 관련 태그 |
checklists |
[Checklist!]! | 관련 체크리스트 |
createdBy |
User | 할 일을 생성한 사용자 |
customFields |
[CustomField!]! | 사용자 정의 필드 값 |
dependOn |
[Todo!] | 차단된 할 일 (종속성) |
dependBy |
[Todo!] | 종속 할 일 (이로 인해 차단됨) |
timeTracking |
TimeTracking | 시간 추적 데이터 |
필수 권한
사용자는 레코드를 쿼리하기 위해 적절한 접근 권한이 있어야 합니다:
접근 유형 | 요구 사항 |
---|---|
Company Access | User must be a member of the company |
Project Access | User must have access to specific projects (if filtering by project) |
Todo Visibility | Depends on user's role and permissions: |
- VIEW_ONLY |
Can view all accessible todos |
- COMMENT_ONLY |
Can view all accessible todos |
- CLIENT |
May be restricted to assigned todos only |
- MEMBER |
Can view all project todos |
- ADMIN |
Can view all project todos |
- OWNER |
Can view all company todos |
특별 제한 사항:
showOnlyAssignedTodos
권한이 있는 사용자는 자신에게 할당된 할 일만 볼 수 있습니다.- 숨겨진 할 일 목록 (역할 구성에 따라) 자동으로 제외됩니다.
- 태그 기반 권한이 결과를 추가로 필터링할 수 있습니다.
오류 응답
일반 오류
쿼리는 오류를 우아하게 처리하고 다음에 대해 빈 결과를 반환합니다:
- 잘못된 회사 ID
- 접근할 수 없는 프로젝트
- 권한 거부 시나리오
심각한 오류의 경우 GraphQL 오류가 반환될 수 있습니다:
{
"errors": [{
"message": "Query timeout exceeded",
"extensions": {
"code": "QUERY_TIMEOUT"
}
}]
}
중요 사항
성능
- 기본 한도: 페이지당 20개 항목 (지정하지 않으면 자동으로 적용됨)
- 최대 한도: 요청당 500개 항목 (자동으로 제한됨)
- 최적화: 쿼리는 최상의 성능을 위해 STRAIGHT_JOIN을 사용한 최적화된 조인을 사용합니다.
- 인덱싱: 일반 필터 필드는 빠른 쿼리를 위해 인덱싱됩니다.
- 사용자 정의 필드: 광범위한 사용자 정의 필드 필터링 지원으로 성능에 미치는 영향이 최소화됩니다.
- 지리적 쿼리: 지도 보기용 다각형 기반 좌표 필터링을 지원합니다.
날짜 필터링
- 날짜 범위는 포함됩니다.
- 겹치는 날짜 범위를 지원합니다 (범위 내에서 시작하거나 종료되는 할 일).
- 널 날짜는 우아하게 처리됩니다 (기한이 없는 할 일은 날짜 필터와 일치하지 않음).
- 모든 날짜는 ISO 8601 형식이어야 합니다.
검색 동작
- 검색은 대소문자를 구분하지 않습니다.
- 제목과 텍스트 내용 모두에서 검색합니다.
- 부분 단어 일치가 지원됩니다.
- 특수 문자는 적절하게 처리됩니다.
페이지 매김 전략
- 오프셋 기반 페이지 매김을 위해
skip
및limit
를 사용합니다. - 현재 페이지 계산:
page = Math.floor(skip / limit) + 1
- 대용량 데이터 세트의 경우 결과 크기를 줄이기 위해 필터 사용을 고려하십시오.
- 건너뛰기를 증가시키기 전에 항상
hasNextPage
를 확인하십시오.
관련 엔드포인트
- 레코드 생성: createTodo 변이를 사용하여 새 레코드를 생성합니다.
- 레코드 업데이트: updateTodo 변이를 사용하여 레코드를 수정합니다.
- 레코드 삭제: deleteTodo 변이를 사용하여 레코드를 제거합니다.
- 사용자 정의 필드 목록: 필터링을 위해 사용 가능한 사용자 정의 필드를 쿼리합니다.
- 프로젝트 목록: 필터링을 위해 사용 가능한 프로젝트를 쿼리합니다.