본문으로 건너뛰기
버전: 0.68.0

계정 관리 API

참고: 이 문서에 설명된 모든 API는 dta-wir-medi-api 애플리케이션에 구현되어 있습니다. (Go)

개요

계정 관리 API는 MD(의료진) 계정의 생성, 조회, 수정, 삭제 및 초대 관리 기능을 제공합니다.

[클라이언트 수정 필요]

API 경로에 /auth 경로가 추가됩니다.

경로 변경:

  • asis: /v1/accounts/~, /v1/my/~, /v1/invitations/~
  • tobe: /v1/auth/accounts/~, /v1/auth/my/~, /v1/auth/invitations/~

주요기능

  • 계정 초대: Site에 새로운 계정 초대
  • 초대 재발송: 기존 초대 이메일 재발송
  • 초대 정보 조회: UUID로 초대 정보 확인
  • 로그인: 이메일/비밀번호로 로그인
  • 토큰 갱신: Refresh 토큰으로 Access 토큰 갱신
  • 프로필 조회: 내 프로필 정보 조회
  • 프로필 수정: 계정 프로필 정보 수정
  • 권한 변경: 계정 권한(Position) 변경
  • 처방 권한 조회: Site별 처방 권한 있는 계정 목록 조회
  • 이메일 찾기: 이름과 전화번호로 이메일 찾기
  • 계정 생성: 초대장으로 계정 생성
  • 계정 직접 생성: 관리자가 직접 계정 생성
  • 계정 삭제: 계정 삭제
  • 계정 목록 조회: Site별 계정 목록 조회
  • 초대 목록 조회: Site별 초대 목록 조회
[POST] /v1/accounts/sites/{siteId}/invite - 계정 초대

계정 초대

특정 Site에 새로운 계정을 초대합니다. 초대 이메일이 발송됩니다.

[클라이언트 수정 필요]
asis: /v1/accounts/sites/{siteId}/invite
tobe: /v1/auth/accounts/sites/{siteId}/invite

  • HTTP Method: POST
  • 인증: 액세스 토큰 (accessToken) 필요

Headers

HeaderTypeDescriptionRequired
AuthorizationBearer {accessToken}사용자 인증을 통해 발급받은 액세스 토큰 입니다.
Content-Typeapplication/json요청 본문 형식

Request Parameters

필드타입위치설명Required
siteIdnumberpathSite ID

Request Body

필드타입설명Required
emailstring초대할 이메일
authorizedToPrescribeboolean처방 권한 부여 여부

Request Body 예시

{
"email": "doctor@weltcorp.com",
"authorizedToPrescribe": true
}

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
}
필드타입설명
successboolean성공 여부 (true)
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "이미 가입한 계정입니다."
}

발생 가능한 에러 메시지:

  • "이미 가입한 계정입니다." - 해당 이메일이 이미 등록됨
  • "이미 초대한 이메일입니다." - 유효한 초대가 이미 존재함
  • "유효하지 않은 병원 정보입니다." - Site ID가 유효하지 않음
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/accounts/sites/{siteId}/invites/resend - 초대 재발송

초대 재발송

기존 초대 이메일을 재발송합니다.

[클라이언트 수정 필요]
asis: /v1/accounts/sites/{siteId}/invites/resend
tobe: /v1/auth/accounts/sites/{siteId}/invites/resend

  • HTTP Method: POST
  • 인증: 액세스 토큰 (accessToken) 필요

Headers

HeaderTypeDescriptionRequired
AuthorizationBearer {accessToken}사용자 인증을 통해 발급받은 액세스 토큰 입니다.
Content-Typeapplication/json요청 본문 형식

Request Parameters

필드타입위치설명Required
siteIdnumberpathSite ID

Request Body

필드타입설명Required
invitationUUIDstring초대 UUID

Request Body 예시

{
"invitationUUID": "550e8400-e29b-41d4-a716-446655440000"
}

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
}
필드타입설명
successboolean성공 여부 (true)
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "유효하지 않은 초대 정보입니다."
}

발생 가능한 에러 메시지:

  • "유효하지 않은 초대 정보입니다." - 초대 정보를 찾을 수 없거나 Site ID가 일치하지 않음
  • "만료된 초대 정보입니다." - 초대가 만료됨
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[GET] /v1/invitations/{invitationUUID} - 초대 정보 조회

초대 정보 조회

UUID로 초대 정보를 조회합니다.

