pages

Sentivex Incidents Ticket API

GET/api/pages

프로젝트에 속한 Wiki/문서 페이지 컬렉션을 다룬다.

API 라우트: /api/pages 프로젝트에 속한 Wiki/문서 페이지 컬렉션을 다룬다. GET — projectId 쿼리 파라미터로 특정 프로젝트의 페이지 목록을 반환. position ASC 정렬로 사이드바 트리 표시 순서를 유지. 커서 기반 페이지네이션 지원(limit + cursor 쿼리 파라미터). 권한: 해당 프로젝트 멤버. POST — 새 페이지를 생성한다. slug 는 제목에서 자동 생성(영문 소문자·숫자·한글·하이픈, 최대 200자). content 는 sanitizeRichHtml 로 XSS 정제 후 저장. 권한: 해당 프로젝트 멤버. 부작용: activity_log 기록 + SSE 'page.created' 이벤트 발행. @author jijuta ([email protected]) @since 2026-05-03 @updated 2026-06-07 — JSDoc 표준(@author/@since/@param 등) 적용

Responses

200 성공401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X GET https://sit.in-bridge.com/api/pages \
  -H "Authorization: Bearer $TOKEN"
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/pages", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${token}`
  }
});
const data = await res.json();
POST/api/pages

프로젝트에 속한 Wiki/문서 페이지 컬렉션을 다룬다.

API 라우트: /api/pages 프로젝트에 속한 Wiki/문서 페이지 컬렉션을 다룬다. GET — projectId 쿼리 파라미터로 특정 프로젝트의 페이지 목록을 반환. position ASC 정렬로 사이드바 트리 표시 순서를 유지. 커서 기반 페이지네이션 지원(limit + cursor 쿼리 파라미터). 권한: 해당 프로젝트 멤버. POST — 새 페이지를 생성한다. slug 는 제목에서 자동 생성(영문 소문자·숫자·한글·하이픈, 최대 200자). content 는 sanitizeRichHtml 로 XSS 정제 후 저장. 권한: 해당 프로젝트 멤버. 부작용: activity_log 기록 + SSE 'page.created' 이벤트 발행. @author jijuta ([email protected]) @since 2026-05-03 @updated 2026-06-07 — JSDoc 표준(@author/@since/@param 등) 적용

Request body

projectIdstring<uuid>required
titlestringrequired
contentstring
parentIdstring<uuid>

Responses

200 성공400 입력 검증 실패(zod)401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X POST https://sit.in-bridge.com/api/pages \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"00000000-0000-0000-0000-000000000000","title":"string","content":"string","parentId":"00000000-0000-0000-0000-000000000000"}'
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/pages", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${token}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "projectId": "00000000-0000-0000-0000-000000000000",
    "title": "string",
    "content": "string",
    "parentId": "00000000-0000-0000-0000-000000000000"
  })
});
const data = await res.json();
GET/api/pages/{pageId}

단일 페이지(Wiki/문서) 리소스를 CRUD 한다.

API 라우트: /api/pages/[pageId] 단일 페이지(Wiki/문서) 리소스를 CRUD 한다. GET — 특정 페이지의 전체 데이터를 반환. 권한: 해당 페이지가 속한 프로젝트의 멤버여야 함. PATCH — 페이지 제목·본문·아이콘·부모·순서를 부분 업데이트. 본문 또는 제목이 바뀔 경우 자동으로 이전 스냅샷을 page_versions 에 저장(버전 이력). 권한: 프로젝트 멤버, HTML 내용은 sanitizeRichHtml 로 XSS 소독 후 저장. 부작용: activity_log 기록 + SSE 이벤트 발행. DELETE — 페이지를 DB에서 영구 삭제(소프트 삭제 없음). 권한: 프로젝트 멤버. 부작용: activity_log 기록 + SSE 이벤트 발행. @author jijuta ([email protected]) @since 2026-05-03 @updated 2026-06-07 — JSDoc 표준(@author/@since/@param 등) 적용

Path parameters

pageIdstringrequired

Responses

200 성공401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X GET https://sit.in-bridge.com/api/pages/{pageId} \
  -H "Authorization: Bearer $TOKEN"
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/pages/{pageId}", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${token}`
  }
});
const data = await res.json();
PATCH/api/pages/{pageId}

