연구 데이터 API
참고: 이 문서에 설명된 모든 API는
dta-wir-medi-api애플리케이션에 구현되어 있습니다. (Go)
개요
연구 데이터 API는 임상 연구 환자 관리, 데이터 조회 및 분석을 위한 기능을 제공합니다.
주요기능
- 환자 관리: 연구 환자 등록, 조회, 제거
- 데이터 조회: 환자 목록, 수면 데이터, 설문 데이터 조회
- 정보 수정: 메모, 무작위번호 수정
- 액세스 코드: 연구 환자용 액세스 코드 생성 및 발송
- 검증: 무작위번호 검증, 비밀번호 검증
- 사이트 관리: 연구 사이트 목록 조회
- 불성실 관리: 불성실 환자 등록 및 관리
[GET] /v1/research/users - 연구 환자 목록 조회
연구 환자 목록 조회
[클라이언트 수정 필요]
asis:/v1/research/patients
tobe:/v1/research/users
임상 연구에 참여 중인 환자 목록을 조회합니다. 환자의 기본 정보, 치료 진행 상황, 수면 데이터, 설문 데이터 등을 포함합니다.
- HTTP Method:
GET - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
Query Parameters
| 필드 | 타입 | 설명 | Required | Default |
|---|---|---|---|---|
| limit | number | 한 페이지당 항목 수 | ✗ | 50 |
| page | number | 페이지 번호 (1부터 시작) | ✗ | 1 |
| sortBy | string | 정렬 기준 필드 | ✗ | startAt |
| sortOrder | string | 정렬 순서 (asc, desc) | ✗ | desc |
| noncompliance | boolean | 불성실 환자만 조회 | ✗ | false |
| siteId | number | 사이트 ID (특정 사이트 필터링) | ✗ | - |
| searchKey | string | 검색어 (이름, 슬립큐코드, 무작위번호) | ✗ | - |
Request 예시
GET /v1/research/users?limit=20&page=1&sortBy=startAt&sortOrder=desc&siteId=1
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 조회 성공 | - |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{
"total": 100,
"count": 20,
"data": [
{
"userCycleId": 12345,
"status": 2,
"user": {
"id": 1001,
"name": "홍길동",
"birthDate": "1990-01-15"
},
"account": {
"id": 501,
"name": "김의사"
},
"randomizationCode": "RND-001",
"memo": "특이사항 없음",
"accesscode": {
"code": "ABC123XYZ",
"createdAt": "2024-01-10T09:00:00Z"
},
"activityTimeline": {
"startedAt": "2024-01-10T09:00:00Z",
"lastLogin": "2024-03-15T14:30:00Z",
"appUsageDays": 45
},
"day": 50,
"learningStatus": {
"done": 8,
"total": 12
},
"completedQuestionnaireCount": 3,
"finalQuestionnaireNonCompliance": false,
"sleepRecordCount": 48,
"sleepRecordCountNonCompliance": false,
"pillAdherenceCount": 30,
"aetConsistencyRate": 85,
"lotConsistencyRate": 90,
"weeklySleepData": [
{
"weekNumber": 1,
"isOnTargetWeek": true,
"SE": 75.5,
"WASO": 45.2,
"TST": 360.0,
"SOL": 25.3
},
{
"weekNumber": 6,
"isOnTargetWeek": true,
"SE": 85.2,
"WASO": 30.1,
"TST": 420.0,
"SOL": 15.5
}
],
"noncompliance": false,
"site": {
"id": 1,
"name": "서울대학교병원"
}
}
]
}
| 필드 | 타입 | 설명 |
|---|---|---|
| total | number | 전체 항목 수 |
| count | number | 현재 페이지 항목 수 |
| data | array | 연구 환자 목록 |
data 배열의 각 항목:
| 필드 | 타입 | 설명 |
|---|---|---|
| userCycleId | number | 사용자 사이클 ID |
| status | number | 환자 상태 (1: 대기, 2: 활성, 3: 완료 필요, 4: 완료, 5: 중단) |
| user | object | 사용자 정보 |
| user.id | number | 사용자 ID |
| user.name | string | 사용자 이름 |
| user.birthDate | string | 생년월일 (YYYY-MM-DD) |
| account | object | 담당의 정보 |
| account.id | number | 담당의 ID |
| account.name | string | 담당의 이름 |
| randomizationCode | string | 무작위번호 (연구 참가자 할당용) |
| memo | string | 메모 (연구 관련 특이사항) |
| accesscode | object | 액세스 코드 정보 |
| accesscode.code | string | 슬립큐 코드 |
| accesscode.createdAt | string | 처방일 (ISO 8601 형식) |
| activityTimeline | object | 활동 타임라인 |
| activityTimeline.startedAt | string | 등록일 (ISO 8601 형식) |
| activityTimeline.lastLogin | string | 마지막 앱 사용 (ISO 8601 형식) |
| activityTimeline.appUsageDays | number | 앱 접속 일 수 |
| day | number | 치료 일차 |
| learningStatus | object | 학습 진행 상태 (선택) |
| learningStatus.done | number | 완료한 학습 수 |
| learningStatus.total | number | 전체 학습 수 |
| completedQuestionnaireCount | number | 완료한 설문 횟수 |
| finalQuestionnaireNonCompliance | boolean | 마지막 설문 불성실 여부 |
| sleepRecordCount | number | 수면 기록 횟수 |
| sleepRecordCountNonCompliance | boolean | 수면 기록 불성실 여부 |
| pillAdherenceCount | number | 수면제 복용 횟수 |
| aetConsistencyRate | number | 기상시각 준수율 (%) |
| lotConsistencyRate | number | 취침시각 준수율 (%) |
| weeklySleepData | array | 주차별 수면 데이터 (1주차, 6주차 등) |
| noncompliance | boolean | 전체 불성실 여부 (수면 기록 또는 설문 불성실) |
| site | object | 사이트 정보 (STUDY_ADMIN Position인 경우에만 표시) |
weeklySleepData 배열의 각 항목:
| 필드 | 타입 | 설명 |
|---|---|---|
| weekNumber | number | 주차 번호 |
| isOnTargetWeek | boolean | 목표 주차 여부 |
| SE | number | 수면 효율 (%) (선택) |
| WASO | number | 입면 후 각성 시간 (분) (선택) |
| TST | number | 총 수면 시간 (분) (선택) |
| SOL | number | 입면 잠복기 (분) (선택) |
참고사항:
- 일반 연구자는 자신이 속한 사이트의 환자만 조회 가능
- STUDY_ADMIN Position을 가진 경우 모든 사이트 조회 가능 및 site 정보 표시
- status가 Active(2)이고 endAt을 지난 경우 자동으로 CompletionRequired(3)로 변경됨
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[GET] /v1/research/users/options - 환자 옵션 조회
환자 옵션 조회
[클라이언트 수정 필요]
asis:/v1/research/patients/options
tobe:/v1/research/users/options
드롭다운 또는 선택 목록을 위한 간단한 환자 정보를 조회합니다.
- HTTP Method:
GET - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
Query Parameters
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| siteId | number | 사이트 ID | ✔ |
| searchKey | string | 검색어 (이름, 슬립큐코드, 무작위번호) | ✗ |
Request 예시
GET /v1/research/patients/options?siteId=1&searchKey=홍길동
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 조회 성공 | - |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{
"data": [
{
"userCycleId": 12345,
"userName": "홍길동",
"userBirthDate": "1990-01-15"
},
{
"userCycleId": 12346,
"userName": "김영희",
"userBirthDate": "1985-05-20"
}
]
}
| 필드 | 타입 | 설명 |
|---|---|---|
| data | array | 환자 옵션 목록 |
data 배열의 각 항목:
| 필드 | 타입 | 설명 |
|---|---|---|
| userCycleId | number | 사용자 사이클 ID |
| userName | string | 사용자 이름 |
| userBirthDate | string | 생년월일 (YYYY-MM-DD) |
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/research/users - 연구 환자 등록
연구 환자 등록
[클라이언트 수정 필요]
asis:/v1/research/patients
tobe:/v1/research/users
기존 userCycleId를 가진 사용자를 연구 환자로 등록합니다.
- HTTP Method:
POST - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
| Content-Type | application/json | 요청 본문 형식 | ✔ |
Request Body
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| userCycleId | number | 사용자 사이클 ID | ✔ |
| randomizationCode | string | 무작위번호 | ✔ |
Request Body 예시
{
"userCycleId": 12345,
"randomizationCode": "RND-001"
}
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 연구 환자 등록 성공 | - |
400 Bad Request | 잘못된 요청 | BAD_REQUEST (40000) |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{
"success": true
}
| 필드 | 타입 | 설명 |
|---|---|---|
| success | boolean | 성공 여부 (true) |
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "유효하지 않은 무작위번호 입니다."
}
발생 가능한 에러 메시지:
"유효하지 않은 무작위번호 입니다."- randomizationCode가 비어있거나 유효하지 않음
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/research/users/{userId} - userId 연구 환자 생성
userId로 연구 환자 생성
[클라이언트 수정 필요]
asis:/v1/research/patients/users/{userCycleId}
tobe:/v1/research/users/{userId}
특정 userCycleId를 가진 사용자를 연구 환자로 생성합니다.
- HTTP Method:
POST - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
Path Parameters
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| userId | number | 사용자 ID | ✔ |
Request 예시
POST /v1/research/users/12345
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 생성 성공 | - |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{}
빈 객체가 반환됩니다.
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[DELETE] /v1/research/users/{userId} - 연구 환자 제거
연구 환자 제거
[클라이언트 수정 필요]
asis:/v1/research/patients/{userCycleId}
tobe:/v1/research/users/{userId}
연구 환자를 제거합니다. 제거하기 전에 비밀번호 검증이 필요합니다.
- HTTP Method:
DELETE - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
Path Parameters
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| userId | number | 사용자 ID | ✔ |
Query Parameters
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| token | string | 비밀번호 검증 후 발급받은 제거 인증 토큰 | ✔ |
Request 예시
DELETE /v1/research/patients/12345?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 제거 성공 | - |
400 Bad Request | 잘못된 요청 | BAD_REQUEST (40000) |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{
"success": true
}
| 필드 | 타입 | 설명 |
|---|---|---|
| success | boolean | 성공 여부 (true) |
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "유효하지 않은 토큰입니다."
}
발생 가능한 에러 메시지:
"유효하지 않은 토큰입니다."- token이 유효하지 않거나 만료됨
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[PATCH] /v1/research/users/{userId}/memo - 환자 메모 수정
환자 메모 수정
[클라이언트 수정 필요]
asis:/v1/research/patients/{userCycleId}/memo
tobe:/v1/research/users/{userId}/memo
연구 환자의 메모를 수정합니다. 메모는 연구 관련 특이사항이나 중요한 정보를 기록하는 용도로 사용됩니다.
- HTTP Method:
PATCH - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
| Content-Type | application/json | 요청 본문 형식 | ✔ |
Path Parameters
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| userId | number | 사용자 ID | ✔ |
Request Body
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| memo | string | 메모 | ✔ |
Request Body 예시
{
"memo": "환자 상태 양호. 다음 주 추가 상담 필요."
}
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 수정 성공 | - |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{
"success": true
}
| 필드 | 타입 | 설명 |
|---|---|---|
| success | boolean | 성공 여부 (true) |
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[PATCH] /v1/research/patients/{userCycleId}/randomization-code - 무작위번호 수정
무작위번호 수정
[클라이언트 수정 필요]
asis:/v1/research/patients/{userCycleId}/randomization-code
tobe:/v1/research/users/{userId}/randomization-code
연구 환자의 무작위번호를 수정합니다. 무작위번호는 연구 참가자를 무작위로 할당하기 위해 사용됩니다.
- HTTP Method:
PATCH - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
| Content-Type | application/json | 요청 본문 형식 | ✔ |
Path Parameters
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| userId | number | 사용자 ID | ✔ |
Request Body
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| randomizationCode | string | 무작위번호 | ✔ |
Request Body 예시
{
"randomizationCode": "RND-002"
}
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 수정 성공 | - |
400 Bad Request | 잘못된 요청 | BAD_REQUEST (40000) |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{
"success": true
}
| 필드 | 타입 | 설명 |
|---|---|---|
| success | boolean | 성공 여부 (true) |
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "유효하지 않은 무작위번호 입니다."
}
발생 가능한 에러 메시지:
"유효하지 않은 무작위번호 입니다."- randomizationCode가 비어있거나 이미 사용 중
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/research/accesscodes - 액세스 코드 생성 및 알림 전송
액세스 코드 생성 및 알림 전송
연구 환자용 액세스 코드(슬립큐 코드)를 생성하고 이메일 또는 SMS로 전송합니다.
- HTTP Method:
POST - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
| Content-Type | application/json | 요청 본문 형식 | ✔ |
Request Body
| 필드 | 타입 | 설명 | Required | Default |
|---|---|---|---|---|
| string | 이메일 주소 | ✗ | - | |
| phone | string | 전화번호 | ✗ | - |
| accountId | number | 담당의 계정 ID | ✔ | - |
| siteId | number | 사이트 ID | ✔ | - |
| groupId | number | 그룹 ID | ✔ | - |
| registrationChannelId | number | 등록 채널 ID | ✗ | 6 (SleepQ Dashboard) |
| saveAccountId | boolean | 담당의 저장 여부 | ✗ | - |
| notificationMethod | string | 알림 방법 (EMAIL, SMS, IN_APP, MANUAL, Unknown) | ✗ | |
| randomizationCode | string | 무작위번호 | ✔ | - |
| validDays | number | 유효 기간 (일) | ✗ | - |
참고:
- email 또는 phone 중 하나는 필수입니다.
- notificationMethod가 Unknown인 경우 EMAIL로 설정됩니다.
Request Body 예시
{
"email": "patient@example.com",
"accountId": 501,
"siteId": 1,
"groupId": 10,
"registrationChannelId": 6,
"saveAccountId": true,
"notificationMethod": "EMAIL",
"randomizationCode": "RND-001",
"validDays": 90
}
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 생성 성공 | - |
400 Bad Request | 잘못된 요청 | BAD_REQUEST (40000) |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{
"accesscode": "ABC123XYZ",
"accesscodeCreatedAt": "2024-03-15T10:00:00Z",
"accesscodeExpiresAt": "2024-06-13T10:00:00Z",
"sent": true
}
| 필드 | 타입 | 설명 |
|---|---|---|
| accesscode | string | 생성된 액세스 코드 |
| accesscodeCreatedAt | string | 생성 일시 (ISO 8601 형식) |
| accesscodeExpiresAt | string | 만료 일시 (ISO 8601 형식) |
| sent | boolean | 알림 전송 성공 여부 |
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "잘못된 무작위번호 입니다."
}
발생 가능한 에러 메시지:
"잘못된 무작위번호 입니다."- randomizationCode가 비어있음
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/research/patients/randomization-code/validate - 무작위번호 검증
무작위번호 검증
무작위번호의 사용 가능 여부를 검증합니다.
- HTTP Method:
POST - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
| Content-Type | application/json | 요청 본문 형식 | ✔ |
Request Body
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| randomizationCode | string | 무작위번호 | ✔ |
Request Body 예시
{
"randomizationCode": "RND-001"
}
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 검증 완료 | - |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{
"available": true,
"reason": null
}
또는
{
"available": false,
"reason": "이미 사용 중인 무작위번호입니다."
}
| 필드 | 타입 | 설명 |
|---|---|---|
| available | boolean | 사용 가능 여부 |
| reason | string | 사용 불가능한 경우 이유 (선택) |
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/research/patients/remove/verify-password - 환자 제거를 위한 비밀번호 검증
환자 제거를 위한 비밀번호 검증
[클라이언트 수정 필요]
asis: Request Body의userCycleId(사용자 사이클 ID)
tobe: Request Body의userId(사용자 ID)
연구 환자를 제거하기 전에 담당자의 비밀번호를 검증하고 제거 인증 토큰을 발급합니다.
- HTTP Method:
POST - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
| Content-Type | application/json | 요청 본문 형식 | ✔ |
Request Body
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| password | string | 담당자 비밀번호 | ✔ |
| userId | number | 사용자 ID | ✔ |
Request Body 예시
{
"password": "mySecurePassword123!",
"userId": 12345
}
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 검증 성공 | - |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
| 필드 | 타입 | 설명 |
|---|---|---|
| token | string | 제거 인증 토큰 (환자 제거 API에서 사용) |
참고:
- 발급받은 token은 제한된 시간 동안만 유효합니다.
- token을 사용하여 DELETE
/v1/research/users/{userId}API를 호출하면 환자를 제거할 수 있습니다.
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
발생 가능한 경우:
- 액세스 토큰이 유효하지 않음
- 비밀번호가 일치하지 않음
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[GET] /v1/research/sites - 연구 사이트 목록 조회
연구 사이트 목록 조회
연구 관련 사이트 목록을 조회합니다.
- HTTP Method:
GET - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
Request 예시
GET /v1/research/sites
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 조회 성공 | - |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{
"sites": [
{
"id": 1,
"name": "서울대학교병원",
"description": "서울특별시 종로구",
"code": "SNUH",
"clinicalResearch": true,
"managedByCrm": true,
"createdAt": "2024-01-10T08:00:00Z"
},
{
"id": 2,
"name": "연세대학교병원",
"code": "YUHS",
"clinicalResearch": true,
"managedByCrm": true,
"createdAt": "2024-01-11T09:30:00Z"
}
]
}
| 필드 | 타입 | 설명 |
|---|---|---|
| sites | array | 사이트 목록 |
sites 배열의 각 항목:
| 필드 | 타입 | 설명 |
|---|---|---|
| id | number | 사이트 ID |
| name | string | 사이트(병원) 이름 |
| description | string | 사이트 설명 (선택) |
| code | string | 사이트 코드 (선택) |
| clinicalResearch | boolean | 임상 연구 사이트 여부 |
| managedByCrm | boolean | CRM 관리 여부 |
| createdAt | string | 생성 일시 (ISO 8601 형식) |
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/research/patients/non-compliance - 불성실 환자 등록/수정
불성실 환자 등록/수정
[클라이언트 수정 필요]
asis: Request Body의userCycleId(사용자 사이클 ID)
tobe: Request Body의userId(사용자 ID)
불성실 환자 정보를 등록하거나 수정합니다.
- HTTP Method:
POST - 인증: 액세스 토큰 (
accessToken) 필요
Headers
| Header | Type | Description | Required |
|---|---|---|---|
| Authorization | Bearer {accessToken} | 사용자 인증을 통해 발급받은 액세스 토큰 입니다. | ✔ |
| Content-Type | application/json | 요청 본문 형식 | ✔ |
Request Body
| 필드 | 타입 | 설명 | Required |
|---|---|---|---|
| userId | number | 사용자 ID (선택) | ✗ |
| contextId | number | 컨텍스트 ID | ✔ |
Request Body 예시
{
"userId": 12345,
"contextId": 1001
}
Responses
| Http Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 등록/수정 성공 | - |
401 Unauthorized | 인증 실패 | UNAUTHORIZED (40100) |
500 Internal Server Error | 서버 내부 오류 | INTERNAL_SERVER_ERROR (50000) |
200 OK - 성공
{}
빈 객체가 반환됩니다.
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}