[클라이언트 수정 필요]
asis: /v1/invitations/{invitationUUID}
tobe: /v1/auth/invitations/{invitationUUID}

  • HTTP Method: GET
  • 인증: 액세스 토큰 필요 없음

Headers

HeaderTypeDescriptionRequired
Content-Typeapplication/json요청 본문 형식

Request Parameters

필드타입위치설명Required
invitationUUIDstringpath초대 UUID

Responses

Http Status Code설명Error Code(s)
200 OK조회 성공-
404 Not Found초대를 찾을 수 없음NOT_FOUND (40400)
500 Internal Server Error서버 내부 오류INTERNAL_SERVER_ERROR (50000)
200 OK - 성공
{
"id": 1,
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"site": {
"id": 1,
"name": "서울대병원",
"clinicalResearch": false
},
"email": "doctor@weltcorp.com",
"position": "MEMBER",
"authorizedToPrescribe": true,
"expiresAt": "2024-12-31T23:59:59Z"
}
필드타입설명
idnumber초대 ID
uuidstring초대 UUID
siteobjectSite 정보
emailstring초대된 이메일
positionstring권한 (Position)
authorizedToPrescribeboolean처방 권한 여부
expiresAtstring만료 일시 (ISO 8601)
404 Not Found - 초대를 찾을 수 없음
{
"status": 404,
"code": 40400,
"message": "유효하지 않은 초대 정보입니다."
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/accounts/invitations/{invitationUUID} - 초대로 계정 생성

초대로 계정 생성

초대 UUID를 사용하여 새로운 계정을 생성합니다.

[클라이언트 수정 필요]
asis: /v1/accounts/invitations/{invitationUUID}
tobe: /v1/auth/accounts/invitations/{invitationUUID}

  • HTTP Method: POST
  • 인증: 액세스 토큰 필요 없음

Headers

HeaderTypeDescriptionRequired
Content-Typeapplication/json요청 본문 형식

Request Parameters

필드타입위치설명Required
invitationUUIDstringpath초대 UUID

Request Body

필드타입설명Required
emailstring이메일
passwordstring비밀번호
namestring이름
phoneNumberstring전화번호

Request Body 예시

{
"email": "doctor@weltcorp.com",
"password": "password123!",
"name": "홍길동",
"phoneNumber": "01012345678"
}

Responses

Http Status Code설명Error Code(s)
200 OK계정 생성 성공-
400 Bad Request잘못된 요청BAD_REQUEST (40000)
500 Internal Server Error서버 내부 오류INTERNAL_SERVER_ERROR (50000)
200 OK - 성공
{
"success": true
}
필드타입설명
successboolean성공 여부 (true)
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "비밀번호는 10~20자리여야 합니다."
}

발생 가능한 에러 메시지:

  • "유효하지 않은 초대 정보입니다." - 초대를 찾을 수 없음
  • "만료된 초대 정보입니다." - 초대가 만료되었거나 이미 사용됨
  • "유효하지 않은 전화번호 형식입니다." - 전화번호 형식이 잘못됨
  • "비밀번호는 10~20자리여야 합니다." - 비밀번호 길이 규칙 위반
  • "비밀번호는 숫자/문자/특수문자 중 2가지 이상을 포함해야 합니다." - 비밀번호 복잡도 규칙 위반
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/accounts/login - 로그인

로그인

이메일과 비밀번호로 로그인합니다.

[클라이언트 수정 필요]
asis: /v1/accounts/login
tobe: /v1/auth/accounts/login

  • HTTP Method: POST
  • 인증: 액세스 토큰 필요 없음

Headers

HeaderTypeDescriptionRequired
Content-Typeapplication/json요청 본문 형식

Request Body

필드타입설명Required
emailstring이메일
passwordstring비밀번호

Request Body 예시

{
"email": "doctor@weltcorp.com",
"password": "password123!"
}

Responses

