Tambahkan komentar ke catatan (todo) di Blue dengan konten teks kaya, lampiran file, dan @sebutan.
Tambah Komentar
Mutasi createComment memungkinkan Anda untuk menambahkan komentar ke catatan di Blue. Komentar mendukung konten HTML yang kaya, lampiran file, @sebutan, dan secara otomatis terintegrasi dengan umpan aktivitas dan sistem notifikasi.
Contoh Dasar
Tambahkan komentar teks sederhana ke sebuah catatan:
mutation AddComment {
createComment(
input: {
html: "<p>This task is progressing well!</p>"
text: "This task is progressing well!"
category: TODO
categoryId: "clm4n8qwx000008l0g4oxdqn7"
}
) {
id
html
text
createdAt
user {
id
name
}
}
}
Contoh Lanjutan
Tambahkan komentar dengan format kaya, gambar, dan pemrosesan editor TipTap:
mutation AddCommentAdvanced {
createComment(
input: {
html: "<p>Here's my <strong>feedback</strong> on this task:</p><ul><li>Great progress on the design</li><li>Need to review the API integration</li></ul><p>Attaching screenshot:</p><img src='data:image/png;base64,iVBOR...' />"
text: "Here's my feedback on this task: - Great progress on the design - Need to review the API integration Attaching screenshot:"
category: TODO
categoryId: "clm4n8qwx000008l0g4oxdqn7"
tiptap: true
}
) {
id
html
text
createdAt
user {
id
name
avatar
}
activity {
id
}
isRead
isSeen
}
}
Parameter Input
CreateCommentInput
Parameter | Tipe | Diperlukan | Deskripsi |
---|---|---|---|
html |
String! | ✅ Ya | Konten HTML dari komentar (akan disanitasi untuk keamanan) |
text |
String! | ✅ Ya | Versi teks biasa dari konten komentar |
category |
CommentCategory! | ✅ Ya | Tipe entitas yang dikomentari (gunakan TODO untuk catatan) |
categoryId |
String! | ✅ Ya | ID dari entitas (catatan) yang dikomentari |
tiptap |
Boolean | Tidak | Aktifkan sanitasi dan pemrosesan HTML khusus editor TipTap |
Nilai CommentCategory
Nilai | Deskripsi |
---|---|
TODO |
Komentar pada item catatan/todo |
DISCUSSION |
Komentar pada thread diskusi |
STATUS_UPDATE |
Komentar pada pembaruan status |
Bidang Respons
Mutasi mengembalikan objek Komentar dengan detail komprehensif:
Bidang | Tipe | Deskripsi |
---|---|---|
id |
ID! | Pengidentifikasi unik untuk komentar |
uid |
String! | Pengidentifikasi unik alternatif |
html |
String! | Konten HTML dari komentar |
text |
String! | Versi teks biasa dari komentar |
category |
CommentCategory! | Tipe entitas yang dikomentari |
createdAt |
DateTime! | Waktu komentar dibuat |
updatedAt |
DateTime! | Waktu komentar terakhir diperbarui |
deletedAt |
DateTime | Waktu komentar dihapus (null jika aktif) |
deletedBy |
User | Pengguna yang menghapus komentar |
user |
User! | Pengguna yang membuat komentar |
activity |
Activity | Catatan aktivitas terkait |
discussion |
Discussion | Diskusi terkait (jika kategori adalah DISKUSI) |
statusUpdate |
StatusUpdate | Pembaruan status terkait (jika kategori adalah PEMBARUAN_STATUS) |
todo |
Todo | Catatan terkait (jika kategori adalah TODO) |
isRead |
Boolean | Apakah pengguna saat ini telah membaca komentar ini |
isSeen |
Boolean | Apakah pengguna saat ini telah melihat komentar ini |
aiSummary |
Boolean | Apakah komentar ini dihasilkan oleh AI |
Izin yang Diperlukan
Pengguna harus memiliki akses proyek yang sesuai untuk mengomentari catatan:
Tingkat Akses | Dapat Menambahkan Komentar |
---|---|
OWNER |
✅ Ya |
ADMIN |
✅ Ya |
MEMBER |
✅ Ya |
CLIENT |
✅ Ya |
COMMENT_ONLY |
✅ Ya |
VIEW_ONLY |
❌ Tidak |
Penting: Pengguna harus menjadi anggota proyek yang berisi catatan dan TIDAK boleh memiliki tingkat akses VIEW_ONLY
.
Respons Kesalahan
UnauthorizedError
{
"errors": [{
"message": "You don't have permission to comment on this record",
"extensions": {
"code": "FORBIDDEN"
}
}]
}
Kapan: Pengguna tidak memiliki izin untuk mengomentari catatan/entitas yang ditentukan.
ValidationError
{
"errors": [{
"message": "Invalid input parameters",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Kapan: Bidang yang diperlukan hilang atau mengandung data yang tidak valid.
CommentNotFoundError
{
"errors": [{
"message": "Record not found",
"extensions": {
"code": "COMMENT_NOT_FOUND"
}
}]
}
Kapan: categoryId
yang ditentukan tidak sesuai dengan catatan yang ada.
UserInputError
{
"errors": [{
"message": "Content validation failed",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Kapan: Konten HTML gagal disanitasi atau mengandung kode berbahaya.
Catatan Penting
Pemrosesan Konten
- Sanitasi HTML: Semua konten HTML secara otomatis disanitasi untuk mencegah serangan XSS
- Ekstraksi File: Gambar dan lampiran yang disematkan dalam HTML diekstraksi dan disimpan di S3
- Mode TipTap: Ketika
tiptap: true
, menggunakan sanitasi khusus untuk konten editor TipTap - @Sebut: Sebutan pengguna dalam komentar secara otomatis diproses dan memicu notifikasi
Pertimbangan Kinerja
- Komentar diindeks untuk pencarian secara otomatis
- Lampiran gambar besar diproses secara asinkron
- Setiap komentar membuat catatan aktivitas untuk garis waktu proyek
Efek Samping
Menambahkan komentar memicu beberapa proses otomatis:
- Pembuatan Aktivitas: Membuat catatan aktivitas yang terlihat di garis waktu proyek
- Pengindeksan Pencarian: Konten komentar ditambahkan ke indeks pencarian proyek
- Notifikasi: Mengirim email, push, dan notifikasi dalam aplikasi kepada pengguna yang relevan
- Pembaruan Waktu Nyata: Menerbitkan komentar ke langganan GraphQL untuk pembaruan langsung
- Webhook: Memicu webhook eksternal jika dikonfigurasi untuk proyek
- Pemrosesan @Sebut: Memproses sebutan pengguna dan mengirim notifikasi yang ditargetkan
- Pemrosesan File: Mengekstrak dan memproses gambar atau file yang disematkan dari konten HTML
Keamanan Konten
- Semua HTML disanitasi menggunakan pustaka standar industri
- Unggahan file divalidasi untuk tipe dan ukuran
- Konten berbahaya secara otomatis dihapus
- Konten yang dihasilkan pengguna di-escape dengan benar di semua konteks
Fitur Integrasi
- Umpan Aktivitas: Komentar muncul di garis waktu aktivitas proyek
- Pencarian: Konten komentar dapat dicari dalam proyek
- Notifikasi: Preferensi notifikasi yang dapat dikonfigurasi untuk berbagai jenis komentar
- Waktu Nyata: Komentar muncul secara instan untuk pengguna lain yang melihat catatan yang sama
- Dukungan Seluler: Komentar sepenuhnya didukung dalam aplikasi seluler
Endpoint Terkait
- Daftar Komentar: Kuery komentar untuk mengambil komentar yang ada pada catatan
- Perbarui Komentar: Memodifikasi konten komentar yang ada
- Hapus Komentar: Menghapus komentar dengan otorisasi yang tepat
- Daftar Catatan: Kuery todo untuk menemukan catatan yang dapat dikomentari