---
# System prepended metadata

title: API 문서

---

# 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
      }
    ```