단일 페이지(Wiki/문서) 리소스를 CRUD 한다.

API 라우트: /api/pages/[pageId] 단일 페이지(Wiki/문서) 리소스를 CRUD 한다. GET — 특정 페이지의 전체 데이터를 반환. 권한: 해당 페이지가 속한 프로젝트의 멤버여야 함. PATCH — 페이지 제목·본문·아이콘·부모·순서를 부분 업데이트. 본문 또는 제목이 바뀔 경우 자동으로 이전 스냅샷을 page_versions 에 저장(버전 이력). 권한: 프로젝트 멤버, HTML 내용은 sanitizeRichHtml 로 XSS 소독 후 저장. 부작용: activity_log 기록 + SSE 이벤트 발행. DELETE — 페이지를 DB에서 영구 삭제(소프트 삭제 없음). 권한: 프로젝트 멤버. 부작용: activity_log 기록 + SSE 이벤트 발행. @author jijuta ([email protected]) @since 2026-05-03 @updated 2026-06-07 — JSDoc 표준(@author/@since/@param 등) 적용

Path parameters

pageIdstringrequired

Request body

titlestring
contentstring
iconstring
parentIdstring<uuid>
positioninteger

Responses

200 성공400 입력 검증 실패(zod)401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X PATCH https://sit.in-bridge.com/api/pages/{pageId} \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","content":"string","icon":"string","parentId":"00000000-0000-0000-0000-000000000000","position":0}'
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/pages/{pageId}", {
  method: "PATCH",
  headers: {
    "Authorization": `Bearer ${token}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "title": "string",
    "content": "string",
    "icon": "string",
    "parentId": "00000000-0000-0000-0000-000000000000",
    "position": 0
  })
});
const data = await res.json();
DELETE/api/pages/{pageId}

단일 페이지(Wiki/문서) 리소스를 CRUD 한다.

API 라우트: /api/pages/[pageId] 단일 페이지(Wiki/문서) 리소스를 CRUD 한다. GET — 특정 페이지의 전체 데이터를 반환. 권한: 해당 페이지가 속한 프로젝트의 멤버여야 함. PATCH — 페이지 제목·본문·아이콘·부모·순서를 부분 업데이트. 본문 또는 제목이 바뀔 경우 자동으로 이전 스냅샷을 page_versions 에 저장(버전 이력). 권한: 프로젝트 멤버, HTML 내용은 sanitizeRichHtml 로 XSS 소독 후 저장. 부작용: activity_log 기록 + SSE 이벤트 발행. DELETE — 페이지를 DB에서 영구 삭제(소프트 삭제 없음). 권한: 프로젝트 멤버. 부작용: activity_log 기록 + SSE 이벤트 발행. @author jijuta ([email protected]) @since 2026-05-03 @updated 2026-06-07 — JSDoc 표준(@author/@since/@param 등) 적용

Path parameters

pageIdstringrequired

Responses

200 성공401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X DELETE https://sit.in-bridge.com/api/pages/{pageId} \
  -H "Authorization: Bearer $TOKEN"
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/pages/{pageId}", {
  method: "DELETE",
  headers: {
    "Authorization": `Bearer ${token}`
  }
});
const data = await res.json();
GET/api/pages/{pageId}/versions

특정 페이지의 버전 이력(page_versions 테이블)을 조회한다.

API 라우트: /api/pages/[pageId]/versions 특정 페이지의 버전 이력(page_versions 테이블)을 조회한다. GET — 버전 번호 내림차순으로 모든 스냅샷을 반환. 각 항목에는 제목·본문·작성자 정보(leftJoin users)·생성 시각이 포함된다. 권한: 해당 페이지가 속한 프로젝트의 멤버여야 함. 참고: 버전은 PATCH /api/pages/[pageId] 에서 본문·제목 변경 시 자동으로 INSERT 된다. 이 라우트는 읽기 전용(GET only). @author jijuta ([email protected]) @since 2026-05-12 @updated 2026-06-07 — JSDoc 표준(@author/@since/@param 등) 적용

Path parameters

pageIdstringrequired

Responses

200 성공401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X GET https://sit.in-bridge.com/api/pages/{pageId}/versions \
  -H "Authorization: Bearer $TOKEN"
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/pages/{pageId}/versions", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${token}`
  }
});
const data = await res.json();