사용자별 가상 시간 API 명세
개요
이 문서는 TimeMachine 도메인의 사용자별 가상 시간 관리 API에 대한 상세 명세를 제공합니다. 이 API를 통해 테스터는 특정 사용자의 가상 시간을 개별적으로 관리하고 조작할 수 있으며, 각 사용자는 독립적인 테스트 전용 가상 시간을 가질 수 있습니다.
API 엔드포인트
| 경로 | 메서드 | 설명 |
|---|---|---|
/v1/time-machine/users/{userId}/time | GET | 특정 사용자의 가상 시간 조회 |
/v1/time-machine/users/{userId}/time | POST | 특정 사용자의 가상 시간 변경 |
/v1/time-machine/users/time | GET | 모든 사용자의 가상 시간 정보 조회 |
상세 명세
1. 특정 사용자의 가상 시간 조회
요청
- URL:
/v1/time-machine/users/{userId}/time - 메서드:
GET - 인증: Bearer 토큰 필요
- 권한: 시스템 관리자, 테스터, 사용자 본인
경로 파라미터:
| 파라미터 | 타입 | 설명 |
|---|---|---|
userId | string | 가상 시간을 조회할 사용자 ID |
응답
성공 응답: 200 OK
{
"userId": "user123",
"currentTime": 1715123456789,
"active": true,
"lastChangeTimestamp": 1715023456789,
"changedById": "tester456"
}
| 필드 | 타입 | 설명 |
|---|---|---|
userId | string | 사용자 ID |
currentTime | number | 현재 가상 시간 (13자리 Unix 타임스탬프, 밀리초) |
active | boolean | TimeMachine 기능 활성화 여부 |
lastChangeTimestamp | number | 마지막 변경 시간 (13자리 Unix 타임스탬프, 밀리초) |
changedById | string | 마지막으로 시간을 변경한 사용자 ID |
실패 응답: 404 Not Found
{
"code": 1005,
"message": "USER_NOT_FOUND",
"detail": "사용자를 찾을 수 없습니다."
}
실패 응답: 403 Forbidden
{
"code": 1004,
"message": "PERMISSION_DENIED",
"detail": "다른 사용자의 가상 시간을 조회할 권한이 없습니다."
}
2. 특정 사용자의 가상 시간 변경
요청
- URL:
/v1/time-machine/users/{userId}/time - 메서드:
POST - 인증: Bearer 토큰 필요
- 권한: 시스템 관리자, 테스터
- Content-Type:
application/json
경로 파라미터:
| 파라미터 | 타입 | 설명 |
|---|---|---|
userId | string | 가상 시간을 변경할 사용자 ID |
요청 본문:
{
"newTime": 1715223456789,
"reason": "특정 사용자 테스트를 위한 시간 변경"
}
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
newTime | number | 예 | 설정할 새 시간 (13자리 Unix 타임스탬프, 밀리초) |
reason | string | 예 | 시간 변경 사유 |
응답
성공 응답: 200 OK
{
"userId": "user123",
"previousTime": 1715123456789,
"currentTime": 1715223456789,
"changeTimestamp": 1715023456789,
"eventPublished": true
}
| 필드 | 타입 | 설명 |
|---|---|---|
userId | string | 사용자 ID |
previousTime | number | 이전 가상 시간 (13자리 Unix 타임스탬프, 밀리초) |
currentTime | number | 변경된 가상 시간 (13자리 Unix 타임스탬프, 밀리초) |
changeTimestamp | number | 변경 시간 (13자리 Unix 타임스탬프, 밀리초) |
eventPublished | boolean | 이벤트 발행 성공 여부 |
실패 응답: 404 Not Found
{
"code": 1005,
"message": "USER_NOT_FOUND",
"detail": "사용자를 찾을 수 없습니다."
}
실패 응답: 403 Forbidden
{
"code": 1004,
"message": "PERMISSION_DENIED",
"detail": "다른 사용자의 가상 시간을 변경할 권한이 없습니다."
}
3. 모든 사용자의 가상 시간 정보 조회
요청
- URL:
/v1/time-machine/users/time - 메서드:
GET - 인증: Bearer 토큰 필요
- 권한: 시스템 관리자, 테스터
쿼리 파라미터:
| 파라미터 | 타입 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
page | number | 아니오 | 1 | 페이지 번호 |
limit | number | 아니오 | 20 | 페이지당 항목 수 |
active | boolean | 아니오 | - | TimeMachine 활성화 상태로 필터링 |
응답
성공 응답: 200 OK
{
"items": [
{
"userId": "user123",
"userName": "테스트 사용자1",
"currentTime": 1715123456789,
"active": true,
"lastChangeTimestamp": 1715023456789
},
{
"userId": "user456",
"userName": "테스트 사용자2",
"currentTime": 1714123456789,
"active": true,
"lastChangeTimestamp": 1715021456789
}
],
"metadata": {
"totalCount": 45,
"currentPage": 1,
"pageSize": 20,
"totalPages": 3
}
}
| 필드 | 타입 | 설명 |
|---|---|---|
items | array | 가상 시간 정보 항목 배열 |
items[].userId | string | 사용자 ID |
items[].userName | string | 사용자 이름 |
items[].currentTime | number | 현재 가상 시간 (13자리 Unix 타임스탬프, 밀리초) |
items[].active | boolean | TimeMachine 기능 활성화 여부 |
items[].lastChangeTimestamp | number | 마지막 변경 시간 (13자리 Unix 타임스탬프, 밀리초) |
metadata | object | 페이지네이션 메타데이터 |
metadata.totalCount | number | 전체 항목 수 |
metadata.currentPage | number | 현재 페이지 번호 |
metadata.pageSize | number | 페이지당 항목 수 |
metadata.totalPages | number | 전체 페이지 수 |
실패 응답: 403 Forbidden
{
"code": 1004,
"message": "PERMISSION_DENIED",
"detail": "모든 사용자의 가상 시간을 조회할 권한이 없습니다."
}
API 기능 확장
1. 다중 사용자 일괄 변경 API (계획 중)
- URL:
/v1/time-machine/users/time/batch - 메서드:
POST - 설명: 여러 사용자의 가상 시간을 한 번에 변경
- 요청 본문:
{
"userIds": ["user123", "user456", "user789"],
"newTime": 1715223456789,
"reason": "다중 사용자 테스트를 위한 시간 변경"
}
2. 사용자별 특정 일차/주차 이동 API (계획 중)
-
URL:
/v1/time-machine/users/{userId}/time/day/{day} -
메서드:
POST -
설명: 특정 사용자를 특정 일차로 이동
-
URL:
/v1/time-machine/users/{userId}/time/week/{week} -
메서드:
POST -
설명: 특정 사용자를 특정 주차로 이동
3. 사용자 그룹 관리 API (계획 중)
- URL:
/v1/time-machine/user-groups - 메서드:
POST,GET,PUT,DELETE - 설명: 테스트 사용자 그룹을 생성, 조회, 수정, 삭제 및 그룹별 가상 시간 관리
에러 코드
| 코드 | 메시지 | 설명 |
|---|---|---|
| 1001 | INVALID_AUTH_TOKEN | 인증 토큰이 유효하지 않습니다. |
| 1004 | PERMISSION_DENIED | 권한이 없습니다. |
| 1005 | USER_NOT_FOUND | 사용자를 찾을 수 없습니다. |
| 1006 | VIRTUAL_TIME_NOT_FOUND | 가상 시간 정보를 찾을 수 없습니다. |
| 1011 | ROLLBACK_FAILED | 데이터 롤백에 실패했습니다. |
| 1012 | INVALID_TIME_FORMAT | 유효하지 않은 시간 형식입니다. |
| 1013 | PROD_TIMEMACHINE_RESTRICTED | 운영 환경에서 TimeMachine 기능이 제한됩니다. |
| 1014 | EVENT_PUBLISH_FAILED | 이벤트 발행에 실패했습니다. |
| 1015 | BATCH_OPERATION_PARTIALLY_FAILED | 일괄 작업이 일부 실패했습니다. |
| 1016 | USER_GROUP_NOT_FOUND | 사용자 그룹을 찾을 수 없습니다. |
보안 고려사항
- 접근 제어: 사용자별 가상 시간 조회 및 변경은 적절한 권한이 필요합니다.
- 데이터 격리: 각 사용자의 가상 시간은 독립적으로 관리되어야 합니다.
- 운영 환경 제한: 운영 환경에서는 특별한 권한이 있는 사용자만 사용 가능합니다.
변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|---|---|---|---|
| 0.1.0 | 2025-04-05 | bok@weltcorp.com | 최초 작성 |