Dodaj komentarze do rekordów (zadań) w Blue z treścią w formacie rich text, załącznikami plików i @wzmiankami.
Dodaj komentarz
Mutacja createComment pozwala na dodawanie komentarzy do rekordów w Blue. Komentarze obsługują treść w formacie HTML, załączniki plików, @wzmianki i są automatycznie integrowane z systemem aktywności i powiadomień.
Podstawowy przykład
Dodaj prosty komentarz tekstowy do rekordu:
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
}
}
}
Zaawansowany przykład
Dodaj komentarz z bogatym formatowaniem, obrazami i przetwarzaniem edytora 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
}
}
Parametry wejściowe
CreateCommentInput
Parametr | Typ | Wymagany | Opis |
---|---|---|---|
html |
String! | ✅ Tak | Treść HTML komentarza (zostanie oczyszczona dla bezpieczeństwa) |
text |
String! | ✅ Tak | Wersja tekstowa treści komentarza |
category |
CommentCategory! | ✅ Tak | Typ encji, do której odnosi się komentarz (użyj TODO dla rekordów) |
categoryId |
String! | ✅ Tak | ID encji (rekordu), do której odnosi się komentarz |
tiptap |
Boolean | Nie | Włącz oczyszczanie i przetwarzanie HTML specyficzne dla edytora TipTap |
Wartości CommentCategory
Wartość | Opis |
---|---|
TODO |
Komentarz do rekordu/zadania |
DISCUSSION |
Komentarz do wątku dyskusyjnego |
STATUS_UPDATE |
Komentarz do aktualizacji statusu |
Pola odpowiedzi
Mutacja zwraca obiekt Comment z szczegółowymi informacjami:
Pole | Typ | Opis |
---|---|---|
id |
ID! | Unikalny identyfikator komentarza |
uid |
String! | Alternatywny unikalny identyfikator |
html |
String! | Treść HTML komentarza |
text |
String! | Wersja tekstowa komentarza |
category |
CommentCategory! | Typ encji, do której odnosi się komentarz |
createdAt |
DateTime! | Kiedy komentarz został utworzony |
updatedAt |
DateTime! | Kiedy komentarz został ostatnio zaktualizowany |
deletedAt |
DateTime | Kiedy komentarz został usunięty (null, jeśli aktywny) |
deletedBy |
User | Użytkownik, który usunął komentarz |
user |
User! | Użytkownik, który utworzył komentarz |
activity |
Activity | Powiązany rekord aktywności |
discussion |
Discussion | Powiązana dyskusja (jeśli kategoria to DYSKUSJA) |
statusUpdate |
StatusUpdate | Powiązana aktualizacja statusu (jeśli kategoria to AKTUALIZACJA_STATUSU) |
todo |
Todo | Powiązany rekord (jeśli kategoria to ZADANIE) |
isRead |
Boolean | Czy bieżący użytkownik przeczytał ten komentarz |
isSeen |
Boolean | Czy bieżący użytkownik widział ten komentarz |
aiSummary |
Boolean | Czy ten komentarz został wygenerowany przez AI |
Wymagane uprawnienia
Użytkownicy muszą mieć odpowiedni dostęp do projektu, aby komentować rekordy:
Poziom dostępu | Może dodawać komentarze |
---|---|
OWNER |
✅ Tak |
ADMIN |
✅ Tak |
MEMBER |
✅ Tak |
CLIENT |
✅ Tak |
COMMENT_ONLY |
✅ Tak |
VIEW_ONLY |
❌ Nie |
Ważne: Użytkownik musi być członkiem projektu, który zawiera rekord i nie może mieć poziomu dostępu VIEW_ONLY
.
Odpowiedzi błędów
UnauthorizedError
{
"errors": [{
"message": "You don't have permission to comment on this record",
"extensions": {
"code": "FORBIDDEN"
}
}]
}
Kiedy: Użytkownik nie ma uprawnień do komentowania określonego rekordu/encji.
ValidationError
{
"errors": [{
"message": "Invalid input parameters",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Kiedy: Brak wymaganych pól lub zawierają nieprawidłowe dane.
CommentNotFoundError
{
"errors": [{
"message": "Record not found",
"extensions": {
"code": "COMMENT_NOT_FOUND"
}
}]
}
Kiedy: Określony categoryId
nie odpowiada istniejącemu rekordowi.
UserInputError
{
"errors": [{
"message": "Content validation failed",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Kiedy: Treść HTML nie przeszła oczyszczania lub zawiera złośliwy kod.
Ważne uwagi
Przetwarzanie treści
- Oczyszczanie HTML: Cała treść HTML jest automatycznie oczyszczana, aby zapobiec atakom XSS
- Ekstrakcja plików: Obrazy i załączniki osadzone w HTML są ekstraktowane i przechowywane w S3
- Tryb TipTap: Gdy
tiptap: true
, używa specjalistycznego oczyszczania dla treści edytora TipTap - @Wzmianki: Wzmianki użytkowników w komentarzach są automatycznie przetwarzane i wyzwalają powiadomienia
Rozważania dotyczące wydajności
- Komentarze są automatycznie indeksowane do wyszukiwania
- Duże załączniki obrazów są przetwarzane asynchronicznie
- Każdy komentarz tworzy rekord aktywności dla osi czasu projektu
Efekty uboczne
Dodanie komentarza uruchamia kilka zautomatyzowanych procesów:
- Tworzenie aktywności: Tworzy rekord aktywności widoczny w osi czasu projektu
- Indeksowanie wyszukiwania: Treść komentarza jest dodawana do indeksu wyszukiwania projektu
- Powiadomienia: Wysyła powiadomienia e-mail, push i w aplikacji do odpowiednich użytkowników
- Aktualizacje w czasie rzeczywistym: Publikuje komentarz do subskrypcji GraphQL dla aktualizacji na żywo
- Webhooki: Uruchamia zewnętrzny webhook, jeśli jest skonfigurowany dla projektu
- Przetwarzanie @Wzmianek: Przetwarza wzmianki użytkowników i wysyła ukierunkowane powiadomienia
- Przetwarzanie plików: Ekstrahuje i przetwarza wszelkie osadzone obrazy lub pliki z treści HTML
Bezpieczeństwo treści
- Cały HTML jest oczyszczany przy użyciu standardowych bibliotek branżowych
- Przesyłanie plików jest weryfikowane pod kątem typu i rozmiaru
- Złośliwe treści są automatycznie usuwane
- Treści generowane przez użytkowników są poprawnie kodowane we wszystkich kontekstach
Funkcje integracji
- Kanał aktywności: Komentarze pojawiają się w osi czasu aktywności projektu
- Wyszukiwanie: Treść komentarza jest wyszukiwalna w projekcie
- Powiadomienia: Konfigurowalne preferencje powiadomień dla różnych typów komentarzy
- W czasie rzeczywistym: Komentarze pojawiają się natychmiast dla innych użytkowników przeglądających ten sam rekord
- Wsparcie mobilne: Komentarze są w pełni wspierane w aplikacjach mobilnych
Powiązane punkty końcowe
- Lista komentarzy: Zapytanie o komentarze w celu pobrania istniejących komentarzy do rekordów
- Aktualizacja komentarza: Modyfikacja istniejącej treści komentarza
- Usunięcie komentarza: Usunięcie komentarzy z odpowiednimi uprawnieniami
- Lista rekordów: Zapytanie o zadania w celu znalezienia rekordów, do których można dodać komentarze