Buat rekaman baru (todo) di Blue dengan bidang kustom opsional, tag, dan penugasan.
Buat Rekaman
Mutasi createTodo memungkinkan Anda untuk membuat rekaman baru di Blue dengan opsi konfigurasi yang komprehensif termasuk bidang kustom, tag, penugasan, dan lainnya. Rekaman dapat dibuat dalam daftar tertentu atau secara otomatis ditempatkan di daftar default.
Contoh Dasar
Buat rekaman sederhana hanya dengan judul:
mutation CreateRecord {
createTodo(
input: {
title: "New Task"
}
) {
id
title
position
}
}
Contoh Lanjutan
Buat rekaman dengan semua opsi yang tersedia:
mutation CreateRecordAdvanced {
createTodo(
input: {
todoListId: "clm4n8qwx000008l0g4oxdqn7"
title: "Product Launch Planning"
placement: TOP
description: "<p>Complete product launch preparation including marketing materials and documentation.</p>"
startedAt: "2025-01-15T09:00:00Z"
duedAt: "2025-02-01T17:00:00Z"
notify: true
assigneeIds: ["user_123", "user_456"]
tags: [
{ id: "tag_existing_123" }
{ title: "Priority", color: "#ff4b4b" }
{ title: "Marketing" }
]
customFields: [
{
customFieldId: "cf_budget_123"
value: "50000 USD"
}
{
customFieldId: "cf_status_456"
value: "In Progress"
}
]
checklists: [
{
title: "Pre-launch Checklist"
position: 1
}
]
}
) {
id
uid
title
position
startedAt
duedAt
todoList {
id
title
}
users {
id
fullName
}
tags {
id
title
color
}
}
}
Parameter Input
CreateTodoInput
Parameter | Tipe | Diperlukan | Deskripsi |
---|---|---|---|
todoListId |
String | Tidak | ID daftar todo untuk menambahkan rekaman. Jika tidak disediakan, menggunakan daftar todo pertama dalam proyek |
title |
String! | ✅ Ya | Judul rekaman (diperlukan) |
position |
Float | Tidak | Posisi kustom dalam daftar. Jika tidak disediakan, menggunakan parameter penempatan |
placement |
CreateTodoInputPlacement | Tidak | Di mana menempatkan rekaman jika posisi tidak ditentukan (ATAS atau BAWAH) |
startedAt |
DateTime | Tidak | Tanggal/waktu mulai untuk rekaman |
duedAt |
DateTime | Tidak | Tanggal/waktu jatuh tempo untuk rekaman |
notify |
Boolean | Tidak | Apakah mengirim notifikasi untuk pembuatan rekaman ini |
description |
String | Tidak | Konten deskripsi HTML (akan disanitasi) |
assigneeIds |
[String!] | Tidak | Array ID pengguna untuk ditugaskan ke rekaman ini |
checklists |
[CreateChecklistWithoutTodoInput!] | Tidak | Array checklist untuk dibuat dengan rekaman |
customFields |
[CreateTodoInputCustomField] | Tidak | Array nilai bidang kustom |
tags |
[CreateTodoTagInput!] | Tidak | Array tag untuk dilampirkan ke rekaman |
Nilai CreateTodoInputPlacement
Nilai | Deskripsi |
---|---|
TOP |
Tempatkan di bagian atas daftar (posisi tertinggi) |
BOTTOM |
Tempatkan di bagian bawah daftar (posisi terendah) |
CreateTodoTagInput
Parameter | Tipe | Diperlukan | Deskripsi |
---|---|---|---|
id |
String | Tidak* | ID tag yang ada untuk dihubungkan |
title |
String | Tidak* | Judul tag (membuat baru jika tidak ada) |
color |
String | Tidak | Warna hex untuk tag baru (default #4a9fff) |
*Catatan: Anda harus memberikan baik id
(untuk tag yang ada) ATAU title
(untuk membuat/mencari berdasarkan judul)
CreateTodoInputCustomField
Parameter | Tipe | Diperlukan | Deskripsi |
---|---|---|---|
customFieldId |
String | Tidak | ID bidang kustom |
value |
String | Tidak | Nilai untuk bidang kustom (lihat panduan format di bawah) |
CreateChecklistWithoutTodoInput
Parameter | Tipe | Diperlukan | Deskripsi |
---|---|---|---|
title |
String! | ✅ Ya | Judul checklist |
position |
Float | Tidak | Posisi checklist dalam rekaman |
Format Nilai Bidang Kustom
Saat mengatur nilai bidang kustom, gunakan format ini berdasarkan tipe bidang:
Tipe Bidang | Format | Contoh |
---|---|---|
CHECKBOX |
"true", "1", or "checked" for checked | "true" |
COUNTRY |
Country name or ISO code | "United States" or "US" |
CURRENCY |
Amount with optional currency | "50000 USD" |
DATE |
YYYY-MM-DD or date range | "2025-01-15" or "2025-01-15,2025-01-20" |
NUMBER |
Numeric value | "42" |
PERCENT |
Numeric value (% optional) | "75" or "75%" |
RATING |
Numeric value within range | "4" (if max is 5) |
PHONE |
International phone format | "+1234567890" |
SELECT_SINGLE |
Custom field option ID | "option_123" |
SELECT_MULTI |
Comma-separated option IDs | "option_1,option_2" |
LOCATION |
Latitude,longitude | "40.7128,-74.0060" |
EMAIL |
Valid email address | "user@example.com" |
URL |
Valid URL | "https://example.com" |
TEXT |
Plain text value | "Any text content" |
Bidang Respons
Mutasi mengembalikan objek Todo dengan detail rekaman yang komprehensif:
Bidang | Tipe | Deskripsi |
---|---|---|
id |
String! | Pengidentifikasi unik untuk rekaman |
uid |
String! | Pengidentifikasi unik alternatif |
title |
String! | Judul rekaman |
position |
Float! | Posisi dalam daftar |
done |
Boolean! | Status penyelesaian |
startedAt |
DateTime | Tanggal/waktu mulai |
duedAt |
DateTime | Tanggal/waktu jatuh tempo |
todoList |
TodoList | Detail daftar todo yang terkait |
users |
[User!] | Pengguna yang ditugaskan |
tags |
[Tag!] | Tag yang terkait |
checklists |
[Checklist!] | Checklist yang terkait |
customFields |
[CustomFieldValue!] | Nilai bidang kustom |
Izin yang Diperlukan
Pengguna harus memiliki akses proyek yang sesuai untuk membuat rekaman:
Tingkat Akses | Dapat Membuat Rekaman |
---|---|
OWNER |
✅ Ya |
ADMIN |
✅ Ya |
MEMBER |
✅ Ya |
CLIENT |
✅ Ya |
COMMENT_ONLY |
❌ Tidak |
VIEW_ONLY |
❌ Tidak |
Mutasi ini memerlukan tingkat akses proyek pengguna untuk menjadi OWNER
, ADMIN
, MEMBER
, atau CLIENT
. Pengguna dengan peran VIEW_ONLY
atau COMMENT_ONLY
tidak dapat membuat rekaman.
Respons Kesalahan
ProjectNotFoundError
{
"errors": [{
"message": "Project was not found.",
"extensions": {
"code": "PROJECT_NOT_FOUND"
}
}]
}
Kapan: Tidak ada konteks proyek yang tersedia untuk pengguna.
TodoListCreateTodoLimitError
{
"errors": [{
"message": "Todo list has reached the maximum number of todos.",
"extensions": {
"code": "TODO_LIST_CREATE_TODO_LIMIT_ERROR"
}
}]
}
Kapan: Daftar todo sudah berisi 100.000 rekaman (batas maksimum).
TodoListNotFoundError
{
"errors": [{
"message": "Todo list was not found.",
"extensions": {
"code": "TODO_LIST_NOT_FOUND"
}
}]
}
Kapan: todoListId
yang ditentukan tidak ada atau pengguna tidak memiliki akses.
CustomFieldValueParseError
{
"errors": [{
"message": "Invalid phone number format",
"extensions": {
"code": "CUSTOM_FIELD_VALUE_PARSE_ERROR"
}
}]
}
Kapan: Nilai bidang kustom gagal validasi (misalnya, telepon tidak valid, penilaian di luar jangkauan).
Catatan Penting
Kinerja
- Setiap daftar todo dapat berisi hingga 100.000 rekaman
- Membuat rekaman memicu beberapa proses latar belakang (webhook, otomatisasi, pengindeksan pencarian)
- Operasi batch lebih efisien daripada membuat rekaman satu per satu
Logika Bisnis
- Penanganan Posisi: Posisi default adalah 65535.0 ketika
position
maupunplacement
tidak ditentukan - Logika Tanggal:
- Jika hanya
duedAt
yang disediakan,startedAt
diatur ke awal hari itu - Jika hanya
startedAt
yang disediakan,duedAt
diatur ke nilai yang sama
- Jika hanya
- Pembuatan Tag: Tag baru secara otomatis dibuat jika tidak ada dengan judul/warnanya yang ditentukan
- Pemilihan Daftar: Jika tidak ada
todoListId
yang disediakan, daftar todo pertama dalam proyek akan digunakan
Efek Samping
Membuat rekaman memicu:
- Pembuatan entri log aktivitas
- Notifikasi webhook
- Pembaruan indeks pencarian
- Eksekusi aturan otomatisasi (jika dikonfigurasi)
- Notifikasi email/push (jika
notify: true
) - Perhitungan bidang kustom formula dan durasi waktu
- Pembaruan analitik dan grafik
Endpoint Terkait
- Daftar Rekaman: Kuery todos untuk mengambil rekaman yang ada
- Perbarui Rekaman: Gunakan mutasi updateTodo untuk memodifikasi rekaman
- Daftar Bidang Kustom: Kuery untuk mendapatkan ID bidang kustom yang tersedia
- Daftar Tag: Kuery untuk mendapatkan ID tag yang ada
- Daftar Daftar Todo: Kuery untuk mendapatkan ID daftar todo yang tersedia