---
description: 여행에 대한 회고 관련 API
---

# REWIND



## 통합 REWIND 작성

<mark style="color:green;">`POST`</mark> `api/v1/travels/{travelId}/rewinds`

특정 여행에 대한 특정 날짜의 최초 회고를 작성합니다.

해당 여행일(date) 에 해당하는 회고가 존재하지 않을 경우 새 회고를 생성합니다.

해당 여행일(date) 에 해당하는 회고가 존재한다면 유저는 아래의 URL을 통해 API를 요청해야 합니다. <mark style="color:green;">travels/{travelId}/rewinds/{rewindId}/users</mark>



note : ERD변경 필요 -> 회고 (1)- 개별회고(m) , 개별회고 (1) - 개별회고QNA(m), 개별회고의 컬럼에 mood, 오늘의 한마디 넣기&#x20;



**Request Body**

{

&#x20;      "date" : "2023-01-05",

&#x20;      "mvpPick" : <mark style="color:orange;">userId (Long)</mark>

&#x20;      "mood" : "good",

&#x20;      "qna" :  {

&#x20;                      "question1": <mark style="color:blue;">questionId (Long)</mark> , "answer1" :  "답변1", &#x20;

&#x20;                      "question2": <mark style="color:blue;">questionId (Long)</mark> , "answer2" :  "답변2",

&#x20;                      "question3": <mark style="color:blue;">questionId (Long)</mark> , "answer3" :  "답변3"

&#x20;                    },

&#x20;      "comment" : "오늘의 한마디"&#x20;

}

#### Path Parameters

| Name                                       | Type | Description |
| ------------------------------------------ | ---- | ----------- |
| travelId<mark style="color:red;">\*</mark> | Long | 여행 Id       |

#### Headers

| Name                                            | Type   | Description  |
| ----------------------------------------------- | ------ | ------------ |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer Token |

{% tabs %}
{% tab title="201: Created 성공" %}
```json
"rewindId" : rewindId
"createdAt" : "2023-01-05T10:00:00"
```
{% endtab %}

{% tab title="400: Bad Request 4001 - 이미 존재하는 회고 날짜" %}

{% endtab %}
{% endtabs %}

## 개별 REWIND 작성

<mark style="color:green;">`POST`</mark> `api/v1/travels/{travelId}/rewinds/{rewindId}/users`

특정 여행에 대한 특정 날짜의 회고에 해당하는 개별 회고를 작성합니다.

작성된 개별 회고의 데이터는 통합 회고에 연결됩니다.

**Request Body**

{

&#x20;      "mvpPick" : <mark style="color:orange;">userId (Long)</mark>

&#x20;      "mood" : "good",

&#x20;      "qna" :  {

&#x20;                      "question1": <mark style="color:blue;">questionId (Long)</mark> , "answer1" :  "답변1", &#x20;

&#x20;                      "question2": <mark style="color:blue;">questionId (Long)</mark> , "answer2" :  "답변2",

&#x20;                      "question3": <mark style="color:blue;">questionId (Long)</mark> , "answer3" :  "답변3"

&#x20;                    },

&#x20;      "comment" : "오늘의 한마디"&#x20;

}

#### Path Parameters

| Name                                       | Type | Description |
| ------------------------------------------ | ---- | ----------- |
| travelId<mark style="color:red;">\*</mark> | Long | 여행 Id       |
| rewindId<mark style="color:red;">\*</mark> | Long | 회고 Id       |

#### Headers

| Name                                            | Type   | Description  |
| ----------------------------------------------- | ------ | ------------ |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer Token |

{% tabs %}
{% tab title="201: Created " %}
```json
"createdAt" : "2023-01-05T10:00:00"
```
{% endtab %}
{% endtabs %}

## 특정 여행의 모든 REWIND 목록 조회

<mark style="color:blue;">`GET`</mark> `api/v1/travels/{travelId}/rewinds`

특정 여행에 대한 모든 통합 회고 목록을 조회합니다.

#### Path Parameters

| Name                                       | Type | Description |
| ------------------------------------------ | ---- | ----------- |
| travelId<mark style="color:red;">\*</mark> | Long | 여행 Id       |

#### Headers

| Name                                            | Type   | Description  |
| ----------------------------------------------- | ------ | ------------ |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer Token |

{% tabs %}
{% tab title="200: OK " %}
```json
[
    {
      "rewindId" : rewindId (Long)
      "date" : "2023-01-05"
      "createdAt" : "2023-01-05T23:00:00",
      "updatedAt" : "2023-01-05T23:00:00" 
    },
    {
      "rewindId" : rewindId (Long)
      "date" : "2023-01-06"
      "createdAt" : "2023-01-06T23:00:00",
      "updatedAt" : "2023-01-06T23:00:00" 
    },
    {
      "rewindId" : rewindId (Long)
      "date" : "2023-01-07"
      "createdAt" : "2023-01-07T23:00:00",
      "updatedAt" : "2023-01-07T23:00:00" 
    }   
] 
```
{% endtab %}
{% endtabs %}

## 통합 REWIND 조회

<mark style="color:blue;">`GET`</mark> `api/v1/travels/{travelId}/rewinds/{rewindId}`

특정 여행에 대한 특정 통합 회고를 조회합니다.

#### Path Parameters

| Name                                       | Type | Description |
| ------------------------------------------ | ---- | ----------- |
| travelId<mark style="color:red;">\*</mark> | Long | 여행 Id       |
| rewindId<mark style="color:red;">\*</mark> | Long | 회고 Id       |

#### Headers

