Blue의 레코드(할 일)에 리치 텍스트 콘텐츠, 파일 첨부 및 @멘션을 사용하여 댓글을 추가합니다.


댓글 추가

createComment 뮤테이션을 사용하면 Blue의 레코드에 댓글을 추가할 수 있습니다. 댓글은 리치 HTML 콘텐츠, 파일 첨부, @멘션을 지원하며, 활동 피드 및 알림 시스템과 자동으로 통합됩니다.

기본 예제

레코드에 간단한 텍스트 댓글을 추가합니다:

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
    }
  }
}

고급 예제

리치 포맷팅, 이미지 및 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
  }
}

입력 매개변수

CreateCommentInput

매개변수 유형 필수 설명
html String! ✅ 예 댓글의 HTML 콘텐츠 (보안을 위해 정리됩니다)
text String! ✅ 예 댓글 콘텐츠의 일반 텍스트 버전
category CommentCategory! ✅ 예 댓글이 달리는 엔터티의 유형 (레코드에는 TODO 사용)
categoryId String! ✅ 예 댓글이 달리는 엔터티(레코드)의 ID
tiptap Boolean 아니오 TipTap 편집기 전용 HTML 정리 및 처리 활성화

CommentCategory 값

설명
TODO 레코드/할 일 항목에 대한 댓글
DISCUSSION 토론 스레드에 대한 댓글
STATUS_UPDATE 상태 업데이트에 대한 댓글

응답 필드

뮤테이션은 포괄적인 세부정보가 포함된 Comment 객체를 반환합니다:

필드 유형 설명
id ID! 댓글의 고유 식별자
uid String! 대체 고유 식별자
html String! 댓글의 HTML 콘텐츠
text String! 댓글의 일반 텍스트 버전
category CommentCategory! 댓글이 달린 엔터티의 유형
createdAt DateTime! 댓글이 생성된 시간
updatedAt DateTime! 댓글이 마지막으로 업데이트된 시간
deletedAt DateTime 댓글이 삭제된 시간 (활성인 경우 null)
deletedBy User 댓글을 삭제한 사용자
user User! 댓글을 생성한 사용자
activity Activity 관련 활동 레코드
discussion Discussion 관련 토론 (카테고리가 DISCUSSION인 경우)
statusUpdate StatusUpdate 관련 상태 업데이트 (카테고리가 STATUS_UPDATE인 경우)
todo Todo 관련 레코드 (카테고리가 TODO인 경우)
isRead Boolean 현재 사용자가 이 댓글을 읽었는지 여부
isSeen Boolean 현재 사용자가 이 댓글을 보았는지 여부
aiSummary Boolean 이 댓글이 AI에 의해 생성되었는지 여부

필수 권한

사용자는 레코드에 댓글을 달기 위해 적절한 프로젝트 접근 권한을 가져야 합니다:

접근 수준 댓글 추가 가능
OWNER ✅ 예
ADMIN ✅ 예
MEMBER ✅ 예
CLIENT ✅ 예
COMMENT_ONLY ✅ 예
VIEW_ONLY ❌ 아니오

중요: 사용자는 레코드가 포함된 프로젝트의 구성원이어야 하며 VIEW_ONLY 접근 수준을 가져서는 안 됩니다.

오류 응답

UnauthorizedError

{
  "errors": [{
    "message": "You don't have permission to comment on this record",
    "extensions": {
      "code": "FORBIDDEN"
    }
  }]
}

언제: 사용자가 지정된 레코드/엔터티에 댓글을 달 권한이 없습니다.

ValidationError

{
  "errors": [{
    "message": "Invalid input parameters",
    "extensions": {
      "code": "BAD_USER_INPUT"
    }
  }]
}

언제: 필수 필드가 누락되었거나 잘못된 데이터가 포함되어 있습니다.

CommentNotFoundError

{
  "errors": [{
    "message": "Record not found",
    "extensions": {
      "code": "COMMENT_NOT_FOUND"
    }
  }]
}

언제: 지정된 categoryId가 기존 레코드에 해당하지 않습니다.

UserInputError

{
  "errors": [{
    "message": "Content validation failed",
    "extensions": {
      "code": "BAD_USER_INPUT"
    }
  }]
}

언제: HTML 콘텐츠의 정리가 실패했거나 악성 코드가 포함되어 있습니다.

중요 사항

콘텐츠 처리

  • HTML 정리: 모든 HTML 콘텐츠는 XSS 공격을 방지하기 위해 자동으로 정리됩니다.
  • 파일 추출: HTML에 포함된 이미지 및 첨부 파일은 추출되어 S3에 저장됩니다.
  • TipTap 모드: tiptap: true일 때, TipTap 편집기 콘텐츠에 대한 전문 정리를 사용합니다.
  • @멘션: 댓글에서 사용자 멘션은 자동으로 처리되며 알림을 트리거합니다.

성능 고려 사항

  • 댓글은 자동으로 검색을 위해 인덱싱됩니다.
  • 큰 이미지 첨부 파일은 비동기적으로 처리됩니다.
  • 각 댓글은 프로젝트 타임라인에 대한 활동 레코드를 생성합니다.

부작용

댓글을 추가하면 여러 자동화된 프로세스가 트리거됩니다:

  • 활동 생성: 프로젝트 타임라인에 표시되는 활동 레코드를 생성합니다.
  • 검색 인덱싱: 댓글 콘텐츠가 프로젝트 검색 인덱스에 추가됩니다.
  • 알림: 관련 사용자에게 이메일, 푸시 및 앱 내 알림을 보냅니다.
  • 실시간 업데이트: 댓글이 GraphQL 구독에 게시되어 실시간 업데이트를 제공합니다.
  • 웹훅: 프로젝트에 대해 구성된 경우 외부 웹훅을 트리거합니다.
  • @멘션 처리: 사용자 멘션을 처리하고 대상 알림을 보냅니다.
  • 파일 처리: HTML 콘텐츠에서 포함된 이미지나 파일을 추출하고 처리합니다.

콘텐츠 보안

  • 모든 HTML은 업계 표준 라이브러리를 사용하여 정리됩니다.
  • 파일 업로드는 유형 및 크기에 대해 검증됩니다.
  • 악성 콘텐츠는 자동으로 제거됩니다.
  • 사용자 생성 콘텐츠는 모든 컨텍스트에서 적절하게 이스케이프됩니다.

통합 기능

  • 활동 피드: 댓글은 프로젝트 활동 타임라인에 표시됩니다.
  • 검색: 댓글 콘텐츠는 프로젝트 내에서 검색 가능합니다.
  • 알림: 다양한 댓글 유형에 대한 구성 가능한 알림 기본 설정이 있습니다.
  • 실시간: 댓글은 동일한 레코드를 보는 다른 사용자에게 즉시 표시됩니다.
  • 모바일 지원: 댓글은 모바일 애플리케이션에서 완전히 지원됩니다.

관련 엔드포인트

  • 댓글 목록: 레코드에 대한 기존 댓글을 검색합니다.
  • 댓글 업데이트: 기존 댓글 콘텐츠를 수정합니다.
  • 댓글 삭제: 적절한 권한으로 댓글을 제거합니다.
  • 레코드 목록: 댓글을 달 수 있는 레코드를 찾기 위해 할 일을 검색합니다.

AI 어시스턴트

응답은 AI를 사용하여 생성되며 오류가 포함될 수 있습니다.

어떻게 도와드릴까요?

Blue 또는 이 문서에 대해 궁금한 점이 있으면 무엇이든 물어보세요.

전송하려면 Enter • 새 줄을 추가하려면 Shift+Enter • ⌘I를 눌러 열기