Http Status Code설명Error Code(s)
200 OK로그인 성공-
400 Bad Request잘못된 이메일 또는 비밀번호INVALID_EMAIL_OR_PASSWORD (40001), ACCOUNT_LOCKED (40002)
401 Unauthorized계정 잠김INVALID_EMAIL_OR_PASSWORD_ACCOUNT_LOCKED (40103)
500 Internal Server Error서버 내부 오류INTERNAL_SERVER_ERROR (50000)
200 OK - 성공
{
"account": {
"id": 1,
"email": "doctor@weltcorp.com",
"name": "홍길동",
"phoneNumber": "010-1234-5678",
"site": {
"id": 1,
"name": "서울대병원",
"clinicalResearch": false
},
"roles": [1, 2],
"position": "MEMBER",
"authorizedToPrescribe": true,
"createdAt": "2024-01-01T00:00:00Z"
},
"tokens": {
"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
},
"enabledTabs": [
{
"id": 1,
"title": "진료용",
"value": "medical"
}
]
}
필드타입설명
accountobject계정 정보
tokensobject인증 토큰 (access, refresh)
enabledTabsarray활성화된 탭 목록 (진료용/연구용)
400 Bad Request - 잘못된 이메일 또는 비밀번호
{
"status": 400,
"code": 40001,
"message": "login-failed"
}

이메일 또는 비밀번호가 일치하지 않을 때 발생합니다.

401 Unauthorized - 계정 잠김
{
"status": 401,
"code": 40103,
"message": "login-failed"
}

5회 이상 로그인 실패로 계정이 1분간 잠긴 경우 발생합니다.

500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/accounts/tokens/refresh - 토큰 갱신

토큰 갱신

Refresh 토큰을 사용하여 새로운 Access 토큰과 Refresh 토큰을 발급받습니다.

[클라이언트 수정 필요]
asis: /v1/accounts/tokens/refresh
tobe: /v1/auth/accounts/tokens/refresh

  • HTTP Method: POST
  • 인증: Refresh 토큰 필요

Headers

HeaderTypeDescriptionRequired
Content-Typeapplication/json요청 본문 형식

Request Body

필드타입설명Required
tokenstringRefresh 토큰

Request Body 예시

{
"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 - 성공
{
"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
필드타입설명
accessstring새로운 Access 토큰
refreshstring새로운 Refresh 토큰
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "invalid-account-id"
}

토큰의 계정 정보가 유효하지 않을 때 발생합니다.

401 Unauthorized - 유효하지 않은 토큰
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[GET] /v1/my/profile - 내 프로필 조회

내 프로필 조회

현재 로그인한 사용자의 프로필 정보를 조회합니다.

[클라이언트 수정 필요]
asis: /v1/my/profile
tobe: /v1/auth/my/profile

  • HTTP Method: GET
  • 인증: 액세스 토큰 (accessToken) 필요

Headers

HeaderTypeDescriptionRequired
AuthorizationBearer {accessToken}사용자 인증을 통해 발급받은 액세스 토큰 입니다.

Responses

Http Status Code설명Error Code(s)
200 OK조회 성공-
401 Unauthorized인증 실패UNAUTHORIZED (40100)
500 Internal Server Error서버 내부 오류INTERNAL_SERVER_ERROR (50000)
200 OK - 성공
{
"id": 1,
"email": "doctor@weltcorp.com",
"name": "홍길동",
"phoneNumber": "010-1234-5678",
"site": {
"id": 1,
"name": "서울대병원",
"clinicalResearch": false
},
"roles": [1, 2],
"position": "MEMBER",
"authorizedToPrescribe": true,
"createdAt": "2024-01-01T00:00:00Z",
"enabledTabs": [
{
"id": 1,
"title": "진료용",
"value": "medical"
}
]
}
필드타입설명
idnumber계정 ID
emailstring이메일
namestring이름
phoneNumberstring전화번호
siteobjectSite 정보
rolesarray역할 ID 목록
positionstring권한 (Position)
authorizedToPrescribeboolean처방 권한 여부
createdAtstring계정 생성일 (ISO 8601)
enabledTabsarray활성화된 탭 목록 (진료용/연구용)
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[PATCH] /v1/accounts/{accountId}/profile - 프로필 수정

프로필 수정

계정의 프로필 정보를 수정합니다. 비밀번호도 변경할 수 있습니다.

[클라이언트 수정 필요]
asis: /v1/accounts/{accountId}/profile
tobe: /v1/auth/accounts/{accountId}/profile

  • HTTP Method: PATCH
  • 인증: 액세스 토큰 (accessToken) 필요

Headers

HeaderTypeDescriptionRequired
AuthorizationBearer {accessToken}사용자 인증을 통해 발급받은 액세스 토큰 입니다.
Content-Typeapplication/json요청 본문 형식

Request Parameters

필드타입위치설명Required
accountIdnumberpath계정 ID

Request Body

필드타입설명Required
namestring이름
phoneNumberstring전화번호
authorizedToPrescribeboolean처방 권한 여부
passwordstring현재 비밀번호 (변경 시 필수)
newPasswordstring새 비밀번호

Request Body 예시

{
"name": "홍길동",
"phoneNumber": "01012345678",
"authorizedToPrescribe": true
}

비밀번호 변경 시:

{
"name": "홍길동",
"phoneNumber": "01012345678",
"password": "oldPassword123!",
"newPassword": "newPassword456!"
}

Responses

Http Status Code설명Error Code(s)
200 OK수정 성공-
400 Bad Request잘못된 요청BAD_REQUEST (40000)
401 Unauthorized인증 실패UNAUTHORIZED (40100)
409 Conflict비밀번호 중복CONFLICT (40900)
500 Internal Server Error서버 내부 오류INTERNAL_SERVER_ERROR (50000)
200 OK - 성공
{
"success": true
}
필드타입설명
successboolean성공 여부 (true)
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "비밀번호가 일치하지 않습니다."
}

