Blue API를 사용하여 프로젝트 활동 피드를 검색하고 모니터링합니다.


프로젝트 활동 검색

activityList 쿼리는 프로젝트 및 회사에 대한 포괄적인 활동 피드에 접근할 수 있게 해줍니다. 사용자가 할 일을 만들거나, 댓글을 달거나, 프로젝트를 변경하는 등의 작업을 수행할 때 활동이 자동으로 생성됩니다.

기본 예제

query ProjectActivity {
  activityList(
    projectId: "your-project-id"
    first: 20
    orderBy: createdAt_DESC
  ) {
    activities {
      id
      category
      html
      createdAt
      createdBy {
        id
        name
        email
      }
      project {
        id
        name
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
    totalCount
  }
}

필터링이 포함된 고급 예제

query FilteredActivity {
  activityList(
    companyId: "your-company-id"
    categories: [CREATE_TODO, MARK_TODO_AS_COMPLETE, CREATE_COMMENT]
    userIds: ["user1-id", "user2-id"]
    startDate: "2024-01-01T00:00:00Z"
    endDate: "2024-12-31T23:59:59Z"
    first: 50
    orderBy: createdAt_DESC
  ) {
    activities {
      id
      uid
      category
      html
      createdAt
      updatedAt
      createdBy {
        id
        name
        email
      }
      affectedBy {
        id
        name
      }
      todo {
        id
        title
      }
      comment {
        id
        text
      }
      project {
        id
        name
        slug
      }
    }
    pageInfo {
      hasNextPage
      hasPreviousPage
      startCursor
      endCursor
    }
    totalCount
  }
}

입력 매개변수

activityList 쿼리

매개변수 유형 필수 설명
companyId String 아니오 회사 ID 또는 슬러그로 활동 필터링
projectId String 아니오 프로젝트 ID 또는 슬러그로 활동 필터링
userId String 아니오 특정 사용자로 활동 필터링
userIds [String!] 아니오 여러 사용자로 활동 필터링
tagIds [String!] 아니오 할 일 태그로 활동 필터링
categories [ActivityCategory!] 아니오 특정 활동 유형으로 필터링
startDate DateTime 아니오 이 날짜부터 활동 필터링
endDate DateTime 아니오 이 날짜까지 활동 필터링
skip Int 아니오 이 수의 레코드를 건너뜀 (오프셋 페이지네이션)
first Int 아니오 첫 N개의 레코드 반환 (커서 페이지네이션)
last Int 아니오 마지막 N개의 레코드 반환 (커서 페이지네이션)
after String 아니오 이 커서 이후의 레코드 반환
before String 아니오 이 커서 이전의 레코드 반환
orderBy ActivityOrderByInput 아니오 결과의 정렬 순서

ActivityCategory 값

시스템은 다양한 유형의 활동을 자동으로 추적합니다:

카테고리 설명
CREATE_TODO 새로운 할 일/작업이 생성되었습니다
MARK_TODO_AS_COMPLETE 할 일이 완료로 표시되었습니다
CREATE_COMMENT 댓글이 추가되었습니다
CREATE_DISCUSSION 논의가 시작되었습니다
CREATE_STATUS_UPDATE 상태 업데이트가 게시되었습니다
CREATE_TODO_LIST 새로운 할 일 목록이 생성되었습니다
MOVE_TODO 할 일이 목록 간에 이동되었습니다
COPY_TODO 할 일이 복사되었습니다
ADD_USER_TO_PROJECT 사용자가 프로젝트에 추가되었습니다
REMOVE_USER_FROM_PROJECT 사용자가 프로젝트에서 제거되었습니다
ARCHIVE_PROJECT 프로젝트가 보관되었습니다
UNARCHIVE_PROJECT 프로젝트가 보관 해제되었습니다
CREATE_INVITATION 사용자가 초대되었습니다
ACCEPT_INVITATION 초대가 수락되었습니다
CREATE_CUSTOM_FIELD 사용자 정의 필드가 생성되었습니다
RECEIVE_FORM 양식 제출이 수신되었습니다

ActivityOrderByInput 값

설명
createdAt_DESC 가장 최근 것이 먼저 (기본값)
createdAt_ASC 가장 오래된 것이 먼저
updatedAt_DESC 가장 최근에 업데이트된 것이 먼저
updatedAt_ASC 가장 덜 최근에 업데이트된 것이 먼저
category_ASC 카테고리별 알파벳 순서
category_DESC 카테고리별 역 알파벳 순서

응답 필드

활동 유형

필드 유형 설명
id ID! 활동에 대한 고유 식별자
uid String! 대체 고유 식별자
category ActivityCategory! 발생한 활동의 유형
html String! 활동에 대한 풍부한 HTML 설명
createdAt DateTime! 활동이 발생한 시간
updatedAt DateTime! 활동이 마지막으로 업데이트된 시간
createdBy User! 작업을 수행한 사용자
affectedBy User 작업의 영향을 받은 사용자
company Company 관련 회사
project Project 관련 프로젝트
todo Todo 관련 할 일 (해당하는 경우)
todoList TodoList 관련 할 일 목록 (해당하는 경우)
comment Comment 관련 댓글 (해당하는 경우)
discussion Discussion 관련 논의 (해당하는 경우)
statusUpdate StatusUpdate 관련 상태 업데이트 (해당하는 경우)
metadata String 추가 활동 메타데이터

ActivityList 응답

필드 유형 설명
activities [Activity!]! 활동 기록 배열
pageInfo PageInfo! 페이지네이션 정보
totalCount Int! 필터에 맞는 활동의 총 수

실시간 활동 업데이트

subscribeToActivity 구독을 사용하여 활동 변경 사항을 구독하세요:

subscription ActivityUpdates($companyId: String!, $projectId: String) {
  subscribeToActivity(companyId: $companyId, projectId: $projectId) {
    mutation
    node {
      id
      category
      html
      createdAt
      createdBy {
        id
        name
        email
      }
      project {
        id
        name
      }
    }
  }
}

구독 매개변수

매개변수 유형 필수 설명
companyId String 아니오 회사 전체 활동 구독
projectId String 아니오 특정 프로젝트 활동 구독

구독은 다음과 같은 알림을 제공합니다:

  • ACTIVITY_CREATED - 새로운 활동
  • ACTIVITY_UPDATED - 수정된 활동
  • ACTIVITY_DELETED - 제거된 활동

필터링 및 개인 정보 보호

자동 필터링

활동 피드는 다음을 기반으로 결과를 자동으로 필터링합니다:

  • 프로젝트 설정: 활동 추적이 활성화된 프로젝트의 활동만 표시
  • 사용자 권한: 서로 다른 사용자 역할이 서로 다른 활동 유형을 봄
  • 프로젝트 멤버십: 사용자는 자신이 접근할 수 있는 프로젝트의 활동만 봄
  • 회사 멤버십: 활동은 사용자의 회사에 국한됨

개인 정보 보호 고려 사항

  • CLIENT 역할 사용자는 특정 관리 활동에 대한 제한된 가시성을 가짐
  • 활동은 프로젝트 수준의 개인 정보 보호 설정을 준수함
  • 민감한 작업은 공개 활동을 생성하지 않을 수 있음

오류 응답

잘못된 프로젝트/회사

{
  "errors": [{
    "message": "Project not found",
    "extensions": {
      "code": "NOT_FOUND"
    }
  }]
}

권한 거부

{
  "errors": [{
    "message": "You do not have permission to view activities for this project",
    "extensions": {
      "code": "FORBIDDEN"
    }
  }]
}

잘못된 날짜 범위

{
  "errors": [{
    "message": "Start date must be before end date",
    "extensions": {
      "code": "BAD_USER_INPUT"
    }
  }]
}

모범 사례

  1. 페이지네이션 사용: 활동 피드는 클 수 있으므로 항상 first 매개변수를 사용하세요.
  2. 프로젝트별 필터링: 회사 전체 활동 피드는 압도적일 수 있습니다.
  3. 실시간 업데이트: 라이브 활동 피드를 위해 구독을 사용하세요.
  4. 날짜 필터링: 역사적 활동 분석을 위해 날짜 범위를 사용하세요.
  5. 카테고리 필터링: 집중된 피드를 위해 특정 활동 유형으로 필터링하세요.
  6. 사용자 필터링: userIds를 사용하여 특정 팀원의 활동을 추적하세요.

중요 사항

  • 활동은 자동으로 생성되며 API를 통해 수동으로 생성할 수 없습니다.
  • 활동 텍스트는 풍부한 표시를 위해 HTML 형식을 사용합니다.
  • text 필드는 html로 대체되었습니다.
  • 활동은 영구적으로 저장되며 전체 감사 추적을 제공합니다.
  • 실시간 구독은 WebSocket 연결 인증이 필요합니다.

AI 어시스턴트

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

어떻게 도와드릴까요?

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

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