Kuery dan filter rekaman (todos) di Blue dengan opsi pencarian dan paginasi yang kuat.
Daftar Rekaman
Kuery todos memungkinkan Anda untuk mengambil rekaman dari Blue dengan opsi penyaringan, pengurutan, dan paginasi yang komprehensif. Anda dapat mengkueri rekaman di seluruh perusahaan, proyek, atau memfilter berdasarkan kriteria tertentu seperti penugasan, tag, dan tanggal.
Contoh Dasar
Daftar semua rekaman di sebuah perusahaan dengan parameter minimal:
query ListRecords {
todoQueries {
todos(
filter: {
companyIds: ["company_123"]
}
) {
items {
id
title
done
duedAt
}
pageInfo {
totalItems
hasNextPage
}
}
}
}
Contoh Lanjutan
Kuery rekaman dengan penyaringan, pengurutan, dan pemilihan bidang yang komprehensif:
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
}
}
}
}
Parameter Masukan
TodosFilter
Parameter | Tipe | Diperlukan | Deskripsi |
---|---|---|---|
companyIds |
[String!]! | ✅ Ya | ID perusahaan atau slug untuk dikueri |
projectIds |
[String!] | Tidak | Filter berdasarkan ID proyek tertentu atau slug |
todoIds |
[String!] | Tidak | Ambil todos tertentu berdasarkan ID mereka |
assigneeIds |
[String!] | Tidak | Filter berdasarkan ID pengguna yang ditugaskan |
tagIds |
[String!] | Tidak | Filter berdasarkan ID tag |
tagColors |
[String!] | Tidak | Filter berdasarkan warna tag (format hex) |
tagTitles |
[String!] | Tidak | Filter berdasarkan judul tag |
todoListIds |
[String!] | Tidak | Filter berdasarkan ID daftar todo |
todoListTitles |
[String!] | Tidak | Filter berdasarkan judul daftar todo |
done |
Boolean | Tidak | Filter berdasarkan status penyelesaian (tidak lagi digunakan, gunakan showCompleted) |
showCompleted |
Boolean | Tidak | Tampilkan/sembunyikan todos yang telah selesai (default: true) |
startedAt |
DateTime | Tidak | Filter berdasarkan tanggal mulai |
duedAt |
DateTime | Tidak | Filter berdasarkan tanggal jatuh tempo yang tepat |
dueStart |
DateTime | Tidak | Rentang tanggal jatuh tempo mulai (inklusif) |
dueEnd |
DateTime | Tidak | Rentang tanggal jatuh tempo akhir (inklusif) |
search |
String | Tidak | Cari di judul dan konten teks |
q |
String | Tidak | Parameter pencarian alternatif (sama dengan pencarian) |
excludeArchivedProjects |
Boolean | Tidak | Kecualikan todos dari proyek yang diarsipkan |
coordinates |
JSON | Tidak | Filter geo-spasial untuk tampilan peta (koordinat poligon) |
fields |
JSON | Tidak | Filter bidang kustom (lihat penyaringan lanjutan) |
op |
FilterLogicalOperator | Tidak | Operator logis untuk filter bidang (AND/OR) |
Parameter Kuery
Parameter | Tipe | Diperlukan | Deskripsi |
---|---|---|---|
filter |
TodosFilter! | ✅ Ya | Kriteria filter untuk kuery |
sort |
[TodosSort!] | Tidak | Urutan pengurutan (default: array kosong) |
limit |
Int | Tidak | Jumlah item per halaman (default: 20, max: 500) |
skip |
Int | Tidak | Jumlah item yang dilewati untuk paginasi (default: 0) |
Nilai TodosSort
Nilai | Deskripsi |
---|---|
assignees_ASC |
Urutkan berdasarkan nama penugasan secara ascending |
assignees_DESC |
Urutkan berdasarkan nama penugasan secara descending |
createdAt_ASC |
Urutkan berdasarkan tanggal pembuatan secara ascending (terlama terlebih dahulu) |
createdAt_DESC |
Urutkan berdasarkan tanggal pembuatan secara descending (terbaru terlebih dahulu) |
createdBy_ASC |
Urutkan berdasarkan nama pembuat secara ascending |
createdBy_DESC |
Urutkan berdasarkan nama pembuat secara descending |
duedAt_ASC |
Urutkan berdasarkan tanggal jatuh tempo secara ascending (terawal terlebih dahulu) |
duedAt_DESC |
Urutkan berdasarkan tanggal jatuh tempo secara descending (terakhir terlebih dahulu) |
position_ASC |
Urutkan berdasarkan posisi secara ascending (urutan daftar default) |
position_DESC |
Urutkan berdasarkan posisi secara descending |
startedAt_ASC |
Urutkan berdasarkan tanggal mulai secara ascending |
startedAt_DESC |
Urutkan berdasarkan tanggal mulai secara descending |
title_ASC |
Urutkan berdasarkan judul secara alfabetis ascending |
title_DESC |
Urutkan berdasarkan judul secara alfabetis descending |
todoListPosition_ASC |
Urutkan berdasarkan posisi daftar todo secara ascending |
todoListPosition_DESC |
Urutkan berdasarkan posisi daftar todo secara descending |
todoListTitle_ASC |
Urutkan berdasarkan judul daftar todo secara ascending |
todoListTitle_DESC |
Urutkan berdasarkan judul daftar todo secara descending |
todoTags_ASC |
Urutkan berdasarkan tag secara ascending |
todoTags_DESC |
Urutkan berdasarkan tag secara descending |
Nilai FilterLogicalOperator
Nilai | Deskripsi |
---|---|
AND |
Semua kondisi harus cocok |
OR |
Setiap kondisi harus cocok |
Penyaringan Bidang Kustom
Parameter fields
mendukung penyaringan lanjutan berdasarkan bidang kustom:
{
"fields": [
{
"type": "CUSTOM_FIELD",
"customFieldId": "cf_123",
"customFieldType": "SELECT_SINGLE",
"values": ["Option1", "Option2"],
"op": "IN"
}
]
}
Struktur Filter Bidang Kustom
Bidang | Tipe | Deskripsi |
---|---|---|
type |
String | Harus "CUSTOM_FIELD" |
customFieldId |
String | ID bidang kustom |
customFieldType |
String | Tipe bidang kustom |
values |
[String!] | Nilai untuk disaring |
op |
String | Operator perbandingan (IN, NOT_IN, EQ, dll.) |
Tipe Bidang Kustom yang Didukung
- Bidang teks:
TEXT_SINGLE
,TEXT_MULTI
,URL
,EMAIL
,PHONE
,UNIQUE_ID
- Bidang numerik:
CURRENCY
,NUMBER
,FORMULA
- Bidang pilihan:
SELECT_SINGLE
,SELECT_MULTI
,CHECKBOX
,COUNTRY
- Bidang referensi:
REFERENCE
,LOOKUP
- Bidang tanggal:
DATE
Bidang Respon
TodosResult
Bidang | Tipe | Deskripsi |
---|---|---|
items |
[Todo!]! | Array dari rekaman todo |
pageInfo |
PageInfo! | Metadata paginasi |
PageInfo
Bidang | Tipe | Deskripsi |
---|---|---|
totalPages |
Int | Total jumlah halaman yang tersedia |
totalItems |
Int | Total jumlah item di semua halaman |
page |
Int | Nomor halaman saat ini (dihitung dari skip/limit) |
perPage |
Int | Jumlah item per halaman |
hasNextPage |
Boolean! | Apakah ada halaman berikutnya |
hasPreviousPage |
Boolean! | Apakah ada halaman sebelumnya |
Bidang Todo
Bidang | Tipe | Deskripsi |
---|---|---|
id |
ID! | Pengidentifikasi unik |
uid |
String! | Pengidentifikasi unik yang ramah pengguna |
position |
Float! | Posisi dalam daftar |
title |
String! | Judul todo |
text |
String! | Konten teks biasa |
html |
String! | Konten terformat HTML |
startedAt |
DateTime | Tanggal/waktu mulai |
duedAt |
DateTime | Tanggal/waktu jatuh tempo |
timezone |
String | Zona waktu untuk tanggal |
color |
String | Indikator warna visual |
cover |
String | URL gambar sampul |
done |
Boolean! | Status penyelesaian |
archived |
Boolean! | Status arsip |
createdAt |
DateTime! | Timestamp pembuatan |
updatedAt |
DateTime! | Timestamp pembaruan terakhir |
commentCount |
Int! | Jumlah komentar |
checklistCount |
Int! | Total item checklist |
checklistCompletedCount |
Int! | Item checklist yang telah selesai |
isRepeating |
Boolean! | Apakah todo berulang |
isRead |
Boolean | Status baca untuk pengguna saat ini |
isSeen |
Boolean | Status terlihat untuk pengguna saat ini |
todoList |
TodoList! | Daftar todo induk |
users |
[User!]! | Pengguna yang ditugaskan |
tags |
[Tag!]! | Tag yang terkait |
checklists |
[Checklist!]! | Checklist yang terkait |
createdBy |
User | Pengguna yang membuat todo |
customFields |
[CustomField!]! | Nilai bidang kustom |
dependOn |
[Todo!] | Todos yang memblokir (ketergantungan) |
dependBy |
[Todo!] | Todos yang tergantung (diblokir oleh ini) |
timeTracking |
TimeTracking | Data pelacakan waktu |
Izin yang Diperlukan
Pengguna harus memiliki akses yang sesuai untuk mengkueri rekaman:
Tipe Akses | Persyaratan |
---|---|
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 |
Pembatasan Khusus:
- Pengguna dengan izin
showOnlyAssignedTodos
hanya dapat melihat todos yang ditugaskan kepada mereka - Daftar todo yang tersembunyi (berdasarkan konfigurasi peran) secara otomatis dikecualikan
- Izin berbasis tag dapat lebih menyaring hasil
Respon Kesalahan
Kesalahan Umum
Kuery menangani kesalahan dengan baik dan mengembalikan hasil kosong untuk:
- ID perusahaan yang tidak valid
- Proyek yang tidak dapat diakses
- Skenario izin ditolak
Untuk kesalahan yang parah, kesalahan GraphQL mungkin dikembalikan:
{
"errors": [{
"message": "Query timeout exceeded",
"extensions": {
"code": "QUERY_TIMEOUT"
}
}]
}
Catatan Penting
Kinerja
- Batas default: 20 item per halaman (secara otomatis diterapkan jika tidak ditentukan)
- Batas maksimum: 500 item per permintaan (secara otomatis dibatasi)
- Optimisasi: Kuery menggunakan gabungan yang dioptimalkan dengan STRAIGHT_JOIN untuk kinerja terbaik
- Pengindeksan: Bidang filter umum diindeks untuk kueri cepat
- Bidang kustom: Dukungan penyaringan bidang kustom yang luas dengan dampak kinerja minimal
- Kuery geografis: Mendukung penyaringan koordinat berbasis poligon untuk tampilan peta
Penyaringan Tanggal
- Rentang tanggal bersifat inklusif
- Mendukung rentang tanggal yang tumpang tindih (todos yang mulai atau berakhir dalam rentang)
- Tanggal null ditangani dengan baik (todos tanpa tanggal jatuh tempo tidak akan cocok dengan filter tanggal)
- Semua tanggal harus dalam format ISO 8601
Perilaku Pencarian
- Pencarian tidak peka huruf besar/kecil
- Mencari di judul dan konten teks
- Pencocokan kata sebagian didukung
- Karakter khusus ditangani dengan tepat
Strategi Paginasi
- Gunakan
skip
danlimit
untuk paginasi berbasis offset - Hitung halaman saat ini:
page = Math.floor(skip / limit) + 1
- Untuk dataset besar, pertimbangkan untuk menggunakan filter untuk mengurangi ukuran hasil
- Selalu periksa
hasNextPage
sebelum meningkatkan skip
Endpoint Terkait
- Buat Rekaman: Gunakan mutasi createTodo untuk membuat rekaman baru
- Perbarui Rekaman: Gunakan mutasi updateTodo untuk memodifikasi rekaman
- Hapus Rekaman: Gunakan mutasi deleteTodo untuk menghapus rekaman
- Daftar Bidang Kustom: Kuery bidang kustom yang tersedia untuk penyaringan
- Daftar Proyek: Kuery proyek yang tersedia untuk penyaringan