발생 가능한 에러 메시지:

  • "비밀번호가 일치하지 않습니다." - 현재 비밀번호가 일치하지 않음
  • "유효하지 않은 전화번호 형식입니다." - 전화번호 형식이 잘못됨
  • "비밀번호는 10~20자리여야 합니다." - 비밀번호 길이 규칙 위반
  • "비밀번호는 숫자/문자/특수문자 중 2가지 이상을 포함해야 합니다." - 비밀번호 복잡도 규칙 위반
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
409 Conflict - 비밀번호 중복
{
"status": 409,
"code": 40900,
"message": "같은 비밀번호를 사용할 수 없습니다."
}

새 비밀번호가 현재 비밀번호와 동일할 때 발생합니다.

500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[PATCH] /v1/accounts/{accountId}/position - 권한 변경

권한 변경

계정의 권한(Position)을 변경합니다. Site Admin만 실행할 수 있습니다.

[클라이언트 수정 필요]
asis: /v1/accounts/{accountId}/position
tobe: /v1/auth/accounts/{accountId}/position

  • HTTP Method: PATCH
  • 인증: 액세스 토큰 (accessToken) 필요 (Site Admin 권한 필요)

Headers

HeaderTypeDescriptionRequired
AuthorizationBearer {accessToken}사용자 인증을 통해 발급받은 액세스 토큰 입니다.
Content-Typeapplication/json요청 본문 형식

Request Parameters

필드타입위치설명Required
accountIdnumberpath계정 ID

Request Body

필드타입설명Required
positionIdnumberPosition ID (1: STUDY_ADMIN, 2: ADMIN, 3: MEMBER, 4: SITE_ADMIN, 5: SITE_MEMBER)

Request Body 예시

{
"positionId": 3
}

Responses

Http Status Code설명Error Code(s)
200 OK변경 성공-
400 Bad Request잘못된 요청BAD_REQUEST (40000)
401 Unauthorized인증 실패UNAUTHORIZED (40100)
403 Forbidden권한 없음FORBIDDEN (40300)
500 Internal Server Error서버 내부 오류INTERNAL_SERVER_ERROR (50000)
200 OK - 성공
{
"success": true
}
필드타입설명
successboolean성공 여부 (true)
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "잘못된 계정 정보입니다."
}

accountId 또는 positionId가 유효하지 않을 때 발생합니다.

401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
403 Forbidden - 권한 없음
{
"status": 403,
"code": 40300,
"message": "변경 권한이 없습니다."
}

발생 가능한 에러 메시지:

  • "변경 권한이 없습니다." - Site Admin 권한이 없음
  • "변경 할 수 없는 권한입니다." - Admin 권한은 상호 변경 불가
  • "변경 할 수 없는 Site 계정입니다." - 다른 Site의 계정은 변경 불가
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[GET] /v1/accounts/authorized/sites/{siteId} - 처방 권한 계정 조회

처방 권한 계정 조회

특정 Site의 처방 권한이 있는 계정 목록을 조회합니다.

[클라이언트 수정 필요]
asis: /v1/accounts/authorized/sites/{siteId}
tobe: /v1/auth/accounts/authorized/sites/{siteId}

  • HTTP Method: GET
  • 인증: 액세스 토큰 (accessToken) 필요

Headers

HeaderTypeDescriptionRequired
AuthorizationBearer {accessToken}사용자 인증을 통해 발급받은 액세스 토큰 입니다.

Request Parameters

필드타입위치설명Required
siteIdnumberpathSite ID

