# API 문서
## User 관련
### 로그인
----
사용자 로그인 기능 제공
* URL
`/api/v1/login`
* Method:
`POST`
* URL Params
Required:
None
* Body
```JSON
{
email : String,
password : String
}
```
* Success Response:
* Code: 200 OK
Content:
```json
{
token_type : String,
access_token : String,
refresh_token : String,
user_id : Long,
email : String
}
```
* Error Response:
* Password를 잘못 입력한경우
* Code: 400 BAD REQUEST
Content:
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
* Email을 잘못 입력하거나, 없는 Email인 경우
* Code: 404 NOT FOUND
Content:
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
### 회원가입
----
사용자 회원가입 기능 제공
* URL
`/api/v1/signup`
* Method:
`POST`
* URL Params
Required:
None
* Body
```JSON
{
email : String,
password : String,
nickname : String
}
```
* Success Response:
* Code: 201 CREATED
Content:
```json
{
userId : Long
}
```
> 201 CREATED : 회신 메시지의 body에 생성된 자원을 동봉해야 하지만, 그냥 일단 userId만 포함시켰음
* Error Response:
* Email이 중복되었거나, Nickname이 중복된 경우
* Code: 409 CONFLICT
Content:
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
### 이메일 검증
----
사용자 회원가입시, 이메일 중복 검사 기능 제공
* URL
`/api/v1/users/validation?email={email}`
* Method:
`GET`
* Query Params
Required:
`email : String`
* Body
None
* Success Response:
* Code: 204 NO CONTENT
Content:
None
* Error Response:
* Email이 중복된 경우
* Code: 409 CONFLICT
Content:
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
### 별명 검증
----
사용자 회원가입시, 별명 중복 검사 기능 제공
* URL
`/api/v1/users/validation?nickname={nickname}`
* Method:
`GET`
* URL Params
Required:
`nickname : String`
* Body
None
* Success Response:
* Code: 204 NO CONTENT
Content:
None
* Error Response:
* Nickname이 중복된 경우
* Code: 409 CONFLICT
Content:
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
### 비밀번호 수정하기
----
사용자의 정보를 수정하는 기능
* URL
`/api/v1/users/{user_id}`
* Method:
`PUT`
* URL Params
Required:
`user_id : Long`
* Body
```json
{
beforePassword : String,
afterPassword : String
}
```
* Success Response:
* Code: 200 OK
Content:
```json
{
email : String,
nickname : String
}
```
* Error Response:
* 존재하지 않는 User인 경우(User id가 잘못되었을경우)
* Code: 404 NOT FOUND
Content:
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
* BeforePassword가 User의 비밀번호와 다를경우
* Code: 400 BAD REQUEST
Content:
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
### 유저 탈퇴하기
----
사용자 탈퇴기능
* URL
`/api/v1/users/{user_id}`
* Method:
`DELETE`
* URL Params
Required:
`user_id : Long`
* Body
None
* Success Response:
* Code: 200 OK
Content:
```json
{
userId : Long
}
```
* Error Response:
* Code: 401 UNAUTHORIZED
Content
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
* Code: 400 BAD REQUEST
Content
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
### 유저 로그아웃하기
----
유저 로그아웃하는 기능, Redis에 저장된 정보를 삭제하고, 사용했던 AccessToken을 Lock한다.
* URL
`/api/v1/logout`
* Method:
`POST`
* URL Params
Required:
None
* Body
```json
{
email : String,
uuid : String,
access_token : String
}
```
* Success Response:
* Code: 200 OK
Content:
```json
{
true
}
```
* Error Response:
* Code: 401 UNAUTHORIZED
Content
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
* Code: 400 BAD REQUEST
Content:
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
### 유저 로그아웃하기
----
유저 로그아웃하는 기능, Redis에 저장된 정보를 삭제하고, 사용했던 AccessToken을 Lock한다.
* URL
`/api/v1/refresh`
* Method:
`POST`
* URL Params
Required:
None
* Body
```json
{
email : String,
uuid : String,
access_token : String
}
```
* Success Response:
* Code: 204 NO CONTENT
Content:
None
Header :
Authorization : AccessToken
* Error Response:
* Code: 401 UNAUTHORIZED
Content
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```
* Code: 400 BAD REQUEST
Content:
```json
{
errorMsg : String,
statusCode : String,
uriRequested : String,
timestamp : String
}
```