| Name                                            | Type   | Description  |
| ----------------------------------------------- | ------ | ------------ |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer Token |

{% tabs %}
{% tab title="200: OK 성공" %}
```json
"date" : "2023-01-05"
"mvp" : userId (Long)
"individualRewinds" : 
[
    {  
       "writerId" : userId (Long) //작성자 id
       "mvpPick" : userId (Long) //선택한 mvp 후보
       "mood" : "good",
       "qna" :  { 
                 "question1": questionId (Long) , "answer1" :  "답변1",  
                 "question2": questionId (Long) , "answer2" :  "답변2",
                 "question3": questionId (Long) , "answer3" :  "답변3"
                },
       "comment" : "오늘의 한마디",
       "createdAt" : "2023-01-05T23:00:00",
       "updatedAt" : "2023-01-05T23:00:00"
    },
    {  
       "writerId" : userId (Long) //작성자 id
       "mvpPick" : userId (Long) //선택한 mvp 후보
       "mood" : "good",
       "qna" :  { 
                 "question1": questionId (Long) , "answer1" :  "답변1",  
                 "question2": questionId (Long) , "answer2" :  "답변2",
                 "question3": questionId (Long) , "answer3" :  "답변3"
                },
       "comment" : "오늘의 한마디",
       "createdAt" : "2023-01-05T23:30:30",
       "updatedAt" : "2023-01-05T23:30:30" 
    },
    {  
       "writerId" : userId (Long) //작성자 id
       "mvpPick" : userId (Long) //선택한 mvp 후보
       "mood" : "good",
       "qna" :  { 
                 "question1": questionId (Long) , "answer1" :  "답변1",  
                 "question2": questionId (Long) , "answer2" :  "답변2",
                 "question3": questionId (Long) , "answer3" :  "답변3"
                },
       "comment" : "오늘의 한마디",
       "createdAt" : "2023-01-05T23:59:00",
       "updatedAt" : "2023-01-05T23:59:00" 
    }
]
```
{% endtab %}
{% endtabs %}

## 개별 REWIND 조회

<mark style="color:blue;">`GET`</mark> `api/v1/travels/{travelId}/rewinds/{rewindId}/users/{userId}`

특정 여행의 특정 통합 회고에 대한 특정 개별 회고를 조회합니다.

#### Path Parameters

| Name                                       | Type | Description |
| ------------------------------------------ | ---- | ----------- |
| travelId<mark style="color:red;">\*</mark> | Long | 여행 id       |
| rewindId<mark style="color:red;">\*</mark> | Long | 회고 Id       |
| userId<mark style="color:red;">\*</mark>   | Long | 유저 id (작성자) |

#### Headers

| Name                                            | Type   | Description  |
| ----------------------------------------------- | ------ | ------------ |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer Token |

{% tabs %}
{% tab title="200: OK 성공" %}
```json
"mvpPick" : userId (Long) //선택한 mvp 후보
"mood" : "good",
"qna" : { 
          "question1": questionId (Long) , "answer1" :  "답변1",  
          "question2": questionId (Long) , "answer2" :  "답변2",
          "question3": questionId (Long) , "answer3" :  "답변3"
        },
"comment" : "오늘의 한마디",
"createdAt" : "2023-01-05T23:00:00",
"updatedAt" : "2023-01-05T23:00:00"
```
{% endtab %}
{% endtabs %}



## 개별 REWIND 수정

<mark style="color:purple;">`PATCH`</mark> `api/v1/travels/{travelId}/rewinds/{rewindId}/users/{userId}`

특정 여행의 공통 회고에 대한 개별 회고를 수정합니다.

**Request Body**

{

&#x20;      "mvpPick" : <mark style="color:orange;">userId (Long)</mark>

&#x20;      "mood" : "bad",

&#x20;      "qna" :  {

&#x20;                      "answer1" :  "수정된 답변1", &#x20;

&#x20;                      "answer2" :  "수정된 답변2",

&#x20;                      "answer3" :  "수정된 답변3"

&#x20;                    },

&#x20;      "comment" : "수정된 오늘의 한마디"&#x20;



#### Path Parameters

| Name                                       | Type | Description    |
| ------------------------------------------ | ---- | -------------- |
| travelId<mark style="color:red;">\*</mark> | Long | 여행 id          |
| rewindId<mark style="color:red;">\*</mark> | Long | 회고 id          |
| userId<mark style="color:red;">\*</mark>   | Long | 유저 id (작성자 id) |

#### Headers

| Name                                            | Type   | Description  |
| ----------------------------------------------- | ------ | ------------ |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer Token |

{% tabs %}
{% tab title="200: OK " %}
```json
"updatedAt" : "2023-01-06T09:00:00"
```
{% endtab %}
{% endtabs %}

## 개별 REWIND 삭제

<mark style="color:red;">`DELETE`</mark> `api/v1/travels/{travelId}/rewinds/{rewindId}/users/{userId}`

특정 여행의 공통 회고에 대한 개별 회고를 삭제합니다.

#### Path Parameters

| Name                                       | Type | Description    |
| ------------------------------------------ | ---- | -------------- |
| travelId<mark style="color:red;">\*</mark> | Long | 여행 id          |
| rewindId<mark style="color:red;">\*</mark> | Long | 회고 id          |
| userId<mark style="color:red;">\*</mark>   | Long | 유저 id (작성자 id) |

#### Headers

| Name                                            | Type   | Description  |
| ----------------------------------------------- | ------ | ------------ |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer Token |

{% tabs %}
{% tab title="204: No Content 성공" %}

{% endtab %}
{% endtabs %}