Responses

Http Status Code설명Error Code(s)
200 OK조회 성공-
401 Unauthorized인증 실패UNAUTHORIZED (40100)
500 Internal Server Error서버 내부 오류INTERNAL_SERVER_ERROR (50000)
200 OK - 성공
{
"accounts": [
{
"id": 1,
"name": "홍길동"
},
{
"id": 2,
"name": "김철수"
}
],
"saved": {
"id": 1,
"name": "홍길동"
}
}
필드타입설명
accountsarray처방 권한이 있는 계정 목록
savedobject현재 사용자가 저장한 계정 (없으면 null)
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/accounts/find-emails - 이메일 찾기

이메일 찾기

이름과 전화번호로 등록된 이메일 주소를 찾습니다. 이메일은 마스킹되어 반환됩니다.

[클라이언트 수정 필요]
asis: /v1/accounts/find-emails
tobe: /v1/auth/accounts/find-emails

  • HTTP Method: POST
  • 인증: 액세스 토큰 필요 없음

Headers

HeaderTypeDescriptionRequired
Content-Typeapplication/json요청 본문 형식

Request Body

필드타입설명Required
namestring이름
phoneNumberstring전화번호

Request Body 예시

{
"name": "홍길동",
"phoneNumber": "01012345678"
}

Responses

Http Status Code설명Error Code(s)
200 OK조회 성공-
400 Bad Request잘못된 요청BAD_REQUEST (40000)
500 Internal Server Error서버 내부 오류INTERNAL_SERVER_ERROR (50000)
200 OK - 성공
{
"emails": ["h****@weltcorp.com", "hong****@example.com"]
}
필드타입설명
emailsarray마스킹된 이메일 주소 목록

이메일 마스킹 규칙:

  • 1글자: *
  • 2-5글자: 첫 글자 + * (나머지)
  • 6글자 이상: 앞부분 + **** (4글자) + 뒷부분
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "유효하지 않은 전화번호 형식입니다."
}

전화번호 형식이 잘못되었을 때 발생합니다.

500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/accounts/delete - 계정 삭제

계정 삭제

계정을 삭제합니다. 본인 계정만 삭제할 수 있습니다.

[클라이언트 수정 필요]
asis: /v1/accounts/delete
tobe: /v1/auth/accounts/delete

  • HTTP Method: POST
  • 인증: 액세스 토큰 (accessToken) 필요

Headers

HeaderTypeDescriptionRequired
AuthorizationBearer {accessToken}사용자 인증을 통해 발급받은 액세스 토큰 입니다.
Content-Typeapplication/json요청 본문 형식

Request Body

필드타입설명Required
accountIdnumber삭제할 계정 ID
passwordstring비밀번호

Request Body 예시

{
"accountId": 1,
"password": "password123!"
}

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
}
필드타입설명
successboolean성공 여부 (true)

참고:

  • 계정이 속한 Site에 계정이 1개만 있는 경우, Site도 함께 삭제됩니다.
  • Admin 권한 계정이 1개만 남았고 다른 계정이 있는 경우 삭제할 수 없습니다.
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "권한이 없습니다."
}

발생 가능한 에러 메시지:

  • "권한이 없습니다." - 본인 계정이 아닌 다른 계정을 삭제하려 할 때
  • "유효하지 않은 계정 정보입니다." - 계정을 찾을 수 없거나 비밀번호가 일치하지 않음
  • "삭제할 수 없는 계정입니다." - Admin이 1명만 남아있고 다른 계정이 있을 때
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[POST] /v1/accounts - 계정 생성

계정 생성

관리자가 직접 새로운 계정을 생성합니다.

[클라이언트 수정 필요]
asis: /v1/accounts
tobe: /v1/auth/accounts

  • HTTP Method: POST
  • 인증: 액세스 토큰 (accessToken) 필요

Headers

HeaderTypeDescriptionRequired
AuthorizationBearer {accessToken}사용자 인증을 통해 발급받은 액세스 토큰 입니다.
Content-Typeapplication/json요청 본문 형식

Request Body

필드타입설명Required
emailstring이메일
passwordstring비밀번호
namestring이름
phoneNumberstring전화번호
siteIdnumberSite ID
positionIdnumberPosition ID (1: STUDY_ADMIN, 2: ADMIN, 3: MEMBER, 4: SITE_ADMIN, 5: SITE_MEMBER)
authorizedToPrescribeboolean처방 권한 부여 여부

Request Body 예시

