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"
}
}]
}
모범 사례
- 페이지네이션 사용: 활동 피드는 클 수 있으므로 항상
first
매개변수를 사용하세요. - 프로젝트별 필터링: 회사 전체 활동 피드는 압도적일 수 있습니다.
- 실시간 업데이트: 라이브 활동 피드를 위해 구독을 사용하세요.
- 날짜 필터링: 역사적 활동 분석을 위해 날짜 범위를 사용하세요.
- 카테고리 필터링: 집중된 피드를 위해 특정 활동 유형으로 필터링하세요.
- 사용자 필터링:
userIds
를 사용하여 특정 팀원의 활동을 추적하세요.
중요 사항
- 활동은 자동으로 생성되며 API를 통해 수동으로 생성할 수 없습니다.
- 활동 텍스트는 풍부한 표시를 위해 HTML 형식을 사용합니다.
text
필드는html
로 대체되었습니다.- 활동은 영구적으로 저장되며 전체 감사 추적을 제공합니다.
- 실시간 구독은 WebSocket 연결 인증이 필요합니다.