users

Sentivex Incidents Ticket API

GET/api/users

사용자 목록 (담당자 선택용 피커).

GET /api/users?search=&limit= — 사용자 목록 (담당자 선택용 피커). SOC 역할 등록 등에서 담당자를 검색·선택하기 위함. **요청자와 워크스페이스를 공유하는 사용자** 로만 범위를 한정한다(슈퍼관리자는 전체). 예전엔 로그인만 하면 전 시스템 사용자의 이메일·이름을 워크스페이스 경계 없이 열거할 수 있었다(PII 유출, #46). 권한: 로그인 필수. @returns `{ users: Array<{ id, fullName, email, avatarUrl }> }` @author jijuta ([email protected]) @since 2026-05-12 @updated 2026-06-07 — #46 워크스페이스 공유 멤버로 스코프 제한(전사 PII 열거 차단)

Responses

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

현재 로그인한 사용자의 프로필 정보를 조회하거나 수정한다.

API 라우트: /api/users/me 현재 로그인한 사용자의 프로필 정보를 조회하거나 수정한다. - GET : 본인 프로필 반환 (이메일·이름·아바타 등) - PATCH: 표시 이름(fullName) 또는 사용자명(username) 변경 비밀번호 변경은 이 라우트가 아닌 /api/users/me/password 에서 처리한다. avatarUrl 변경은 별도 업로드 API를 통해 처리한다. @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/users/me \
  -H "Authorization: Bearer $TOKEN"
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/users/me", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${token}`
  }
});
const data = await res.json();
PATCH/api/users/me

현재 로그인한 사용자의 프로필 정보를 조회하거나 수정한다.

API 라우트: /api/users/me 현재 로그인한 사용자의 프로필 정보를 조회하거나 수정한다. - GET : 본인 프로필 반환 (이메일·이름·아바타 등) - PATCH: 표시 이름(fullName) 또는 사용자명(username) 변경 비밀번호 변경은 이 라우트가 아닌 /api/users/me/password 에서 처리한다. avatarUrl 변경은 별도 업로드 API를 통해 처리한다. @author jijuta ([email protected]) @since 2026-05-03 @updated 2026-06-07 — JSDoc 표준(@author/@since/@param 등) 적용

Request body

fullNamestring

Responses

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

현재 로그인한 사용자에게 할당된(assigneeId) 이슈 목록을 반환한다.

API 라우트: /api/users/me/issues 현재 로그인한 사용자에게 할당된(assigneeId) 이슈 목록을 반환한다. 주로 "내 이슈" 대시보드 또는 프로필 화면에서 사용된다. - 소프트 삭제된 이슈(deletedAt IS NOT NULL)는 제외한다. - 최신 생성 순으로 최대 100건 반환한다. - 이슈 상태(issueStatuses), 소속 프로젝트(projects) 정보를 조인해 함께 반환한다. @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/users/me/issues \
  -H "Authorization: Bearer $TOKEN"
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/users/me/issues", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${token}`
  }
});
const data = await res.json();
POST/api/users/me/password

현재 로그인한 사용자의 비밀번호를 변경한다.

API 라우트: /api/users/me/password 현재 로그인한 사용자의 비밀번호를 변경한다. - POST: 현재 비밀번호 확인 → bcrypt 해시 생성 → DB 업데이트 - OAuth 전용 계정(passwordHash가 null)은 비밀번호 변경 불가. - 현재 비밀번호 불일치 시 401 UnauthorizedError 반환. @author jijuta ([email protected]) @since 2026-05-03 @updated 2026-06-07 — JSDoc 표준(@author/@since/@param 등) 적용 @updated 2026-06-07 — #44 IP/사용자별 rate limit 추가(가입 남용·brute-force·bcrypt DoS 차단)

Request body

currentPasswordstringrequired

Responses

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