{
"email": "doctor@weltcorp.com",
"password": "password123!",
"name": "홍길동",
"phoneNumber": "01012345678",
"siteId": 1,
"positionId": 3,
"authorizedToPrescribe": true
}

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
}
필드타입설명
successboolean성공 여부 (true)
400 Bad Request - 잘못된 요청
{
"status": 400,
"code": 40000,
"message": "이미 존재하는 계정입니다."
}

발생 가능한 에러 메시지:

  • "이미 존재하는 계정입니다." - 해당 이메일이 이미 등록됨
  • "유효하지 않은 전화번호 형식입니다." - 전화번호 형식이 잘못됨
  • "비밀번호는 10~20자리여야 합니다." - 비밀번호 길이 규칙 위반
  • "비밀번호는 숫자/문자/특수문자 중 2가지 이상을 포함해야 합니다." - 비밀번호 복잡도 규칙 위반
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[GET] /v1/accounts/sites/{siteId} - Site별 계정 목록 조회

Site별 계정 목록 조회

특정 Site에 속한 계정 목록을 조회합니다.

[클라이언트 수정 필요]
asis: /v1/accounts/sites/{siteId}
tobe: /v1/auth/accounts/sites/{siteId}

  • HTTP Method: GET
  • 인증: 액세스 토큰 (accessToken) 필요

Headers

HeaderTypeDescriptionRequired
AuthorizationBearer {accessToken}사용자 인증을 통해 발급받은 액세스 토큰 입니다.

Request Parameters

필드타입위치설명Required
siteIdnumberpathSite ID
pagenumberquery페이지 번호 (기본값: 1)
limitnumberquery페이지 크기 (기본값: 10)

Responses

Http Status Code설명Error Code(s)
200 OK조회 성공-
401 Unauthorized인증 실패UNAUTHORIZED (40100)
500 Internal Server Error서버 내부 오류INTERNAL_SERVER_ERROR (50000)
200 OK - 성공
{
"totalCount": 25,
"count": 10,
"data": [
{
"id": 1,
"email": "doctor@weltcorp.com",
"name": "홍길동",
"phoneNumber": "010-****-5678",
"site": {
"id": 1,
"name": "서울대병원",
"clinicalResearch": false
},
"roles": [1, 2],
"position": "MEMBER",
"authorizedToPrescribe": true,
"createdAt": "2024-01-01T00:00:00Z"
}
]
}
필드타입설명
totalCountnumber전체 계정 수
countnumber현재 페이지의 계정 수
dataarray계정 목록 (전화번호 마스킹)
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}
[GET] /v1/accounts/sites/{siteId}/invite - Site별 초대 목록 조회

Site별 초대 목록 조회

특정 Site의 초대 목록을 조회합니다. 승인되지 않은 초대만 조회됩니다.

[클라이언트 수정 필요]
asis: /v1/accounts/sites/{siteId}/invite
tobe: /v1/auth/accounts/sites/{siteId}/invite

  • HTTP Method: GET
  • 인증: 액세스 토큰 (accessToken) 필요

Headers

HeaderTypeDescriptionRequired
AuthorizationBearer {accessToken}사용자 인증을 통해 발급받은 액세스 토큰 입니다.

Request Parameters

필드타입위치설명Required
siteIdnumberpathSite ID
pagenumberquery페이지 번호 (기본값: 1)
limitnumberquery페이지 크기 (기본값: 10)

Responses

Http Status Code설명Error Code(s)
200 OK조회 성공-
401 Unauthorized인증 실패UNAUTHORIZED (40100)
500 Internal Server Error서버 내부 오류INTERNAL_SERVER_ERROR (50000)
200 OK - 성공
{
"totalCount": 5,
"count": 5,
"data": [
{
"id": 1,
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"site": {
"id": 1,
"name": "서울대병원",
"clinicalResearch": false
},
"email": "doctor@weltcorp.com",
"position": "MEMBER",
"authorizedToPrescribe": true,
"expiresAt": "2024-12-31T23:59:59Z"
}
]
}
필드타입설명
totalCountnumber전체 초대 수
countnumber현재 페이지의 초대 수
dataarray초대 목록
401 Unauthorized - 인증 실패
{
"status": 401,
"code": 40100,
"message": "UNAUTHORIZED"
}
500 Internal Server Error - 서버 내부 오류
{
"status": 500,
"code": 50000,
"message": "INTERNAL_SERVER_ERROR"
}