Bottle Note Admin API ๋ฌธ์
- 1. ๊ฐ์ (overview)
- 2. Auth API
- 3. Alcohol API
- 4. Help API
- 5. File API
- 6. Tasting Tag API
- 7. Reference API
- 8. Curation API
- 8.1. ํ๋ ์ด์ ๋ชฉ๋ก ์กฐํ
- 8.2. ํ๋ ์ด์ ์์ธ ์กฐํ
- 8.3. ํ๋ ์ด์ ์์ฑ
- 8.4. ํ๋ ์ด์ ์์
- 8.5. ํ๋ ์ด์ ์ญ์
- 8.6. ํ๋ ์ด์ ํ์ฑํ ์ํ ๋ณ๊ฒฝ
- 8.7. ํ๋ ์ด์ ๋ ธ์ถ ์์ ๋ณ๊ฒฝ
- 8.8. ํ๋ ์ด์ bulk reorder
- 8.9. ํ๋ ์ด์ ์ ์์คํค ์ถ๊ฐ
- 8.10. ํ๋ ์ด์ ์์ ์์คํค ์ ๊ฑฐ
- 8.11. ํ๋ ์ด์ ์คํ ๋ชฉ๋ก ์กฐํ
- 8.12. ํ๋ ์ด์ ์คํ ์์ธ ์กฐํ
- 8.13. Spec ๊ธฐ๋ฐ ํ๋ ์ด์ ๋ชฉ๋ก ์กฐํ
- 8.14. Spec ๊ธฐ๋ฐ ํ๋ ์ด์ ์์ธ ์กฐํ
- 8.15. Spec ๊ธฐ๋ฐ ํ๋ ์ด์ ์์ฑ
- 8.16. Spec ๊ธฐ๋ฐ ํ๋ ์ด์ ์์
- 9. Users API
- 10. Review API
- 11. Banner API
1. ๊ฐ์ (overview)
๋ก๊ทธ์ธ API๋ฅผ ์ ์ธํ ๋ชจ๋ API๋ Authorization ํค๋์ ์ ํจํ ์ก์ธ์ค ํ ํฐ์ด ํ์ํฉ๋๋ค.
|
|
ํด๋น ํ๋ก์ ํธ API๋ฌธ์๋ ๊ฐ๋ฐํ๊ฒฝ๊น์ง ๋
ธ์ถ๋๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. |
1.2. ์๋ตํ์
ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ตํ์์ ์ ๊ณตํฉ๋๋ค.
์์ฒญ ๊ฒฐ๊ณผ
| ์์ฒญ์ด ์ฑ๊ณตํ ๊ฒฝ์ฐ ( "success" : true ) | ์์ฒญ์ด ์คํจํ ๊ฒฝ์ฐ( "success" : false ) |
|---|---|
|
|
-
๊ธฐ๋ณธ์ ์ผ๋ก success , code , data , errors , meta ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
-
success : ์์ฒญ ์ฑ๊ณต ์ฌ๋ถ
-
code : ์์ฒญ ๊ฒฐ๊ณผ ์ฝ๋ (http status code ์ ๋์ผํฉ๋๋ค.)
-
data : ์์ฒญ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ( success๊ฐ true์ธ ๊ฒฝ์ฐ )
-
errors : ์์ฒญ ๊ฒฐ๊ณผ ์๋ฌ ( success๊ฐ false์ธ ๊ฒฝ์ฐ )
-
meta : ์์ฒญ ๊ฒฐ๊ณผ ๋ฉํ์ ๋ณด ( ์๋ฒ ์๋ต ์ ๋ณด, ๊ธฐ์กด ๊ฒ์ ์ ๋ณด , page ์ ๋ณด ๋ฑ)
-
-
๋๋ฝ๋ ์ ๋ณด๋ ์๋ฒ ๋ฐฑ์๋ ํ์๊ฒ ๋ฌธ์ํด์ฃผ์ธ์.
1.3. ๊ณตํต ์์ธ ์ฒ๋ฆฌ
๊ณตํต์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ์์ธ๋ฅผ ์ ๋ฆฌํ๋ ๋ด์ฉ์ ๋๋ค.
success ์ฝ๋๊ฐ false์ธ ๊ฒฝ์ฐ errors ๊ฐ์ ํ์ธ ๋ฐ๋๋๋ค.
๊ณตํต์ ์ธ ์์ธ์ ์ข ๋ฅ์๋ ์ด๋ฐ ๊ฐ๋ค์ด ์์ต๋๋ค.
-
์ซ์ ๊ฐ์ด ํ์ํ๋ฐ ๋ฌธ์์ด ๊ฐ์ด ๋ค์ด์จ ๊ฒฝ์ฐ
POST http://localhost:8080/admin/api/v1/example
Content-Type: application/json
{
"userId": "์ผ", // ์ซ์ ๊ฐ์ด ํ์ํ๋ฐ ๋ฌธ์์ด ๊ฐ์ด ๋ค์ด์จ ๊ฒฝ์ฐ
"targetId": 0,
"type": "EXAMPLE",
"content": "๋ด์ฉ"
}
{
"success": false,
"code": 400,
"data": [],
"errors": {
"message": "'userId' ํ๋์ ๊ฐ์ด ์๋ชป๋์์ต๋๋ค. ํด๋น ํ๋์ ๊ฐ์ ํ์
์ ํ์ธํด์ฃผ์ธ์."
},
"meta": {
"serverVersion": "1.0.0",
"serverEncoding": "UTF-8",
"serverResponseTime": "2024-04-19T22:28:52.428425",
"serverPathVersion": "v1"
}
}
-
ํ์์ ์ธ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
POST http://localhost:8080/admin/api/v1/example
Content-Type: application/json
{
"userId": "", // ํ์์ ์ธ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
"targetId": 0,
"type": "EXAMPLE",
"content": "๋ด์ฉ"
}
{
"success": false,
"code": 400,
"data": [],
"errors": {
"userId": "์ฌ์ฉ์ ์์ด๋๋ ํ์์
๋๋ค."
},
"meta": {
"serverVersion": "1.0.0",
"serverEncoding": "UTF-8",
"serverResponseTime": "2024-04-19T22:31:48.742731",
"serverPathVersion": "v1"
}
}
-
๋๋ฝ๋ ์ ๋ณด๋ ์๋ฒ ๋ฐฑ์๋ ํ์๊ฒ ๋ฌธ์ํด์ฃผ์ธ์.
-
์ถ๊ฐ๋์์ผ๋ฉด ์ข์ ์ ๋ณด๊ฐ ์์ผ๋ฉด ์๋ฒ ๋ฐฑ์๋ ํ์๊ฒ ๋ฌธ์ํด์ฃผ์ธ์.
2. Auth API
2.1. ๋ก๊ทธ์ธ
-
๊ด๋ฆฌ์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ์ฌ ์ก์ธ์ค ํ ํฐ๊ณผ ๋ฆฌํ๋ ์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ต๋๋ค.
POST /admin/api/v1/auth/login
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๊ด๋ฆฌ์ ์ด๋ฉ์ผ |
|
|
๋น๋ฐ๋ฒํธ |
POST /v1/auth/login HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 68
Host: localhost:8080
{
"email" : "admin@bottlenote.com",
"password" : "password123"
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ก์ธ์ค ํ ํฐ |
|
|
๋ฆฌํ๋ ์ ํ ํฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 358
{
"success" : true,
"code" : 200,
"data" : {
"accessToken" : "so9UjlTPUTpQe0Buhh66pIeABCiGuFbq",
"refreshToken" : "gUHtQCCqQIdn6jxUMUQHFVKwpv3rW3xj"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.860221286",
"serverPathVersion" : "v1"
}
}
2.2. ํ ํฐ ๊ฐฑ์
-
๋ฆฌํ๋ ์ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ต๋๋ค.
POST /admin/api/v1/auth/refresh
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋ฆฌํ๋ ์ ํ ํฐ |
POST /v1/auth/refresh HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 47
Host: localhost:8080
{
"refreshToken" : "existing_refresh_token"
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ ์ก์ธ์ค ํ ํฐ |
|
|
์ ๋ฆฌํ๋ ์ ํ ํฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 358
{
"success" : true,
"code" : 200,
"data" : {
"accessToken" : "FSI4hpFmX8W3atOO7Rr75lOqn8pa1aZY",
"refreshToken" : "OtauoJweEziJX1kjpZAR7kH0x0nVY5e1"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.886586895",
"serverPathVersion" : "v1"
}
}
2.3. ํ์๊ฐ์
-
์ธ์ฆ๋ ๊ด๋ฆฌ์๊ฐ ์๋ก์ด ๊ด๋ฆฌ์ ๊ณ์ ์ ์์ฑํฉ๋๋ค.
-
๋ชจ๋ ์ธ์ฆ๋ ์ด๋๋ฏผ์ด ํธ์ถ ๊ฐ๋ฅํฉ๋๋ค.
-
ROOT_ADMIN ์ญํ ์ ROOT_ADMIN๋ง ๋ถ์ฌํ ์ ์์ต๋๋ค.
POST /admin/api/v1/auth/signup
์์ฒญ ํค๋
| Name | Description |
|---|---|
|
Bearer ์ก์ธ์ค ํ ํฐ |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์ด๋๋ฏผ ์ด๋ฉ์ผ |
|
|
๋น๋ฐ๋ฒํธ (8~35์) |
|
|
์ด๋๋ฏผ ์ด๋ฆ (2~50์) |
|
|
์ญํ ๋ชฉ๋ก (ROOT_ADMIN, PARTNER, CLIENT, BAR_OWNER, COMMUNITY_MANAGER) |
AdminRole (๊ด๋ฆฌ์ ์ญํ )
| ๊ฐ | ์ค๋ช |
|---|---|
|
์ต๊ณ ๊ด๋ฆฌ์ |
|
ํํธ๋์ฌ |
|
๊ณ ๊ฐ์ฌ |
|
๋ฐ/๋งค์ฅ ์ฌ์ฅ๋ |
|
์ปค๋ฎค๋ํฐ ๋งค๋์ |
POST /v1/auth/signup HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer test_access_token
Content-Length: 142
Host: localhost:8080
{
"email" : "new@bottlenote.com",
"password" : "password123",
"name" : "์ ์ด๋๋ฏผ",
"roles" : [ "PARTNER", "COMMUNITY_MANAGER" ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์์ฑ๋ ์ด๋๋ฏผ ID |
|
|
์ด๋๋ฏผ ์ด๋ฉ์ผ |
|
|
์ด๋๋ฏผ ์ด๋ฆ |
|
|
๋ถ์ฌ๋ ์ญํ ๋ชฉ๋ก |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 379
{
"success" : true,
"code" : 200,
"data" : {
"adminId" : 1,
"email" : "new@bottlenote.com",
"name" : "์ ์ด๋๋ฏผ",
"roles" : [ "PARTNER", "COMMUNITY_MANAGER" ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.82390184",
"serverPathVersion" : "v1"
}
}
2.4. ํํด
-
์ธ์ฆ๋ ๊ด๋ฆฌ์ ๊ณ์ ์ ํํด ์ฒ๋ฆฌํฉ๋๋ค.
DELETE /admin/api/v1/auth/withdraw
์์ฒญ ํค๋
| Name | Description |
|---|---|
|
Bearer ์ก์ธ์ค ํ ํฐ |
DELETE /v1/auth/withdraw HTTP/1.1
Authorization: Bearer test_access_token
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 294
{
"success" : true,
"code" : 200,
"data" : {
"message" : "ํํด ์ฒ๋ฆฌ๋์์ต๋๋ค."
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.778230037",
"serverPathVersion" : "v1"
}
}
3. Alcohol API
3.1. ์ (Alcohol) ๋ชฉ๋ก ์กฐํ
-
๊ด๋ฆฌ์์ฉ ์ ๋ชฉ๋ก ์กฐํ API์ ๋๋ค.
-
ํค์๋ ๊ฒ์, ์นดํ ๊ณ ๋ฆฌ ํํฐ, ์ ๋ ฌ, ํ์ด์ง์ ์ง์ํฉ๋๋ค.
GET /admin/api/v1/alcohols
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๊ฒ์์ด (ํ๊ธ/์๋ฌธ ์ด๋ฆ ๊ฒ์) |
|
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน ํํฐ (์: SINGLE_MALT, BLEND ๋ฑ) |
|
์ง์ญ ID ํํฐ |
|
์ ๋ ฌ ๊ธฐ์ค (KOR_NAME, ENG_NAME, KOR_CATEGORY, ENG_CATEGORY / ๊ธฐ๋ณธ๊ฐ: KOR_NAME) |
|
์ ๋ ฌ ๋ฐฉํฅ (๊ธฐ๋ณธ๊ฐ: ASC) |
|
ํ์ด์ง ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 20) |
AlcoholCategoryGroup (์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน)
| ๊ฐ | ์ค๋ช |
|---|---|
|
์ฑ๊ธ๋ชฐํธ ์์คํค |
|
๋ธ๋ ๋๋ ์์คํค |
|
๋ธ๋ ๋๋ ๋ชฐํธ ์์คํค |
|
๋ฒ๋ฒ ์์คํค |
|
๋ผ์ด ์์คํค |
|
๊ธฐํ ์์คํค |
$ curl 'http://localhost:8080/v1/alcohols?keyword=%EA%B8%80%EB%A0%8C&category=SINGLE_MALT®ionId=1&sortType=KOR_NAME&sortOrder=ASC&page=0&size=20' -i -X GET
GET /v1/alcohols?keyword=%EA%B8%80%EB%A0%8C&category=SINGLE_MALT®ionId=1&sortType=KOR_NAME&sortOrder=ASC&page=0&size=20 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ ๋ชฉ๋ก ๋ฐ์ดํฐ |
|
|
์ ID |
|
|
์ ํ๊ธ ์ด๋ฆ |
|
|
์ ์๋ฌธ ์ด๋ฆ |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์ ์ด๋ฏธ์ง URL |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์ญ์ ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
ํ์ฌ ํ์ด์ง ๋ฒํธ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
์ ์ฒด ์์ ์ |
|
|
์ ์ฒด ํ์ด์ง ์ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1020
{
"success" : true,
"code" : 200,
"data" : [ {
"alcoholId" : 1,
"korName" : "ํ
์คํธ ์์คํค 1",
"engName" : "Test Whisky 1",
"korCategoryName" : "์ฑ๊ธ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "https://example.com/image.jpg",
"createdAt" : "2024-01-01T00:00:00",
"modifiedAt" : "2024-06-01T00:00:00",
"deletedAt" : null
}, {
"alcoholId" : 2,
"korName" : "ํ
์คํธ ์์คํค 2",
"engName" : "Test Whisky 2",
"korCategoryName" : "์ฑ๊ธ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "https://example.com/image.jpg",
"createdAt" : "2024-02-01T00:00:00",
"modifiedAt" : "2024-07-01T00:00:00",
"deletedAt" : null
} ],
"errors" : [ ],
"meta" : {
"page" : 0,
"size" : 20,
"totalElements" : 2,
"totalPages" : 1,
"hasNext" : false,
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-05T16:33:05.780995547",
"serverPathVersion" : "v1"
}
}
3.2. ์ (Alcohol) lookup ์กฐํ
-
๊ด๋ฆฌ์ ์ ํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ํต์ฌ ํ๋ ๊ธฐ๋ฐ์ ๊ณ ์ ์กฐํ API์ ๋๋ค.
-
๋ณ์ , ์ข์์, ๋ฆฌ๋ทฐ ์, ์ฌ์ฉ์ pick ์ฌ๋ถ ๊ฐ์ ์ง๊ณ์ฑ ๋ฐ์ดํฐ๋ ํฌํจํ์ง ์์ต๋๋ค.
GET /admin/api/v1/alcohols/lookup
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๊ฒ์์ด (์ด๋ฆ, ์นดํ ๊ณ ๋ฆฌ, ์ง์ญ, ์ฆ๋ฅ์ ๋์) |
|
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน ํํฐ. ALL ๋๋ ๋ฏธ์ ๋ฌ ์ ์ ์ฒด |
|
์ง์ญ ID ํํฐ |
|
์ฆ๋ฅ์ ID ํํฐ |
|
์ปค์ ์์น (๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 20, ์ต๋: 100) |
$ curl 'http://localhost:8080/v1/alcohols/lookup?keyword=macallan&category=SINGLE_MALT®ionId=1&distilleryId=10&cursor=0&pageSize=20' -i -X GET
GET /v1/alcohols/lookup?keyword=macallan&category=SINGLE_MALT®ionId=1&distilleryId=10&cursor=0&pageSize=20 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ lookup ๋ชฉ๋ก |
|
|
์ ID |
|
|
์ ํ๊ธ ์ด๋ฆ |
|
|
์ ์๋ฌธ ์ด๋ฆ |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน |
|
|
์ง์ญ ID |
|
|
์ง์ญ ํ๊ธ๋ช |
|
|
์ง์ญ ์๋ฌธ๋ช |
|
|
์ฆ๋ฅ์ ID |
|
|
์ฆ๋ฅ์ ํ๊ธ๋ช |
|
|
์ฆ๋ฅ์ ์๋ฌธ๋ช |
|
|
์ ์ด๋ฏธ์ง URL |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
|
|
๊ฒ์ ์กฐ๊ฑด |
|
|
๊ฒ์์ด |
|
|
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน ํํฐ |
|
|
์ง์ญ ID ํํฐ |
|
|
์ฆ๋ฅ์ ID ํํฐ |
|
|
์ปค์ ์์น |
|
|
ํ์ด์ง ํฌ๊ธฐ |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 998
{
"success" : true,
"code" : 200,
"data" : [ {
"alcoholId" : 1,
"korName" : "๋งฅ์บ๋ 12๋
",
"engName" : "Macallan 12",
"korCategoryName" : "์ฑ๊ธ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"categoryGroup" : "SINGLE_MALT",
"regionId" : 1,
"korRegion" : "์คํ์ด์ฌ์ด๋",
"engRegion" : "Speyside",
"distilleryId" : 10,
"korDistillery" : "๋งฅ์บ๋",
"engDistillery" : "Macallan",
"imageUrl" : "https://example.com/alcohol.png"
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:06.800911148",
"pageable" : {
"currentCursor" : 0,
"cursor" : 20,
"pageSize" : 20,
"hasNext" : false
},
"searchParameters" : {
"keyword" : "macallan",
"category" : "SINGLE_MALT",
"regionId" : 1,
"distilleryId" : 10,
"cursor" : 0,
"pageSize" : 20
},
"serverPathVersion" : "v1"
}
}
3.3. ์ (Alcohol) ๋จ๊ฑด ์์ธ ์กฐํ
-
๊ด๋ฆฌ์์ฉ ์ ๋จ๊ฑด ์์ธ ์กฐํ API์ ๋๋ค.
-
๊ธฐ๋ณธ ์ ๋ณด, ์นดํ ๊ณ ๋ฆฌ, ์คํ, ์ง์ญ, ์ฆ๋ฅ์, ํ ์ด์คํ ํ๊ทธ, ํต๊ณ ์ ๋ณด๋ฅผ ๋ชจ๋ ํฌํจํฉ๋๋ค.
GET /admin/api/v1/alcohols/{alcoholId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ ID |
$ curl 'http://localhost:8080/v1/alcohols/1' -i -X GET
GET /v1/alcohols/1 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ ์์ธ ์ ๋ณด |
|
|
์ ID |
|
|
ํ๊ธ ์ด๋ฆ |
|
|
์๋ฌธ ์ด๋ฆ |
|
|
์ด๋ฏธ์ง URL |
|
|
์ ํ์ (WHISKY ๋ฑ) |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน |
|
|
๋์ |
|
|
์์ฑ๋ ๋ |
|
|
์บ์คํฌ ํ์ |
|
|
์ฉ๋ |
|
|
์ค๋ช |
|
|
์ง์ญ ID |
|
|
์ง์ญ ํ๊ธ๋ช |
|
|
์ง์ญ ์๋ฌธ๋ช |
|
|
์ฆ๋ฅ์ ID |
|
|
์ฆ๋ฅ์ ํ๊ธ๋ช |
|
|
์ฆ๋ฅ์ ์๋ฌธ๋ช |
|
|
ํ ์ด์คํ ํ๊ทธ ๋ชฉ๋ก |
|
|
ํ๊ทธ ID |
|
|
ํ๊ทธ ํ๊ธ๋ช |
|
|
ํ๊ทธ ์๋ฌธ๋ช |
|
|
ํ๊ท ํ์ |
|
|
ํ์ ์ |
|
|
๋ฆฌ๋ทฐ ์ |
|
|
์ฐ ์ |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1240
{
"success" : true,
"code" : 200,
"data" : {
"alcoholId" : 1,
"korName" : "๊ธ๋ ํผ๋ 12๋
",
"engName" : "Glenfiddich 12 Year",
"imageUrl" : "https://example.com/image.jpg",
"type" : "WHISKY",
"korCategory" : "์ฑ๊ธ๋ชฐํธ",
"engCategory" : "Single Malt",
"categoryGroup" : "SINGLE_MALT",
"abv" : "40%",
"age" : "12",
"cask" : "์คํฌ",
"volume" : "700ml",
"description" : "์ค์ฝํ๋๋์ ๋ํ์ ์ธ ์ฑ๊ธ๋ชฐํธ ์์คํค",
"regionId" : 1,
"korRegion" : "์ค์ฝํ๋๋",
"engRegion" : "Scotland",
"distilleryId" : 1,
"korDistillery" : "๊ธ๋ ํผ๋",
"engDistillery" : "Glenfiddich",
"tastingTags" : [ {
"id" : 1,
"korName" : "๋ฐ๋๋ผ",
"engName" : "Vanilla"
}, {
"id" : 2,
"korName" : "๊ฟ",
"engName" : "Honey"
} ],
"avgRating" : 4.2,
"totalRatingsCount" : 150,
"reviewCount" : 45,
"pickCount" : 200,
"createdAt" : "2024-01-01T00:00:00",
"modifiedAt" : "2024-06-01T00:00:00"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:06.616235582",
"serverPathVersion" : "v1"
}
}
3.4. ์ (Alcohol) ์์ฑ
-
๊ด๋ฆฌ์์ฉ ์ ์์ฑ API์ ๋๋ค.
-
๋ชจ๋ ํ๋๋ ํ์๊ฐ์ ๋๋ค.
POST /admin/api/v1/alcohols
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๊ธ ์ด๋ฆ |
|
|
์๋ฌธ ์ด๋ฆ |
|
|
๋์ |
|
|
์ ํ์ (WHISKY ๋ฑ) |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน (SINGLE_MALT ๋ฑ) |
|
|
์ง์ญ ID |
|
|
์ฆ๋ฅ์ ID |
|
|
์์ฑ๋ ๋ |
|
|
์บ์คํฌ ํ์ |
|
|
์ด๋ฏธ์ง URL |
|
|
์ค๋ช |
|
|
์ฉ๋ |
|
|
ํ ์ด์คํ ํ๊ทธ ID ๋ชฉ๋ก |
AlcoholType (์ ํ์ )
| ๊ฐ | ์ค๋ช |
|---|---|
|
์์คํค |
|
๋ผ |
|
๋ณด๋์นด |
|
์ง |
|
๋ฐํฌ๋ผ |
|
๋ธ๋๋ |
|
๋งฅ์ฃผ |
|
์์ธ |
|
๊ธฐํ |
AlcoholCategoryGroup (์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน)
| ๊ฐ | ์ค๋ช |
|---|---|
|
์ฑ๊ธ๋ชฐํธ ์์คํค |
|
๋ธ๋ ๋๋ ์์คํค |
|
๋ธ๋ ๋๋ ๋ชฐํธ ์์คํค |
|
๋ฒ๋ฒ ์์คํค |
|
๋ผ์ด ์์คํค |
|
๊ธฐํ ์์คํค |
$ curl 'http://localhost:8080/v1/alcohols' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"korName" : "ํ
์คํธ ์์คํค",
"engName" : "Test Whisky",
"abv" : "40%",
"type" : "WHISKY",
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "Single Malt",
"categoryGroup" : "SINGLE_MALT",
"regionId" : 1,
"distilleryId" : 1,
"age" : "12",
"cask" : "American Oak",
"imageUrl" : "https://example.com/test.jpg",
"description" : "ํ
์คํธ ์ค๋ช
",
"volume" : "700ml",
"tastingTagIds" : [ 1, 2 ]
}'
POST /v1/alcohols HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 429
Host: localhost:8080
{
"korName" : "ํ
์คํธ ์์คํค",
"engName" : "Test Whisky",
"abv" : "40%",
"type" : "WHISKY",
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "Single Malt",
"categoryGroup" : "SINGLE_MALT",
"regionId" : 1,
"distilleryId" : 1,
"age" : "12",
"cask" : "American Oak",
"imageUrl" : "https://example.com/test.jpg",
"description" : "ํ
์คํธ ์ค๋ช
",
"volume" : "700ml",
"tastingTagIds" : [ 1, 2 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฐ์ดํฐ |
|
|
๊ฒฐ๊ณผ ์ฝ๋ (ALCOHOL_CREATED) |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์์ฑ๋ ์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 394
{
"success" : true,
"code" : 200,
"data" : {
"code" : "ALCOHOL_CREATED",
"message" : "์์คํค๊ฐ ๋ฑ๋ก๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:06"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:07.001160527",
"serverPathVersion" : "v1"
}
}
3.5. ์ (Alcohol) ์์
-
๊ด๋ฆฌ์์ฉ ์ ์์ API์ ๋๋ค.
-
์ ์ฒด ์์ (PUT)์ด๋ฏ๋ก ๋ชจ๋ ํ๋๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค.
-
์ด๋ฏธ ์ญ์ ๋ ์ ์ ์์ ํ ์ ์์ต๋๋ค.
PUT /admin/api/v1/alcohols/{alcoholId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์์ ํ ์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๊ธ ์ด๋ฆ |
|
|
์๋ฌธ ์ด๋ฆ |
|
|
๋์ |
|
|
์ ํ์ (WHISKY ๋ฑ) |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน (SINGLE_MALT ๋ฑ) |
|
|
์ง์ญ ID |
|
|
์ฆ๋ฅ์ ID |
|
|
์์ฑ๋ ๋ |
|
|
์บ์คํฌ ํ์ |
|
|
์ด๋ฏธ์ง URL |
|
|
์ค๋ช |
|
|
์ฉ๋ |
|
|
ํ ์ด์คํ ํ๊ทธ ID ๋ชฉ๋ก |
AlcoholType (์ ํ์ )
| ๊ฐ | ์ค๋ช |
|---|---|
|
์์คํค |
|
๋ผ |
|
๋ณด๋์นด |
|
์ง |
|
๋ฐํฌ๋ผ |
|
๋ธ๋๋ |
|
๋งฅ์ฃผ |
|
์์ธ |
|
๊ธฐํ |
AlcoholCategoryGroup (์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน)
| ๊ฐ | ์ค๋ช |
|---|---|
|
์ฑ๊ธ๋ชฐํธ ์์คํค |
|
๋ธ๋ ๋๋ ์์คํค |
|
๋ธ๋ ๋๋ ๋ชฐํธ ์์คํค |
|
๋ฒ๋ฒ ์์คํค |
|
๋ผ์ด ์์คํค |
|
๊ธฐํ ์์คํค |
$ curl 'http://localhost:8080/v1/alcohols/1' -i -X PUT \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"korName" : "์์ ๋ ์์คํค",
"engName" : "Updated Whisky",
"abv" : "40%",
"type" : "WHISKY",
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "Single Malt",
"categoryGroup" : "SINGLE_MALT",
"regionId" : 1,
"distilleryId" : 1,
"age" : "12",
"cask" : "American Oak",
"imageUrl" : "https://example.com/test.jpg",
"description" : "ํ
์คํธ ์ค๋ช
",
"volume" : "700ml",
"tastingTagIds" : [ 1, 2 ]
}'
PUT /v1/alcohols/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 432
Host: localhost:8080
{
"korName" : "์์ ๋ ์์คํค",
"engName" : "Updated Whisky",
"abv" : "40%",
"type" : "WHISKY",
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "Single Malt",
"categoryGroup" : "SINGLE_MALT",
"regionId" : 1,
"distilleryId" : 1,
"age" : "12",
"cask" : "American Oak",
"imageUrl" : "https://example.com/test.jpg",
"description" : "ํ
์คํธ ์ค๋ช
",
"volume" : "700ml",
"tastingTagIds" : [ 1, 2 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฐ์ดํฐ |
|
|
๊ฒฐ๊ณผ ์ฝ๋ (ALCOHOL_UPDATED) |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์์ ๋ ์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 394
{
"success" : true,
"code" : 200,
"data" : {
"code" : "ALCOHOL_UPDATED",
"message" : "์์คํค๊ฐ ์์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:07"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:07.037433776",
"serverPathVersion" : "v1"
}
}
3.6. ์ (Alcohol) ์ญ์
-
๊ด๋ฆฌ์์ฉ ์ ์ญ์ API์ ๋๋ค.
-
์ํํธ ์ญ์ ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ์ค์ ๋ฐ์ดํฐ๋ ์ญ์ ๋์ง ์์ต๋๋ค.
-
๋ฆฌ๋ทฐ ๋๋ ํ์ ์ด ์กด์ฌํ๋ ์ ์ ์ญ์ ํ ์ ์์ต๋๋ค.
-
์ด๋ฏธ ์ญ์ ๋ ์ ์ ์ฌ์ญ์ ํ ์ ์์ต๋๋ค.
DELETE /admin/api/v1/alcohols/{alcoholId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ญ์ ํ ์ ID |
$ curl 'http://localhost:8080/v1/alcohols/1' -i -X DELETE
DELETE /v1/alcohols/1 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฐ์ดํฐ |
|
|
๊ฒฐ๊ณผ ์ฝ๋ (ALCOHOL_DELETED) |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ญ์ ๋ ์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 394
{
"success" : true,
"code" : 200,
"data" : {
"code" : "ALCOHOL_DELETED",
"message" : "์์คํค๊ฐ ์ญ์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:06"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:06.579416643",
"serverPathVersion" : "v1"
}
}
3.7. ์นดํ ๊ณ ๋ฆฌ ๋ ํผ๋ฐ์ค ์กฐํ
-
ํ์ฌ DB์ ๋ฑ๋ก๋ ๋ชจ๋ ์นดํ ๊ณ ๋ฆฌ ํ์ด(ํ๊ธ/์๋ฌธ) ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
-
์ ์์ฑ/์์ ์ ๊ธฐ์กด ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํ API์ ๋๋ค.
-
๋์ผ ํ๊ธ ์นดํ ๊ณ ๋ฆฌ๋ผ๋ ์๋ฌธ ์นดํ ๊ณ ๋ฆฌ๊ฐ ๋ค๋ฅด๋ฉด ๋ณ๋ ํญ๋ชฉ์ผ๋ก ์กฐํ๋ฉ๋๋ค.
GET /admin/api/v1/alcohols/categories/reference
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
categoryGroup๋ณ ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก (SINGLE_MALT, BLEND, BLENDED_MALT, BOURBON, RYE, OTHER) |
|
|
์ฑ๊ธ ๋ชฐํธ ๊ทธ๋ฃน ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก |
|
|
ํ๊ธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์๋ฌธ ์นดํ ๊ณ ๋ฆฌ |
|
|
๋ธ๋ ๋๋ ๊ทธ๋ฃน ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก |
|
|
ํ๊ธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์๋ฌธ ์นดํ ๊ณ ๋ฆฌ |
|
|
๋ธ๋ ๋๋ ๋ชฐํธ ๊ทธ๋ฃน ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก |
|
|
ํ๊ธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์๋ฌธ ์นดํ ๊ณ ๋ฆฌ |
|
|
๋ฒ๋ฒ ๊ทธ๋ฃน ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก |
|
|
ํ๊ธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์๋ฌธ ์นดํ ๊ณ ๋ฆฌ |
|
|
๋ผ์ด ๊ทธ๋ฃน ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก (๋ฐ์ดํฐ ์์ผ๋ฉด ๋น ๋ฐฐ์ด) |
|
|
๊ธฐํ ๊ทธ๋ฃน ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก |
|
|
ํ๊ธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์๋ฌธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 837
{
"success" : true,
"code" : 200,
"data" : {
"SINGLE_MALT" : [ {
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "Single Malt"
} ],
"BLEND" : [ {
"korCategory" : "๋ธ๋ ๋๋",
"engCategory" : "Blend"
} ],
"BLENDED_MALT" : [ {
"korCategory" : "๋ธ๋ ๋๋ ๋ชฐํธ",
"engCategory" : "Blended Malt"
} ],
"BOURBON" : [ {
"korCategory" : "๋ฒ๋ฒ",
"engCategory" : "Bourbon"
} ],
"RYE" : [ ],
"OTHER" : [ {
"korCategory" : "ํ
๋ค์",
"engCategory" : "Tennessee"
}, {
"korCategory" : "์ฝ",
"engCategory" : "Corn"
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:06.701321869",
"serverPathVersion" : "v1"
}
}
4. Help API
4.1. ๋ฌธ์ ๋ชฉ๋ก ์กฐํ
-
์ ์ฒด ๋ฌธ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
-
์ํ(status)์ ์ ํ(type)์ผ๋ก ํํฐ๋งํ ์ ์์ต๋๋ค.
-
์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค.
GET /admin/api/v1/helps
์์ฒญ ํค๋
| Name | Description |
|---|---|
|
Bearer ์ก์ธ์ค ํ ํฐ |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ํ ํํฐ (WAITING, SUCCESS, REJECT, DELETED) |
|
๋ฌธ์ ์ ํ ํํฐ (WHISKEY, REVIEW, USER, ETC) |
|
ํ์ด์ง ์ปค์ (๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 20) |
HelpType (๋ฌธ์ ์ ํ)
| ๊ฐ | ์ค๋ช |
|---|---|
|
์์คํค ๊ด๋ จ ๋ฌธ์ |
|
๋ฆฌ๋ทฐ ๊ด๋ จ ๋ฌธ์ |
|
ํ์ ๊ด๋ จ ๋ฌธ์ |
|
๊ทธ ์ธ ๋ชจ๋ ๋ฌธ์ |
StatusType (์ฒ๋ฆฌ ์ํ)
| ๊ฐ | ์ค๋ช |
|---|---|
|
๋๊ธฐ์ค |
|
์ฒ๋ฆฌ ์๋ฃ |
|
๋ฐ๋ ค |
|
์ญ์ |
GET /v1/helps?status=WAITING&type=WHISKEY&cursor=0&pageSize=20 HTTP/1.1
Authorization: Bearer test_access_token
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ ์ฒด ๋ฌธ์ ์ |
|
|
๋ฌธ์ ID |
|
|
๋ฌธ์์ ID |
|
|
๋ฌธ์์ ๋๋ค์ |
|
|
๋ฌธ์ ์ ๋ชฉ |
|
|
๋ฌธ์ ์ ํ |
|
|
์ฒ๋ฆฌ ์ํ |
|
|
์์ฑ์ผ์ |
|
|
๋ค์ ์ปค์ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
๋ค์ ํ์ด์ง ์ฌ๋ถ |
|
|
ํ์ฌ ์ปค์ |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 700
{
"success" : true,
"code" : 200,
"data" : {
"content" : {
"totalCount" : 1,
"helpList" : [ {
"helpId" : 1,
"userId" : 100,
"userNickname" : "ํ
์คํธ์ ์ ",
"title" : "์์คํค ๊ด๋ จ ๋ฌธ์",
"type" : "WHISKEY",
"status" : "WAITING",
"createAt" : "2026-07-05T16:33:12.805268811"
} ]
},
"cursorPageable" : {
"currentCursor" : 0,
"cursor" : 20,
"pageSize" : 20,
"hasNext" : false
}
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:12.809138529",
"serverPathVersion" : "v1"
}
}
4.2. ๋ฌธ์ ์์ธ ์กฐํ
-
ํน์ ๋ฌธ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
-
๋ฌธ์ ๋ด์ฉ, ์ด๋ฏธ์ง, ๋ต๋ณ ๋ด์ฉ ๋ฑ์ ํ์ธํ ์ ์์ต๋๋ค.
GET /admin/api/v1/helps/{helpId}
์์ฒญ ํค๋
| Name | Description |
|---|---|
|
Bearer ์ก์ธ์ค ํ ํฐ |
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฌธ์ ID |
GET /v1/helps/1 HTTP/1.1
Authorization: Bearer test_access_token
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๋ฌธ์ ID |
|
|
๋ฌธ์์ ID |
|
|
๋ฌธ์์ ๋๋ค์ |
|
|
๋ฌธ์ ์ ๋ชฉ |
|
|
๋ฌธ์ ๋ด์ฉ |
|
|
๋ฌธ์ ์ ํ |
|
|
์ด๋ฏธ์ง ์์ |
|
|
์ด๋ฏธ์ง URL |
|
|
์ฒ๋ฆฌ ์ํ |
|
|
๋ด๋น ๊ด๋ฆฌ์ ID |
|
|
๋ต๋ณ ๋ด์ฉ |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 732
{
"success" : true,
"code" : 200,
"data" : {
"helpId" : 1,
"userId" : 100,
"userNickname" : "ํ
์คํธ์ ์ ",
"title" : "์์คํค ๊ด๋ จ ๋ฌธ์",
"content" : "์์คํค์ ๋ํด ๋ฌธ์๋๋ฆฝ๋๋ค.",
"type" : "WHISKEY",
"imageUrlList" : [ {
"order" : 1,
"viewUrl" : "https://example.com/image.jpg"
} ],
"status" : "WAITING",
"adminId" : null,
"responseContent" : null,
"createAt" : "2026-07-05T16:33:12.732184289",
"lastModifyAt" : "2026-07-05T16:33:12.732196077"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:12.739978737",
"serverPathVersion" : "v1"
}
}
4.3. ๋ฌธ์ ๋ต๋ณ ๋ฑ๋ก
-
๋ฌธ์์ ๋ํ ๋ต๋ณ์ ๋ฑ๋กํฉ๋๋ค.
-
์ฒ๋ฆฌ ์ํ๋ฅผ SUCCESS(์ฒ๋ฆฌ ์๋ฃ) ๋๋ REJECT(๋ฐ๋ ค)๋ก ์ค์ ํ ์ ์์ต๋๋ค.
POST /admin/api/v1/helps/{helpId}/answer
์์ฒญ ํค๋
| Name | Description |
|---|---|
|
Bearer ์ก์ธ์ค ํ ํฐ |
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฌธ์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋ต๋ณ ๋ด์ฉ |
|
|
์ฒ๋ฆฌ ์ํ (SUCCESS, REJECT) |
StatusType (์ฒ๋ฆฌ ์ํ)
| ๊ฐ | ์ค๋ช |
|---|---|
|
๋๊ธฐ์ค |
|
์ฒ๋ฆฌ ์๋ฃ |
|
๋ฐ๋ ค |
|
์ญ์ |
POST /v1/helps/1/answer HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer test_access_token
Content-Length: 75
Host: localhost:8080
{
"responseContent" : "๋ต๋ณ ๋ด์ฉ์
๋๋ค.",
"status" : "SUCCESS"
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๋ฌธ์ ID |
|
|
์ฒ๋ฆฌ ์ํ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 341
{
"success" : true,
"code" : 200,
"data" : {
"helpId" : 1,
"status" : "SUCCESS",
"message" : "๋ต๋ณ์ด ๋ฑ๋ก๋์์ต๋๋ค."
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:12.789279398",
"serverPathVersion" : "v1"
}
}
5. File API
5.1. PreSigned URL ๋ฐ๊ธ
-
S3 ์ ๋ก๋์ฉ PreSigned URL์ ๋ฐ๊ธํฉ๋๋ค.
-
๋ฐ๊ธ๋ URL์ ์ง์ ๋ ์๊ฐ(๊ธฐ๋ณธ 5๋ถ) ๋์ ์ ํจํฉ๋๋ค.
-
์ฌ๋ฌ ๊ฐ์ URL์ ํ ๋ฒ์ ๋ฐ๊ธํ ์ ์์ต๋๋ค.
GET /admin/api/v1/s3/presign-url
์์ฒญ ํค๋
| Name | Description |
|---|---|
|
Bearer ์ก์ธ์ค ํ ํฐ |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ ๋ก๋ ๊ฒฝ๋ก (์: admin/banner, admin/alcohol) |
|
๋ฐ๊ธํ URL ๊ฐ์ |
|
์ ๋ก๋ ํ์ผ์ Content-Type. ํ์ฉ ๋ชฉ๋ก: image/jpeg, image/png, image/webp, image/gif, image/svg+xml, video/mp4, application/pdf. ์ ๋ก๋(PUT) ์์ฒญ ์ ๋์ผํ Content-Type ํค๋ ํ์ |
GET /v1/s3/presign-url?rootPath=admin%2Fbanner&uploadSize=2&contentType=image%2Fjpeg HTTP/1.1
Authorization: Bearer test_access_token
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
S3 ๋ฒํท๋ช |
|
|
URL ๋ง๋ฃ ์๊ฐ (๋ถ) |
|
|
๋ฐ๊ธ๋ URL ๊ฐ์ |
|
|
์ด๋ฏธ์ง ์์ |
|
|
์ด๋ฏธ์ง ์กฐํ URL (CDN) |
|
|
์ด๋ฏธ์ง ์ ๋ก๋ URL (PreSigned) |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 777
{
"success" : true,
"code" : 200,
"data" : {
"bucketName" : "bottlenote-bucket",
"uploadSize" : 2,
"expiryTime" : 5,
"imageUploadInfo" : [ {
"order" : 1,
"viewUrl" : "https://cdn.example.com/admin/banner/uuid-1.jpg",
"uploadUrl" : "https://s3.ap-northeast-2.amazonaws.com/bucket/admin/banner/uuid-1.jpg?X-Amz-Algorithm=..."
}, {
"order" : 2,
"viewUrl" : "https://cdn.example.com/admin/banner/uuid-2.jpg",
"uploadUrl" : "https://s3.ap-northeast-2.amazonaws.com/bucket/admin/banner/uuid-2.jpg?X-Amz-Algorithm=..."
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:12.258145839",
"serverPathVersion" : "v1"
}
}
6. Tasting Tag API
6.1. ํ ์ด์คํ ํ๊ทธ ๋ชฉ๋ก ์กฐํ
-
ํ ์ด์คํ ํ๊ทธ ๋ชฉ๋ก์ ํ์ด์ง๋ค์ด์ ์ผ๋ก ์กฐํํฉ๋๋ค.
-
ํค์๋๋ก ํ๊ธ๋ช /์๋ฌธ๋ช ๊ฒ์์ด ๊ฐ๋ฅํฉ๋๋ค.
GET /admin/api/v1/tasting-tags
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๊ฒ์์ด (ํ๊ธ๋ช /์๋ฌธ๋ช ) |
|
ํ์ด์ง ๋ฒํธ (0๋ถํฐ ์์, ๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 20) |
|
์ ๋ ฌ ๋ฐฉํฅ (ASC/DESC, ๊ธฐ๋ณธ๊ฐ: ASC) |
$ curl 'http://localhost:8080/v1/tasting-tags?keyword=&page=0&size=20&sortOrder=ASC' -i -X GET
GET /v1/tasting-tags?keyword=&page=0&size=20&sortOrder=ASC HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
include::example$/admin/tasting-tags/list/response-fields.adoc[]๋ฃฐ
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 924
{
"success" : true,
"code" : 200,
"data" : [ {
"id" : 1,
"korName" : "ํ๊ทธ1",
"engName" : "Tag1",
"icon" : "icon1.png",
"description" : "ํ
์ด์คํ
ํ๊ทธ ์ค๋ช
1",
"parent" : null,
"children" : null
}, {
"id" : 2,
"korName" : "ํ๊ทธ2",
"engName" : "Tag2",
"icon" : "icon2.png",
"description" : "ํ
์ด์คํ
ํ๊ทธ ์ค๋ช
2",
"parent" : null,
"children" : null
}, {
"id" : 3,
"korName" : "ํ๊ทธ3",
"engName" : "Tag3",
"icon" : "icon3.png",
"description" : "ํ
์ด์คํ
ํ๊ทธ ์ค๋ช
3",
"parent" : null,
"children" : null
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.202319782",
"size" : 3,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 3
}
}
6.2. ํ ์ด์คํ ํ๊ทธ ์์ธ ์กฐํ
-
ํน์ ํ ์ด์คํ ํ๊ทธ์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
-
๋ถ๋ชจ/์์ ํ๊ทธ ์ ๋ณด ๋ฐ ์ฐ๊ฒฐ๋ ์ ๋ชฉ๋ก์ ํฌํจํฉ๋๋ค.
GET /admin/api/v1/tasting-tags/{tagId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๊ทธ ID |
$ curl 'http://localhost:8080/v1/tasting-tags/1' -i -X GET
GET /v1/tasting-tags/1 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
ํ๊ทธ ์์ธ ์ ๋ณด |
|
|
ํ๊ทธ ํธ๋ฆฌ ์ ๋ณด |
|
|
ํ๊ทธ ID |
|
|
ํ๊ทธ ํ๊ธ๋ช |
|
|
ํ๊ทธ ์๋ฌธ๋ช |
|
|
์์ด์ฝ (Base64) |
|
|
์ค๋ช |
|
|
๋ถ๋ชจ ํ๊ทธ (๋งํธ๋ฃ์์นด ๊ตฌ์กฐ) |
|
|
์์ ํ๊ทธ ๋ชฉ๋ก (๋งํธ๋ฃ์์นด ๊ตฌ์กฐ) |
|
|
์์ ํ๊ทธ ID |
|
|
์์ ํ๊ทธ ํ๊ธ๋ช |
|
|
์์ ํ๊ทธ ์๋ฌธ๋ช |
|
|
์์ ํ๊ทธ ์์ด์ฝ |
|
|
์์ ํ๊ทธ ์ค๋ช |
|
|
์์์ ๋ถ๋ชจ (null) |
|
|
์์ ํ๊ทธ ๋ชฉ๋ก |
|
|
์ฐ๊ฒฐ๋ ์์คํค ๋ชฉ๋ก |
|
|
์์คํค ID |
|
|
์์คํค ํ๊ธ๋ช |
|
|
์์คํค ์๋ฌธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์ด๋ฏธ์ง URL |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์ญ์ ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1058
{
"success" : true,
"code" : 200,
"data" : {
"tag" : {
"id" : 1,
"korName" : "๋ฐ๋๋ผ",
"engName" : "Vanilla",
"icon" : "base64icon",
"description" : "๋ฐ๋๋ผ ํฅ",
"parent" : null,
"children" : [ {
"id" : 2,
"korName" : "๋ฐ๋๋ผ ํฌ๋ฆผ",
"engName" : "Vanilla Cream",
"icon" : null,
"description" : "๋ฐ๋๋ผ ํฌ๋ฆผ ํฅ",
"parent" : null,
"children" : [ ]
} ]
},
"alcohols" : [ {
"alcoholId" : 1,
"korName" : "๊ธ๋ ํผ๋ 12๋
",
"engName" : "Glenfiddich 12",
"korCategoryName" : "์ฑ๊ธ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "https://example.com/image.jpg",
"createdAt" : "2024-01-01T00:00:00",
"modifiedAt" : "2024-06-01T00:00:00",
"deletedAt" : null
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.149837144",
"serverPathVersion" : "v1"
}
}
6.3. ํ ์ด์คํ ํ๊ทธ ์์ฑ
-
์๋ก์ด ํ ์ด์คํ ํ๊ทธ๋ฅผ ์์ฑํฉ๋๋ค.
-
parentId๋ฅผ ์ง์ ํ์ฌ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
POST /admin/api/v1/tasting-tags
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๊ทธ ํ๊ธ๋ช (ํ์) |
|
|
ํ๊ทธ ์๋ฌธ๋ช (ํ์) |
|
|
์์ด์ฝ (Base64) |
|
|
์ค๋ช |
|
|
๋ถ๋ชจ ํ๊ทธ ID (null์ด๋ฉด ๋ฃจํธ) |
$ curl 'http://localhost:8080/v1/tasting-tags' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"korName" : "๋ฐ๋๋ผ",
"engName" : "Vanilla",
"icon" : "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
"description" : "๋ฐ๋๋ผ ํฅ",
"parentId" : null
}'
POST /v1/tasting-tags HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 221
Host: localhost:8080
{
"korName" : "๋ฐ๋๋ผ",
"engName" : "Vanilla",
"icon" : "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
"description" : "๋ฐ๋๋ผ ํฅ",
"parentId" : null
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์์ฑ๋ ํ๊ทธ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 408
{
"success" : true,
"code" : 200,
"data" : {
"code" : "TASTING_TAG_CREATED",
"message" : "ํ
์ด์คํ
ํ๊ทธ๊ฐ ๋ฑ๋ก๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:09"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.088396437",
"serverPathVersion" : "v1"
}
}
6.4. ํ ์ด์คํ ํ๊ทธ ์์
-
๊ธฐ์กด ํ ์ด์คํ ํ๊ทธ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค.
PUT /admin/api/v1/tasting-tags/{tagId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๊ทธ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๊ทธ ํ๊ธ๋ช (ํ์) |
|
|
ํ๊ทธ ์๋ฌธ๋ช (ํ์) |
|
|
์์ด์ฝ (Base64) |
|
|
์ค๋ช |
|
|
๋ถ๋ชจ ํ๊ทธ ID |
$ curl 'http://localhost:8080/v1/tasting-tags/1' -i -X PUT \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"korName" : "๋ฐ๋๋ผ ์์ ",
"engName" : "Vanilla Updated",
"icon" : "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
"description" : "์์ ๋ ์ค๋ช
"
}'
PUT /v1/tasting-tags/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 218
Host: localhost:8080
{
"korName" : "๋ฐ๋๋ผ ์์ ",
"engName" : "Vanilla Updated",
"icon" : "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
"description" : "์์ ๋ ์ค๋ช
"
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์์ ๋ ํ๊ทธ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 408
{
"success" : true,
"code" : 200,
"data" : {
"code" : "TASTING_TAG_UPDATED",
"message" : "ํ
์ด์คํ
ํ๊ทธ๊ฐ ์์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:09"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.293479321",
"serverPathVersion" : "v1"
}
}
6.5. ํ ์ด์คํ ํ๊ทธ ์ญ์
-
ํ ์ด์คํ ํ๊ทธ๋ฅผ ์ญ์ ํฉ๋๋ค.
-
์์ ํ๊ทธ๊ฐ ์๋ ๊ฒฝ์ฐ ์ญ์ ํ ์ ์์ต๋๋ค.
DELETE /admin/api/v1/tasting-tags/{tagId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๊ทธ ID |
$ curl 'http://localhost:8080/v1/tasting-tags/1' -i -X DELETE
DELETE /v1/tasting-tags/1 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ญ์ ๋ ํ๊ทธ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 408
{
"success" : true,
"code" : 200,
"data" : {
"code" : "TASTING_TAG_DELETED",
"message" : "ํ
์ด์คํ
ํ๊ทธ๊ฐ ์ญ์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:09"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.124509858",
"serverPathVersion" : "v1"
}
}
6.6. ํ ์ด์คํ ํ๊ทธ ์ฐ๊ฒฐ
-
ํ ์ด์คํ ํ๊ทธ์ ์ ์ ๋ฒํฌ๋ก ์ฐ๊ฒฐํฉ๋๋ค.
POST /admin/api/v1/tasting-tags/{tagId}/alcohols
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๊ทธ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์ฐ๊ฒฐํ ์์คํค ID ๋ชฉ๋ก |
$ curl 'http://localhost:8080/v1/tasting-tags/1/alcohols' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"alcoholIds" : [ 1, 2, 3 ]
}'
POST /v1/tasting-tags/1/alcohols HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 32
Host: localhost:8080
{
"alcoholIds" : [ 1, 2, 3 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
ํ๊ทธ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 404
{
"success" : true,
"code" : 200,
"data" : {
"code" : "TASTING_TAG_ALCOHOL_ADDED",
"message" : "์์คํค๊ฐ ์ฐ๊ฒฐ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:09"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.267410654",
"serverPathVersion" : "v1"
}
}
6.7. ํ ์ด์คํ ํ๊ทธ ์ฐ๊ฒฐ ํด์
-
ํ ์ด์คํ ํ๊ทธ์์ ์ ์ฐ๊ฒฐ์ ๋ฒํฌ๋ก ํด์ ํฉ๋๋ค.
DELETE /admin/api/v1/tasting-tags/{tagId}/alcohols
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๊ทธ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํด์ ํ ์์คํค ID ๋ชฉ๋ก |
$ curl 'http://localhost:8080/v1/tasting-tags/1/alcohols' -i -X DELETE \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"alcoholIds" : [ 1, 2 ]
}'
DELETE /v1/tasting-tags/1/alcohols HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 29
Host: localhost:8080
{
"alcoholIds" : [ 1, 2 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
ํ๊ทธ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 413
{
"success" : true,
"code" : 200,
"data" : {
"code" : "TASTING_TAG_ALCOHOL_REMOVED",
"message" : "์์คํค ์ฐ๊ฒฐ์ด ํด์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:09"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:09.242324704",
"serverPathVersion" : "v1"
}
}
7. Reference API
7.1. ์ง์ญ ๋ชฉ๋ก ์กฐํ
-
์ ์ฒด ์ง์ญ(๊ตญ๊ฐ) ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
-
์ ์ ์์ฐ์ง ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
GET /admin/api/v1/regions
์์ฒญ
$ curl 'http://localhost:8080/v1/regions?keyword=&page=0&size=20&sortOrder=ASC' -i -X GET
GET /v1/regions?keyword=&page=0&size=20&sortOrder=ASC HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ง์ญ ๋ชฉ๋ก |
|
|
์ง์ญ ID |
|
|
๊ตญ๊ฐ ํ๊ธ๋ช |
|
|
๊ตญ๊ฐ ์๋ฌธ๋ช |
|
|
๋๋ฅ |
|
|
์ค๋ช |
|
|
๋ํ ์ด๋ฏธ์ง URL |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์์ ์ง์ญ ID |
|
|
์ ๋ ฌ ์์ (๋ฏธ์ค์ : 9999) |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
ํ์ฌ ํ์ด์ง ๋ฒํธ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
์ ์ฒด ์์ ์ |
|
|
์ ์ฒด ํ์ด์ง ์ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1328
{
"success" : true,
"code" : 200,
"data" : [ {
"id" : 1,
"korName" : "์ค์ฝํ๋๋",
"engName" : "Scotland",
"continent" : "์ ๋ฝ",
"description" : "์ง์ญ ์ค๋ช
1",
"imageUrl" : "https://example.com/region1.png",
"createdAt" : "2024-01-01T00:00:00",
"modifiedAt" : "2024-06-01T00:00:00",
"parentId" : null,
"sortOrder" : 9999
}, {
"id" : 2,
"korName" : "์์ผ๋๋",
"engName" : "Ireland",
"continent" : "์ ๋ฝ",
"description" : "์ง์ญ ์ค๋ช
2",
"imageUrl" : "https://example.com/region2.png",
"createdAt" : "2024-01-02T00:00:00",
"modifiedAt" : "2024-06-02T00:00:00",
"parentId" : null,
"sortOrder" : 9999
}, {
"id" : 3,
"korName" : "์ผ๋ณธ",
"engName" : "Japan",
"continent" : "์์์",
"description" : "์ง์ญ ์ค๋ช
3",
"imageUrl" : "https://example.com/region3.png",
"createdAt" : "2024-01-03T00:00:00",
"modifiedAt" : "2024-06-03T00:00:00",
"parentId" : null,
"sortOrder" : 9999
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:08.522876061",
"size" : 3,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 3
}
}
7.2. ์ง์ญ bulk reorder
-
์ ์ฒด ์ง์ญ ๋ชฉ๋ก์์ ์์ฒญํ ์ง์ญ์ ๋งจ ์ ์ ๋ ฌ ์ฌ๋กฏ์ผ๋ก ์ฌ๋ฐฐ์นํฉ๋๋ค.
-
์์ฒญ ID๋ 1๊ฐ ์ด์ 100๊ฐ ์ดํ์ ๋๋ค.
-
์ ์ฒด ์ง์ญ ์ ๋ ฌ๊ณผ ํน์ ๋ถ๋ชจ์ ์์ ์ง์ญ ์ ๋ ฌ์ scope๊ฐ ๋ค๋ฅด๋ฏ๋ก API๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
PATCH /admin/api/v1/regions/bulk/reorder
{ "ids": [3, 1, 6, 5] }
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋งจ ์ ๊ตฌ๊ฐ์ผ๋ก ์ฌ๋ฆด ์ง์ญ ID ๋ชฉ๋ก (1~100๊ฐ). ๋ฐฐ์ด ์์๊ฐ ์ต์ข ์๋ ์์์ ๋๋ค |
$ curl 'http://localhost:8080/v1/regions/bulk/reorder' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"ids" : [ 3, 1, 6, 5 ]
}'
PATCH /v1/regions/bulk/reorder HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 28
Host: localhost:8080
{
"ids" : [ 3, 1, 6, 5 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ฒ๋ฆฌ ๊ฒฐ๊ณผ ์ฝ๋ |
|
|
์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
๋์ ID. ์ ์ฒด bulk reorder๋ null, ์์ ์ง์ญ bulk reorder๋ parentId |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 418
{
"success" : true,
"code" : 200,
"data" : {
"code" : "REGION_SORT_ORDER_UPDATED",
"message" : "์ง์ญ ์ ๋ ฌ ์์๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : null,
"responseAt" : "2026-07-05 16:33:08"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:08.574603316",
"serverPathVersion" : "v1"
}
}
7.3. ์์ ์ง์ญ bulk reorder
-
ํน์ ๋ถ๋ชจ ์ง์ญ์ ์ง์ ์์ ์ง์ญ๋ง ๋งจ ์ ์ ๋ ฌ ์ฌ๋กฏ์ผ๋ก ์ฌ๋ฐฐ์นํฉ๋๋ค.
-
`{parentId}`์ ์ง์ ์์์ด ์๋ ์ง์ญ ID๊ฐ ํฌํจ๋๋ฉด ์คํจํฉ๋๋ค.
PATCH /admin/api/v1/regions/{parentId}/children/bulk/reorder
๋ถ๋ชจ ์ง์ญ ID = 1
๋ณ๊ฒฝ ์
์ ๋ ฌ ์ฌ๋กฏ: 1 10 20 30
+----+-----+-----+-----+
์์ ์ง์ญ ID: | 11 | 1 | 3 | 5 |
+----+-----+-----+-----+
์์ฒญ
{ "ids": [3, 1] }
๋ณ๊ฒฝ ํ
์ ๋ ฌ ์ฌ๋กฏ: 1 10 20 30
+----+-----+-----+-----+
์์ ์ง์ญ ID: | 3 | 1 | 11 | 5 |
+----+-----+-----+-----+
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ถ๋ชจ ์ง์ญ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋งจ ์ ๊ตฌ๊ฐ์ผ๋ก ์ฌ๋ฆด ์ง์ ์์ ์ง์ญ ID ๋ชฉ๋ก (1~100๊ฐ). ๋ฐฐ์ด ์์๊ฐ ์ต์ข ์๋ ์์์ ๋๋ค |
$ curl 'http://localhost:8080/v1/regions/1/children/bulk/reorder' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"ids" : [ 30, 10, 60, 50 ]
}'
PATCH /v1/regions/1/children/bulk/reorder HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 32
Host: localhost:8080
{
"ids" : [ 30, 10, 60, 50 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ฒ๋ฆฌ ๊ฒฐ๊ณผ ์ฝ๋ |
|
|
์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
๋์ ID. ์ ์ฒด bulk reorder๋ null, ์์ ์ง์ญ bulk reorder๋ parentId |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 415
{
"success" : true,
"code" : 200,
"data" : {
"code" : "REGION_SORT_ORDER_UPDATED",
"message" : "์ง์ญ ์ ๋ ฌ ์์๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:08"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:08.593275258",
"serverPathVersion" : "v1"
}
}
7.4. ์ฆ๋ฅ์ ๋ชฉ๋ก ์กฐํ
-
์ ์ฒด ์ฆ๋ฅ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
-
์ ์ ์์ฐํ๋ ์ฆ๋ฅ์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
GET /admin/api/v1/distilleries
์์ฒญ
$ curl 'http://localhost:8080/v1/distilleries?keyword=&page=0&size=20&sortOrder=ASC' -i -X GET
GET /v1/distilleries?keyword=&page=0&size=20&sortOrder=ASC HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ฆ๋ฅ์ ๋ชฉ๋ก |
|
|
์ฆ๋ฅ์ ID |
|
|
์ฆ๋ฅ์ ํ๊ธ๋ช |
|
|
์ฆ๋ฅ์ ์๋ฌธ๋ช |
|
|
์ฆ๋ฅ์ ์ด๋ฏธ์ง URL |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์ ๋ ฌ ์์ (๋ฏธ์ค์ : 9999) |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
ํ์ฌ ํ์ด์ง ๋ฒํธ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
์ ์ฒด ์์ ์ |
|
|
์ ์ฒด ํ์ด์ง ์ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1056
{
"success" : true,
"code" : 200,
"data" : [ {
"id" : 1,
"korName" : "๊ธ๋ ํผ๋",
"engName" : "Glenfiddich",
"imageUrl" : "https://example.com/logo1.png",
"createdAt" : "2024-01-01T00:00:00",
"modifiedAt" : "2024-06-01T00:00:00",
"sortOrder" : 9999
}, {
"id" : 2,
"korName" : "๋งฅ์บ๋",
"engName" : "Macallan",
"imageUrl" : "https://example.com/logo2.png",
"createdAt" : "2024-01-02T00:00:00",
"modifiedAt" : "2024-06-02T00:00:00",
"sortOrder" : 9999
}, {
"id" : 3,
"korName" : "์ผ๋ง์ํค",
"engName" : "Yamazaki",
"imageUrl" : "https://example.com/logo3.png",
"createdAt" : "2024-01-03T00:00:00",
"modifiedAt" : "2024-06-03T00:00:00",
"sortOrder" : 9999
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:07.818555928",
"size" : 3,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 3
}
}
7.5. ์ฆ๋ฅ์ bulk reorder
-
์ ์ฒด ์ฆ๋ฅ์ ๋ชฉ๋ก์์ ์์ฒญํ ์ฆ๋ฅ์๋ฅผ ๋งจ ์ ์ ๋ ฌ ์ฌ๋กฏ์ผ๋ก ์ฌ๋ฐฐ์นํฉ๋๋ค.
-
์์ฒญ ID๋ 1๊ฐ ์ด์ 100๊ฐ ์ดํ์ ๋๋ค.
-
๊ธฐ์กด ๋จ๊ฑด ์ ๋ ฌ API๋ ํน์ ์ฆ๋ฅ์ 1๊ฐ์ `sortOrder`๋ฅผ ์ง์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๊ณ , bulk reorder๋ ์ฌ๋ฌ ์ฆ๋ฅ์์ ์๋ ์์๋ฅผ ํ ๋ฒ์ ์ ์ฅํฉ๋๋ค.
PATCH /admin/api/v1/distilleries/bulk/reorder
{ "ids": [3, 1, 6, 5] }
๋ณ๊ฒฝ ์
์ ๋ ฌ ์ฌ๋กฏ: 1 10 20 30 40
+----+-----+-----+-----+-----+
์ฆ๋ฅ์ ID: | 11 | 1 | 3 | 5 | 6 |
+----+-----+-----+-----+-----+
๋ณ๊ฒฝ ํ
์ ๋ ฌ ์ฌ๋กฏ: 1 10 20 30 40
+----+-----+-----+-----+-----+
์ฆ๋ฅ์ ID: | 3 | 1 | 6 | 5 | 11 |
+----+-----+-----+-----+-----+
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋งจ ์ ๊ตฌ๊ฐ์ผ๋ก ์ฌ๋ฆด ์ฆ๋ฅ์ ID ๋ชฉ๋ก (1~100๊ฐ). ๋ฐฐ์ด ์์๊ฐ ์ต์ข ์๋ ์์์ ๋๋ค |
$ curl 'http://localhost:8080/v1/distilleries/bulk/reorder' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"ids" : [ 3, 1, 6, 5 ]
}'
PATCH /v1/distilleries/bulk/reorder HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 28
Host: localhost:8080
{
"ids" : [ 3, 1, 6, 5 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ฒ๋ฆฌ ๊ฒฐ๊ณผ ์ฝ๋ |
|
|
์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
bulk reorder๋ ๋จ์ผ ๋์ ID๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 425
{
"success" : true,
"code" : 200,
"data" : {
"code" : "DISTILLERY_SORT_ORDER_UPDATED",
"message" : "์ฆ๋ฅ์ ์ ๋ ฌ ์์๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : null,
"responseAt" : "2026-07-05 16:33:07"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:07.886636975",
"serverPathVersion" : "v1"
}
}
8. Curation API
8.1. ํ๋ ์ด์ ๋ชฉ๋ก ์กฐํ
-
ํ๋ ์ด์ ๋ชฉ๋ก์ ํ์ด์ง๋ค์ด์ ์ผ๋ก ์กฐํํฉ๋๋ค.
-
ํค์๋ ๋ฐ ํ์ฑํ ์ํ๋ก ํํฐ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
GET /admin/api/v1/curations
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๊ฒ์์ด (ํ๋ ์ด์ ๋ช ) |
|
ํ์ฑํ ์ํ ํํฐ (true/false/null) |
|
ํ์ด์ง ๋ฒํธ (0๋ถํฐ ์์, ๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 20) |
$ curl 'http://localhost:8080/v1/curations?keyword=&isActive=true&page=0&size=20' -i -X GET
GET /v1/curations?keyword=&isActive=true&page=0&size=20 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
ํ๋ ์ด์ ๋ชฉ๋ก |
|
|
ํ๋ ์ด์ ID |
|
|
ํ๋ ์ด์ ๋ช |
|
|
ํฌํจ๋ ์์คํค ์ |
|
|
๋ ธ์ถ ์์ |
|
|
ํ์ฑํ ์ํ |
|
|
์์ฑ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
ํ์ฌ ํ์ด์ง ๋ฒํธ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
์ ์ฒด ์์ ์ |
|
|
์ ์ฒด ํ์ด์ง ์ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 831
{
"success" : true,
"code" : 200,
"data" : [ {
"id" : 1,
"name" : "ํ๋ ์ด์
1",
"alcoholCount" : 2,
"displayOrder" : 1,
"isActive" : true,
"createdAt" : "2024-01-01T00:00:00"
}, {
"id" : 2,
"name" : "ํ๋ ์ด์
2",
"alcoholCount" : 4,
"displayOrder" : 2,
"isActive" : true,
"createdAt" : "2024-02-01T00:00:00"
}, {
"id" : 3,
"name" : "ํ๋ ์ด์
3",
"alcoholCount" : 6,
"displayOrder" : 3,
"isActive" : true,
"createdAt" : "2024-03-01T00:00:00"
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.197298",
"size" : 3,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 3
}
}
8.2. ํ๋ ์ด์ ์์ธ ์กฐํ
-
ํน์ ํ๋ ์ด์ ์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
-
ํฌํจ๋ ์์คํค ID ๋ชฉ๋ก์ ํฌํจํฉ๋๋ค.
GET /admin/api/v1/curations/{curationId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
$ curl 'http://localhost:8080/v1/curations/1' -i -X GET
GET /v1/curations/1 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
ํ๋ ์ด์ ์์ธ ์ ๋ณด |
|
|
ํ๋ ์ด์ ID |
|
|
ํ๋ ์ด์ ๋ช |
|
|
์ค๋ช |
|
|
์ปค๋ฒ ์ด๋ฏธ์ง URL |
|
|
๋ ธ์ถ ์์ |
|
|
ํ์ฑํ ์ํ |
|
|
ํฌํจ๋ ์์คํค ๋ชฉ๋ก |
|
|
์์คํค ID |
|
|
ํ๊ธ๋ช |
|
|
์๋ฌธ๋ช |
|
|
ํ๊ธ ์นดํ ๊ณ ๋ฆฌ๋ช |
|
|
์๋ฌธ ์นดํ ๊ณ ๋ฆฌ๋ช |
|
|
์ด๋ฏธ์ง URL |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์ญ์ ์ผ์ |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1628
{
"success" : true,
"code" : 200,
"data" : {
"id" : 1,
"name" : "ํ
์คํธ ํ๋ ์ด์
",
"description" : "ํ๋ ์ด์
์ค๋ช
์
๋๋ค.",
"coverImageUrl" : "https://example.com/cover.jpg",
"displayOrder" : 1,
"isActive" : true,
"alcohols" : [ {
"alcoholId" : 1,
"korName" : "ํ
์คํธ ์์คํค 1",
"engName" : "Test Whisky 1",
"korCategoryName" : "์ฑ๊ธ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "https://example.com/image.jpg",
"createdAt" : "2024-01-01T00:00:00",
"modifiedAt" : "2024-06-01T00:00:00",
"deletedAt" : null
}, {
"alcoholId" : 2,
"korName" : "ํ
์คํธ ์์คํค 2",
"engName" : "Test Whisky 2",
"korCategoryName" : "์ฑ๊ธ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "https://example.com/image.jpg",
"createdAt" : "2024-02-01T00:00:00",
"modifiedAt" : "2024-07-01T00:00:00",
"deletedAt" : null
}, {
"alcoholId" : 3,
"korName" : "ํ
์คํธ ์์คํค 3",
"engName" : "Test Whisky 3",
"korCategoryName" : "์ฑ๊ธ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "https://example.com/image.jpg",
"createdAt" : "2024-03-01T00:00:00",
"modifiedAt" : "2024-08-01T00:00:00",
"deletedAt" : null
} ],
"createdAt" : "2024-01-01T00:00:00",
"modifiedAt" : "2024-06-01T00:00:00"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.163510897",
"serverPathVersion" : "v1"
}
}
8.3. ํ๋ ์ด์ ์์ฑ
-
์๋ก์ด ํ๋ ์ด์ ์ ์์ฑํฉ๋๋ค.
-
์์คํค ID ๋ชฉ๋ก์ ํจ๊ป ์ง์ ํ ์ ์์ต๋๋ค.
POST /admin/api/v1/curations
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๋ ์ด์ ๋ช (ํ์) |
|
|
์ค๋ช |
|
|
์ปค๋ฒ ์ด๋ฏธ์ง URL |
|
|
๋ ธ์ถ ์์ (๊ธฐ๋ณธ๊ฐ: 0) |
|
|
ํฌํจํ ์์คํค ID ๋ชฉ๋ก |
$ curl 'http://localhost:8080/v1/curations' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"name" : "์ ํ๋ ์ด์
",
"description" : "ํ๋ ์ด์
์ค๋ช
",
"coverImageUrl" : "https://example.com/cover.jpg",
"displayOrder" : 0,
"alcoholIds" : [ ]
}'
POST /v1/curations HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 171
Host: localhost:8080
{
"name" : "์ ํ๋ ์ด์
",
"description" : "ํ๋ ์ด์
์ค๋ช
",
"coverImageUrl" : "https://example.com/cover.jpg",
"displayOrder" : 0,
"alcoholIds" : [ ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์์ฑ๋ ํ๋ ์ด์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 398
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_CREATED",
"message" : "ํ๋ ์ด์
์ด ๋ฑ๋ก๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.109008027",
"serverPathVersion" : "v1"
}
}
8.4. ํ๋ ์ด์ ์์
-
๊ธฐ์กด ํ๋ ์ด์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค.
PUT /admin/api/v1/curations/{curationId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๋ ์ด์ ๋ช (ํ์) |
|
|
์ค๋ช |
|
|
์ปค๋ฒ ์ด๋ฏธ์ง URL |
|
|
๋ ธ์ถ ์์ (ํ์) |
|
|
ํ์ฑํ ์ํ (ํ์) |
|
|
ํฌํจํ ์์คํค ID ๋ชฉ๋ก |
$ curl 'http://localhost:8080/v1/curations/1' -i -X PUT \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"name" : "์์ ๋ ํ๋ ์ด์
",
"description" : "์์ ๋ ์ค๋ช
",
"coverImageUrl" : "https://example.com/updated.jpg",
"displayOrder" : 1,
"isActive" : true,
"alcoholIds" : [ 1, 2 ]
}'
PUT /v1/curations/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 202
Host: localhost:8080
{
"name" : "์์ ๋ ํ๋ ์ด์
",
"description" : "์์ ๋ ์ค๋ช
",
"coverImageUrl" : "https://example.com/updated.jpg",
"displayOrder" : 1,
"isActive" : true,
"alcoholIds" : [ 1, 2 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์์ ๋ ํ๋ ์ด์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 398
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_UPDATED",
"message" : "ํ๋ ์ด์
์ด ์์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.297254993",
"serverPathVersion" : "v1"
}
}
8.5. ํ๋ ์ด์ ์ญ์
-
ํ๋ ์ด์ ์ ์ญ์ ํฉ๋๋ค.
DELETE /admin/api/v1/curations/{curationId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
$ curl 'http://localhost:8080/v1/curations/1' -i -X DELETE
DELETE /v1/curations/1 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ญ์ ๋ ํ๋ ์ด์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 398
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_DELETED",
"message" : "ํ๋ ์ด์
์ด ์ญ์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.138638518",
"serverPathVersion" : "v1"
}
}
8.6. ํ๋ ์ด์ ํ์ฑํ ์ํ ๋ณ๊ฒฝ
-
ํ๋ ์ด์ ์ ํ์ฑํ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
-
๋นํ์ฑํ๋ ํ๋ ์ด์ ์ ํด๋ผ์ด์ธํธ์ ๋ ธ์ถ๋์ง ์์ต๋๋ค.
PATCH /admin/api/v1/curations/{curationId}/status
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ์ฑํ ์ํ (ํ์) |
$ curl 'http://localhost:8080/v1/curations/1/status' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"isActive" : false
}'
PATCH /v1/curations/1/status HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 24
Host: localhost:8080
{
"isActive" : false
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
ํ๋ ์ด์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 422
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_STATUS_UPDATED",
"message" : "ํ๋ ์ด์
ํ์ฑํ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.351483218",
"serverPathVersion" : "v1"
}
}
8.7. ํ๋ ์ด์ ๋ ธ์ถ ์์ ๋ณ๊ฒฝ
-
ํ๋ ์ด์ ์ ๋ ธ์ถ ์์๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
-
์ซ์๊ฐ ์์์๋ก ๋จผ์ ๋ ธ์ถ๋ฉ๋๋ค.
PATCH /admin/api/v1/curations/{curationId}/display-order
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋ ธ์ถ ์์ (0 ์ด์, ํ์) |
$ curl 'http://localhost:8080/v1/curations/1/display-order' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"displayOrder" : 5
}'
PATCH /v1/curations/1/display-order HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 24
Host: localhost:8080
{
"displayOrder" : 5
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
ํ๋ ์ด์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 425
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_DISPLAY_ORDER_UPDATED",
"message" : "ํ๋ ์ด์
๋
ธ์ถ ์์๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.32332855",
"serverPathVersion" : "v1"
}
}
8.8. ํ๋ ์ด์ bulk reorder
-
์ฌ๋ฌ ํ๋ ์ด์ ์ ํ ๋ฒ์ ์ ๋ ฌ ๋ชฉ๋ก์ ๋งจ ์์ผ๋ก ์ฌ๋ฐฐ์นํฉ๋๋ค.
-
๊ธฐ์กด ๋จ๊ฑด API๋ ํน์ ํ๋ ์ด์ 1๊ฐ์ `displayOrder`๋ฅผ ์ง์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
-
bulk reorder API๋ ์์ฒญํ `ids`๋ฅผ ๋ฐฐ์ด ์์๋๋ก ์์ชฝ ์ ๋ ฌ ์ฌ๋กฏ์ ๋ฐฐ์ ํฉ๋๋ค.
-
์์ฒญ ID๋ 1๊ฐ ์ด์ 100๊ฐ ์ดํ์ ๋๋ค.
-
๋นํ์ฑ ๋๋ ๋ฏธ๋ ธ์ถ ํ๋ ์ด์ ๋ ์ ๋ ฌ๊ฐ์ ์ ์ง๋ฉ๋๋ค. ํ์ฑ ํ๋ ์ด์ ๋ง ์กฐํํ๋ฉด `displayOrder`๊ฐ `1,3,5`์ฒ๋ผ ์ฐ์๋์ง ์์ ๋ณด์ผ ์ ์์ต๋๋ค.
PATCH /admin/api/v1/curations/bulk/reorder
{ "ids": [3, 1, 6, 5] }
๋ณ๊ฒฝ ์
์ ๋ ฌ ์ฌ๋กฏ: 1 10 20 30 40
+----+-----+-----+-----+-----+
ํ๋ ์ด์
ID: | 11 | 1 | 3 | 5 | 6 |
+----+-----+-----+-----+-----+
๋ณ๊ฒฝ ํ
์ ๋ ฌ ์ฌ๋กฏ: 1 10 20 30 40
+----+-----+-----+-----+-----+
ํ๋ ์ด์
ID: | 3 | 1 | 6 | 5 | 11 |
+----+-----+-----+-----+-----+
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋งจ ์ ๊ตฌ๊ฐ์ผ๋ก ์ฌ๋ฆด ํ๋ ์ด์ ID ๋ชฉ๋ก (1~100๊ฐ). ๋ฐฐ์ด ์์๊ฐ ์ต์ข ์๋ ์์์ ๋๋ค |
$ curl 'http://localhost:8080/v1/curations/bulk/reorder' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"ids" : [ 3, 1, 6, 5 ]
}'
PATCH /v1/curations/bulk/reorder HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 28
Host: localhost:8080
{
"ids" : [ 3, 1, 6, 5 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
bulk reorder๋ ๋จ์ผ ๋์ ID๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 429
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_DISPLAY_ORDER_UPDATED",
"message" : "ํ๋ ์ด์
๋
ธ์ถ ์์๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : null,
"responseAt" : "2026-07-05 16:33:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.272890603",
"serverPathVersion" : "v1"
}
}
8.9. ํ๋ ์ด์ ์ ์์คํค ์ถ๊ฐ
-
ํ๋ ์ด์ ์ ์์คํค๋ฅผ ๋ฒํฌ๋ก ์ถ๊ฐํฉ๋๋ค.
POST /admin/api/v1/curations/{curationId}/alcohols
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์ถ๊ฐํ ์์คํค ID ๋ชฉ๋ก (ํ์) |
$ curl 'http://localhost:8080/v1/curations/1/alcohols' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"alcoholIds" : [ 1, 2, 3 ]
}'
POST /v1/curations/1/alcohols HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 32
Host: localhost:8080
{
"alcoholIds" : [ 1, 2, 3 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
ํ๋ ์ด์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 417
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_ALCOHOL_ADDED",
"message" : "ํ๋ ์ด์
์ ์์คํค๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.249372254",
"serverPathVersion" : "v1"
}
}
8.10. ํ๋ ์ด์ ์์ ์์คํค ์ ๊ฑฐ
-
ํ๋ ์ด์ ์์ ํน์ ์์คํค๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
DELETE /admin/api/v1/curations/{curationId}/alcohols/{alcoholId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
|
์ ๊ฑฐํ ์์คํค ID |
$ curl 'http://localhost:8080/v1/curations/1/alcohols/5' -i -X DELETE
DELETE /v1/curations/1/alcohols/5 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
ํ๋ ์ด์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 421
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_ALCOHOL_REMOVED",
"message" : "ํ๋ ์ด์
์์ ์์คํค๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.22730451",
"serverPathVersion" : "v1"
}
}
8.11. ํ๋ ์ด์ ์คํ ๋ชฉ๋ก ์กฐํ
-
๋ฆฌ์์ค OpenAPI spec์์ ๋๊ธฐํ๋ ํ๋ ์ด์ ์คํ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
-
ํ๋ ์ด์ ์์ฑ/์์ payload๋ ์ด ์คํ์ requestSpec ๊ธฐ์ค์ผ๋ก ๊ฒ์ฆ๋ฉ๋๋ค.
GET /admin/api/v2/curation-specs
์์ฒญ ์์
$ curl 'http://localhost:8080/v2/curation-specs' -i -X GET
GET /v2/curation-specs HTTP/1.1
Host: localhost:8080
์๋ต ์์
{
"success" : true,
"code" : 200,
"data" : [ {
"id" : 1,
"code" : "RECOMMENDED_WHISKY",
"name" : "์ถ์ฒ ์์คํค",
"description" : "์ถ์ฒ ์์คํค ์นด๋ ๋ชฉ๋ก",
"version" : 1,
"isActive" : true
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.756323659",
"serverPathVersion" : "v1"
}
}
8.12. ํ๋ ์ด์ ์คํ ์์ธ ์กฐํ
-
ํน์ ํ๋ ์ด์ ์คํ์ requestSpec, responseSpec ์์ธ๋ฅผ ์กฐํํฉ๋๋ค.
GET /admin/api/v2/curation-specs/{specId}
์์ฒญ ์์
$ curl 'http://localhost:8080/v2/curation-specs/1' -i -X GET
GET /v2/curation-specs/1 HTTP/1.1
Host: localhost:8080
์๋ต ์์
{
"success" : true,
"code" : 200,
"data" : {
"id" : 1,
"code" : "RECOMMENDED_WHISKY",
"name" : "์ถ์ฒ ์์คํค",
"description" : "์ถ์ฒ ์์คํค ์นด๋ ๋ชฉ๋ก",
"hydratorKey" : "alcohol",
"version" : 1,
"isActive" : true,
"requestSpec" : {
"type" : "object",
"required" : [ "source", "alcohol" ]
},
"responseSpec" : {
"type" : "object"
}
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.836636938",
"serverPathVersion" : "v1"
}
}
8.13. Spec ๊ธฐ๋ฐ ํ๋ ์ด์ ๋ชฉ๋ก ์กฐํ
-
spec ๊ธฐ๋ฐ ํ๋ ์ด์ ๋ชฉ๋ก์ ํ์ด์ง๋ค์ด์ ์ผ๋ก ์กฐํํฉ๋๋ค.
-
ํค์๋์ ํ์ฑ ์ํ ์กฐ๊ฑด์ผ๋ก ํํฐ๋งํ ์ ์์ต๋๋ค.
GET /admin/api/v2/curations
์์ฒญ ์์
$ curl 'http://localhost:8080/v2/curations?keyword=&code=RECOMMENDED_WHISKY&isActive=true&page=0&size=20' -i -X GET
GET /v2/curations?keyword=&code=RECOMMENDED_WHISKY&isActive=true&page=0&size=20 HTTP/1.1
Host: localhost:8080
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ๋ช ๊ฒ์์ด |
|
ํ๋ ์ด์ ์คํ ์ฝ๋ exact match ํํฐ |
|
ํ์ฑ ์ํ ํํฐ |
|
ํ์ด์ง ๋ฒํธ, ๊ธฐ๋ณธ๊ฐ 0 |
|
ํ์ด์ง ํฌ๊ธฐ, ๊ธฐ๋ณธ๊ฐ 20 |
์๋ต ์์
{
"success" : true,
"code" : 200,
"data" : [ {
"id" : 1,
"specId" : 1,
"specCode" : "RECOMMENDED_WHISKY",
"name" : "๋น ์ค๋ ๋ ์์คํค",
"displayOrder" : 1,
"isActive" : true,
"createdAt" : "2026-05-15T00:00:00"
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.787052633",
"size" : 1,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 1
}
}
8.14. Spec ๊ธฐ๋ฐ ํ๋ ์ด์ ์์ธ ์กฐํ
-
ํน์ spec ๊ธฐ๋ฐ ํ๋ ์ด์ ์ ๋ฉํ ์ ๋ณด, ์คํ, ์๋ณธ payload๋ฅผ ์กฐํํฉ๋๋ค.
GET /admin/api/v2/curations/{curationId}
์์ฒญ ์์
$ curl 'http://localhost:8080/v2/curations/1' -i -X GET
GET /v2/curations/1 HTTP/1.1
Host: localhost:8080
์๋ต ์์
{
"success" : true,
"code" : 200,
"data" : {
"id" : 1,
"name" : "๋น ์ค๋ ๋ ์์คํค",
"description" : "์ค๋ชจํค ์์คํค ์ถ์ฒ",
"coverImageUrl" : "https://cdn.example.com/cover.jpg",
"imageUrls" : [ "https://cdn.example.com/cover.jpg" ],
"exposureStartDate" : "2026-06-01",
"exposureEndDate" : "2026-06-30",
"displayOrder" : 1,
"isActive" : true,
"createdAt" : "2026-05-15T00:00:00",
"modifiedAt" : "2026-05-15T00:00:00",
"spec" : {
"id" : 1,
"code" : "RECOMMENDED_WHISKY",
"name" : "์ถ์ฒ ์์คํค",
"description" : "์ถ์ฒ ์์คํค ์นด๋ ๋ชฉ๋ก",
"hydratorKey" : "alcohol",
"version" : 1,
"isActive" : true,
"requestSpec" : {
"type" : "object",
"required" : [ "source", "alcohol" ]
},
"responseSpec" : {
"type" : "object"
}
},
"payload" : {
"source" : "BOTTLE_NOTE",
"alcohol" : {
"korName" : "ํ
์คํธ ์์คํค"
}
}
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.80862729",
"serverPathVersion" : "v1"
}
}
8.15. Spec ๊ธฐ๋ฐ ํ๋ ์ด์ ์์ฑ
-
์ ํํ spec์ requestSpec ๊ธฐ์ค์ผ๋ก payload๋ฅผ ๊ฒ์ฆํ ๋ค ํ๋ ์ด์ ์ ์์ฑํฉ๋๋ค.
POST /admin/api/v2/curations
์์ฒญ ์์
$ curl 'http://localhost:8080/v2/curations' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"specId" : 1,
"name" : "๋น ์ค๋ ๋ ์์คํค",
"description" : "์ค๋ชจํค ์์คํค ์ถ์ฒ",
"imageUrls" : [ "https://cdn.example.com/cover.jpg" ],
"exposureStartDate" : "2026-06-01",
"exposureEndDate" : "2026-06-30",
"displayOrder" : 1,
"isActive" : true,
"payload" : {
"source" : "BOTTLE_NOTE",
"alcohol" : {
"korName" : "ํ
์คํธ ์์คํค"
}
}
}'
POST /v2/curations HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 394
Host: localhost:8080
{
"specId" : 1,
"name" : "๋น ์ค๋ ๋ ์์คํค",
"description" : "์ค๋ชจํค ์์คํค ์ถ์ฒ",
"imageUrls" : [ "https://cdn.example.com/cover.jpg" ],
"exposureStartDate" : "2026-06-01",
"exposureEndDate" : "2026-06-30",
"displayOrder" : 1,
"isActive" : true,
"payload" : {
"source" : "BOTTLE_NOTE",
"alcohol" : {
"korName" : "ํ
์คํธ ์์คํค"
}
}
}
{
"specId" : 1,
"name" : "๋น ์ค๋ ๋ ์์คํค",
"description" : "์ค๋ชจํค ์์คํค ์ถ์ฒ",
"imageUrls" : [ "https://cdn.example.com/cover.jpg" ],
"exposureStartDate" : "2026-06-01",
"exposureEndDate" : "2026-06-30",
"displayOrder" : 1,
"isActive" : true,
"payload" : {
"source" : "BOTTLE_NOTE",
"alcohol" : {
"korName" : "ํ
์คํธ ์์คํค"
}
}
}
์๋ต ์์
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_CREATED",
"message" : "ํ๋ ์ด์
์ด ๋ฑ๋ก๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.739643811",
"serverPathVersion" : "v1"
}
}
8.16. Spec ๊ธฐ๋ฐ ํ๋ ์ด์ ์์
-
๊ธฐ์กด spec ๊ธฐ๋ฐ ํ๋ ์ด์ ์ ๋ฉํ ์ ๋ณด์ payload๋ฅผ ์์ ํฉ๋๋ค.
-
์์ payload๋ requestSpec ๊ธฐ์ค์ผ๋ก ๊ฒ์ฆ๋ฉ๋๋ค.
PUT /admin/api/v2/curations/{curationId}
์์ฒญ ์์
$ curl 'http://localhost:8080/v2/curations/1' -i -X PUT \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"specId" : 1,
"name" : "์์ ๋ ํ๋ ์ด์
",
"description" : "์ค๋ชจํค ์์คํค ์ถ์ฒ",
"imageUrls" : [ "https://cdn.example.com/cover.jpg" ],
"exposureStartDate" : "2026-06-01",
"exposureEndDate" : "2026-06-30",
"displayOrder" : 1,
"isActive" : true,
"payload" : {
"source" : "BOTTLE_NOTE",
"alcohol" : {
"korName" : "ํ
์คํธ ์์คํค"
}
}
}'
PUT /v2/curations/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 392
Host: localhost:8080
{
"specId" : 1,
"name" : "์์ ๋ ํ๋ ์ด์
",
"description" : "์ค๋ชจํค ์์คํค ์ถ์ฒ",
"imageUrls" : [ "https://cdn.example.com/cover.jpg" ],
"exposureStartDate" : "2026-06-01",
"exposureEndDate" : "2026-06-30",
"displayOrder" : 1,
"isActive" : true,
"payload" : {
"source" : "BOTTLE_NOTE",
"alcohol" : {
"korName" : "ํ
์คํธ ์์คํค"
}
}
}
{
"specId" : 1,
"name" : "์์ ๋ ํ๋ ์ด์
",
"description" : "์ค๋ชจํค ์์คํค ์ถ์ฒ",
"imageUrls" : [ "https://cdn.example.com/cover.jpg" ],
"exposureStartDate" : "2026-06-01",
"exposureEndDate" : "2026-06-30",
"displayOrder" : 1,
"isActive" : true,
"payload" : {
"source" : "BOTTLE_NOTE",
"alcohol" : {
"korName" : "ํ
์คํธ ์์คํค"
}
}
}
์๋ต ์์
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_UPDATED",
"message" : "ํ๋ ์ด์
์ด ์์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:11.778027752",
"serverPathVersion" : "v1"
}
}
9. Users API
9.1. ์ ์ ๋ชฉ๋ก ์กฐํ
-
์ฑ ์ฌ์ฉ์(User) ๋ชฉ๋ก์ ํ์ด์ง๋ค์ด์ ์ผ๋ก ์กฐํํฉ๋๋ค.
-
ํค์๋(๋๋ค์/์ด๋ฉ์ผ), ์ํ(ACTIVE/DELETED)๋ก ํํฐ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
-
ํ๋ ์งํ(๋ฆฌ๋ทฐ ์, ๋ณ์ ์, ์ฐ ์)๊ฐ ํฌํจ๋ฉ๋๋ค.
GET /admin/api/v1/users
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๊ฒ์ ํค์๋ (๋๋ค์/์ด๋ฉ์ผ) |
|
์ ์ ์ํ ํํฐ (ACTIVE/DELETED) |
|
์ ๋ ฌ ๊ธฐ์ค (CREATED_AT/NICK_NAME/EMAIL/RATING_COUNT/REVIEW_COUNT, ๊ธฐ๋ณธ๊ฐ: CREATED_AT) |
|
์ ๋ ฌ ๋ฐฉํฅ (ASC/DESC, ๊ธฐ๋ณธ๊ฐ: DESC) |
|
ํ์ด์ง ๋ฒํธ (0๋ถํฐ ์์, ๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 20) |
$ curl 'http://localhost:8080/v1/users?keyword=&status=ACTIVE&sortType=CREATED_AT&sortOrder=DESC&page=0&size=20' -i -X GET
GET /v1/users?keyword=&status=ACTIVE&sortType=CREATED_AT&sortOrder=DESC&page=0&size=20 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ ์ ๋ชฉ๋ก |
|
|
์ ์ ID |
|
|
์ด๋ฉ์ผ |
|
|
๋๋ค์ |
|
|
ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
์ ์ ๊ถํ (ROLE_USER/ROLE_ADMIN) |
|
|
์ ์ ์ํ (ACTIVE/DELETED) |
|
|
์์ ๋ก๊ทธ์ธ ํ์ ๋ชฉ๋ก (KAKAO/NAVER/GOOGLE/APPLE) |
|
|
๋ฆฌ๋ทฐ ์ |
|
|
๋ณ์ ์ |
|
|
์ฐ ์ |
|
|
๊ฐ์ ์ผ |
|
|
์ต์ข ๋ก๊ทธ์ธ์ผ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
ํ์ฌ ํ์ด์ง ๋ฒํธ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
์ ์ฒด ์์ ์ |
|
|
์ ์ฒด ํ์ด์ง ์ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1059
{
"success" : true,
"code" : 200,
"data" : [ {
"userId" : 1,
"email" : "user1@example.com",
"nickName" : "์ฌ์ฉ์1",
"imageUrl" : "https://img.example.com/1.jpg",
"role" : "ROLE_USER",
"status" : "ACTIVE",
"socialType" : [ "KAKAO" ],
"reviewCount" : 5,
"ratingCount" : 3,
"picksCount" : 2,
"createAt" : "2025-01-15T10:00:00",
"lastLoginAt" : "2026-04-01T14:30:00"
}, {
"userId" : 2,
"email" : "user2@example.com",
"nickName" : "์ฌ์ฉ์2",
"imageUrl" : null,
"role" : "ROLE_USER",
"status" : "ACTIVE",
"socialType" : [ "GOOGLE", "APPLE" ],
"reviewCount" : 0,
"ratingCount" : 1,
"picksCount" : 0,
"createAt" : "2025-06-20T09:00:00",
"lastLoginAt" : null
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:13.608269251",
"size" : 2,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 2
}
}
10. Review API
10.1. ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํ
-
๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ํ์ด์ง๋ค์ด์ ์ผ๋ก ์กฐํํฉ๋๋ค.
-
์ , ์์ฑ์, ํ์ฑ ์ํ, ๋ ธ์ถ ์ํ, ํค์๋, ์์ฑ์ผ์ ๋ฒ์๋ก ํํฐ๋งํ ์ ์์ต๋๋ค.
-
`sortType`์ ์ ๋ ฌ ๊ธฐ์ค์, `sortOrder`๋ ์ ํํ ๊ธฐ์ค์ ์ ๋ ฌ ๋ฐฉํฅ์ ์๋ฏธํฉ๋๋ค.
-
๊ธฐ๋ณธ ์ ๋ ฌ์ ์์ฑ์ผ์ ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์์ ๋๋ค.
GET /admin/api/v1/reviews
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ ID ํํฐ |
|
์์ฑ์ ์ ์ ID ํํฐ |
|
๋ฆฌ๋ทฐ ํ์ฑ ์ํ ํํฐ (ACTIVE/DELETED/DISABLED) |
|
๋ฆฌ๋ทฐ ๋ ธ์ถ ์ํ ํํฐ (PUBLIC/PRIVATE) |
|
๊ฒ์์ด (๋ฆฌ๋ทฐ ๋ณธ๋ฌธ/์์ฑ์ ๋๋ค์/์์ฑ์ ์ด๋ฉ์ผ/์ ํ๊ธ๋ช /์ ์๋ฌธ๋ช ) |
|
์์ฑ์ผ์ ์์ ๋ฒ์ (ISO-8601 LocalDateTime) |
|
์์ฑ์ผ์ ์ข ๋ฃ ๋ฒ์ (ISO-8601 LocalDateTime) |
|
์ ๋ ฌ ๊ธฐ์ค (๊ธฐ๋ณธ๊ฐ: CREATED_AT, ์์ธ ๊ฐ์ AdminReviewSortType ํ ์ฐธ์กฐ) |
|
์ ๋ ฌ ๋ฐฉํฅ (๊ธฐ๋ณธ๊ฐ: DESC, ์์ธ ๊ฐ์ SortOrder ํ ์ฐธ์กฐ) |
|
ํ์ด์ง ๋ฒํธ (0 ์ด์, ๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (1~100, ๊ธฐ๋ณธ๊ฐ: 20) |
AdminReviewSortType (๊ด๋ฆฌ์ ๋ฆฌ๋ทฐ ์ ๋ ฌ ๊ธฐ์ค)
| ๊ฐ | ์ค๋ช |
|---|---|
|
๋ฆฌ๋ทฐ ์์ฑ์ผ์ ๊ธฐ์ค ์ ๋ ฌ |
|
๋ฆฌ๋ทฐ ๋๊ธ ์ ๊ธฐ์ค ์ ๋ ฌ |
|
๋ฆฌ๋ทฐ ์ต์ข ์์ ์ผ์ ๊ธฐ์ค ์ ๋ ฌ |
SortOrder (์ ๋ ฌ ๋ฐฉํฅ)
| ๊ฐ | ์ค๋ช |
|---|---|
|
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ |
|
์ค๋ฆ์ฐจ์ ์ ๋ ฌ |
$ curl 'http://localhost:8080/v1/reviews?alcoholId=101&userId=1001&activeStatus=ACTIVE&displayStatus=PUBLIC&keyword=%EA%B8%80%EB%A0%8C&createdFrom=2026-01-01T00%3A00%3A00&createdTo=2026-01-31T23%3A59%3A59&sortType=CREATED_AT&sortOrder=DESC&page=0&size=20' -i -X GET
GET /v1/reviews?alcoholId=101&userId=1001&activeStatus=ACTIVE&displayStatus=PUBLIC&keyword=%EA%B8%80%EB%A0%8C&createdFrom=2026-01-01T00%3A00%3A00&createdTo=2026-01-31T23%3A59%3A59&sortType=CREATED_AT&sortOrder=DESC&page=0&size=20 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๋ฆฌ๋ทฐ ๋ชฉ๋ก |
|
|
๋ฆฌ๋ทฐ ID |
|
|
์ ID |
|
|
์ ์ด๋ฆ |
|
|
์์ฑ์ ์ ์ ID |
|
|
์์ฑ์ ๋๋ค์ |
|
|
๋ฆฌ๋ทฐ ๋ณธ๋ฌธ |
|
|
๋ฆฌ๋ทฐ ํ์ |
|
|
๋ฆฌ๋ทฐ ํ์ฑ ์ํ (ACTIVE/DELETED/DISABLED) |
|
|
๋ฆฌ๋ทฐ ๋ ธ์ถ ์ํ (PUBLIC/PRIVATE) |
|
|
๋๊ธ ์ |
|
|
๋ฆฌ๋ทฐ ์์ฑ์ผ์ |
|
|
๋ฆฌ๋ทฐ ์ต์ข ์์ ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
ํ์ฌ ํ์ด์ง ๋ฒํธ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
์ ์ฒด ์์ ์ |
|
|
์ ์ฒด ํ์ด์ง ์ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1170
{
"success" : true,
"code" : 200,
"data" : [ {
"reviewId" : 1,
"alcoholId" : 101,
"alcoholName" : "๊ธ๋ ํผ๋ 12๋
",
"userId" : 1001,
"userNickname" : "reviewer1",
"content" : "ํฅ์ด ํ๋ถํ๊ณ ๊ท ํ๊ฐ์ด ์ข์ต๋๋ค.",
"reviewRating" : 4.5,
"activeStatus" : "ACTIVE",
"displayStatus" : "PUBLIC",
"replyCount" : 3,
"createAt" : "2026-01-10T10:30:00",
"lastModifyAt" : "2026-01-12T09:15:00"
}, {
"reviewId" : 2,
"alcoholId" : 102,
"alcoholName" : "๋งฅ์ผ๋ 12๋
",
"userId" : 1002,
"userNickname" : "reviewer2",
"content" : "๋น๊ณต๊ฐ ์ฒ๋ฆฌ๋ ์ด์ ํ์ธ ๋์ ๋ฆฌ๋ทฐ์
๋๋ค.",
"reviewRating" : 3.0,
"activeStatus" : "DISABLED",
"displayStatus" : "PRIVATE",
"replyCount" : 0,
"createAt" : "2026-01-09T18:00:00",
"lastModifyAt" : "2026-01-09T18:00:00"
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:13.188383406",
"size" : 2,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 2
}
}
11. Banner API
11.1. ๋ฐฐ๋ ๋ชฉ๋ก ์กฐํ
-
๋ฐฐ๋ ๋ชฉ๋ก์ ํ์ด์ง๋ค์ด์ ์ผ๋ก ์กฐํํฉ๋๋ค.
-
ํค์๋, ํ์ฑํ ์ํ, ๋ฐฐ๋ ์ ํ์ผ๋ก ํํฐ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
BannerType (๋ฐฐ๋ ์ ํ)
| ๊ฐ | ์ค๋ช |
|---|---|
|
ํ๋ ์ด์ |
|
๊ด๊ณ |
|
์ค๋ฌธ์ง |
|
์ ํด |
|
๊ธฐํ |
TextPosition (ํ ์คํธ ์์น)
| ๊ฐ | ์ค๋ช |
|---|---|
|
์ข์๋จ |
|
์ขํ๋จ |
|
์ฐ์๋จ |
|
์ฐํ๋จ |
|
์ค์ |
GET /admin/api/v1/banners
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๊ฒ์์ด (๋ฐฐ๋๋ช ) |
|
ํ์ฑํ ์ํ ํํฐ (true/false/null) |
|
๋ฐฐ๋ ์ ํ ํํฐ (CURATION/AD/SURVEY/PARTNERSHIP/ETC) |
|
ํ์ด์ง ๋ฒํธ (0๋ถํฐ ์์, ๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 20) |
$ curl 'http://localhost:8080/v1/banners?keyword=&isActive=true&bannerType=CURATION&page=0&size=20' -i -X GET
GET /v1/banners?keyword=&isActive=true&bannerType=CURATION&page=0&size=20 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๋ฐฐ๋ ๋ชฉ๋ก |
|
|
๋ฐฐ๋ ID |
|
|
๋ฐฐ๋๋ช |
|
|
๋ฏธ๋์ด ์ ํ (IMAGE, VIDEO). ํ๋ก ํธ์๋์์ img/video ํ๊ทธ ๋ถ๊ธฐ์ฉ |
|
|
๋ฐฐ๋ ์ ํ |
|
|
์ ๋ ฌ ์์ |
|
|
ํ์ฑํ ์ํ |
|
|
์์์ผ์ |
|
|
์ข ๋ฃ์ผ์ |
|
|
์์ฑ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
ํ์ฌ ํ์ด์ง ๋ฒํธ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
์ ์ฒด ์์ ์ |
|
|
์ ์ฒด ํ์ด์ง ์ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1047
{
"success" : true,
"code" : 200,
"data" : [ {
"id" : 1,
"name" : "๋ฐฐ๋ 1",
"mediaType" : "IMAGE",
"bannerType" : "CURATION",
"sortOrder" : 0,
"isActive" : true,
"startDate" : null,
"endDate" : null,
"createdAt" : "2024-01-01T00:00:00"
}, {
"id" : 2,
"name" : "๋ฐฐ๋ 2",
"mediaType" : "IMAGE",
"bannerType" : "CURATION",
"sortOrder" : 1,
"isActive" : true,
"startDate" : null,
"endDate" : null,
"createdAt" : "2024-02-01T00:00:00"
}, {
"id" : 3,
"name" : "๋ฐฐ๋ 3",
"mediaType" : "IMAGE",
"bannerType" : "CURATION",
"sortOrder" : 2,
"isActive" : true,
"startDate" : null,
"endDate" : null,
"createdAt" : "2024-03-01T00:00:00"
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:10.461822131",
"size" : 3,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 3
}
}
11.2. ๋ฐฐ๋ ์์ธ ์กฐํ
-
ํน์ ๋ฐฐ๋์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
GET /admin/api/v1/banners/{bannerId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฐฐ๋ ID |
$ curl 'http://localhost:8080/v1/banners/1' -i -X GET
GET /v1/banners/1 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๋ฐฐ๋ ์์ธ ์ ๋ณด |
|
|
๋ฐฐ๋ ID |
|
|
๋ฐฐ๋๋ช |
|
|
๋ฐฐ๋๋ช ํฐํธ ์์ (HEX) |
|
|
๋ฐฐ๋ ์ค๋ช A |
|
|
๋ฐฐ๋ ์ค๋ช B |
|
|
์ค๋ช ํฐํธ ์์ (HEX) |
|
|
์ด๋ฏธ์ง URL. [์ฃผ์] URL ํ์ ๊ฒ์ฆ์ ์ํํ์ง ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์ ํจํ URL์ ์ ๋ฌํด์ผ ํฉ๋๋ค |
|
|
ํ ์คํธ ์์น (RT/CENTER/LB ๋ฑ) |
|
|
์ธ๋ถ URL ์ฌ๋ถ |
|
|
์ด๋ URL. [์ฃผ์] URL ํ์ ๊ฒ์ฆ์ ์ํํ์ง ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์ ํจํ URL์ ์ ๋ฌํด์ผ ํฉ๋๋ค |
|
|
๋ฏธ๋์ด ์ ํ (IMAGE, VIDEO). ํ๋ก ํธ์๋์์ img/video ํ๊ทธ ๋ถ๊ธฐ์ฉ |
|
|
๋ฐฐ๋ ์ ํ |
|
|
์ ๋ ฌ ์์ |
|
|
์์์ผ์ |
|
|
์ข ๋ฃ์ผ์ |
|
|
ํ์ฑํ ์ํ |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 805
{
"success" : true,
"code" : 200,
"data" : {
"id" : 1,
"name" : "ํ
์คํธ ๋ฐฐ๋",
"nameFontColor" : "#ffffff",
"descriptionA" : "๋ฐฐ๋ ์ค๋ช
A",
"descriptionB" : "๋ฐฐ๋ ์ค๋ช
B",
"descriptionFontColor" : "#ffffff",
"imageUrl" : "https://example.com/banner.jpg",
"textPosition" : "RT",
"isExternalUrl" : false,
"targetUrl" : null,
"mediaType" : "IMAGE",
"bannerType" : "CURATION",
"sortOrder" : 0,
"startDate" : null,
"endDate" : null,
"isActive" : true,
"createdAt" : "2024-01-01T00:00:00",
"modifiedAt" : "2024-06-01T00:00:00"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:10.425944503",
"serverPathVersion" : "v1"
}
}
11.3. ๋ฐฐ๋ ์์ฑ
-
์๋ก์ด ๋ฐฐ๋๋ฅผ ์์ฑํฉ๋๋ค.
-
URL ํ์ ๊ฒ์ฆ์ ์ํํ์ง ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์ ํจํ URL์ ์ ๋ฌํด์ผ ํฉ๋๋ค.
POST /admin/api/v1/banners
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋ฐฐ๋๋ช (ํ์) |
|
|
๋ฐฐ๋๋ช ํฐํธ ์์ (HEX, ๊ธฐ๋ณธ๊ฐ: #ffffff) |
|
|
๋ฐฐ๋ ์ค๋ช A (์ต๋ 50์) |
|
|
๋ฐฐ๋ ์ค๋ช B (์ต๋ 50์) |
|
|
์ค๋ช ํฐํธ ์์ (HEX, ๊ธฐ๋ณธ๊ฐ: #ffffff) |
|
|
์ด๋ฏธ์ง URL (ํ์). [์ฃผ์] URL ํ์ ๊ฒ์ฆ์ ์ํํ์ง ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์ ํจํ URL์ ์ ๋ฌํด์ผ ํฉ๋๋ค |
|
|
ํ ์คํธ ์์น (RT/CENTER/LB ๋ฑ, ๊ธฐ๋ณธ๊ฐ: RT) |
|
|
์ธ๋ถ URL ์ฌ๋ถ (๊ธฐ๋ณธ๊ฐ: false) |
|
|
์ด๋ URL (isExternalUrl=true ์ ํ์). [์ฃผ์] URL ํ์ ๊ฒ์ฆ์ ์ํํ์ง ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์ ํจํ URL์ ์ ๋ฌํด์ผ ํฉ๋๋ค |
|
|
๋ฏธ๋์ด ์ ํ (IMAGE/VIDEO, ๊ธฐ๋ณธ๊ฐ: IMAGE). ํ๋ก ํธ์๋์์ img/video ํ๊ทธ ๋ถ๊ธฐ์ฉ |
|
|
๋ฐฐ๋ ์ ํ (ํ์: CURATION/AD/SURVEY/PARTNERSHIP/ETC) |
|
|
์ ๋ ฌ ์์ (0 ์ด์, ๊ธฐ๋ณธ๊ฐ: 0) |
|
|
์์์ผ์ |
|
|
์ข ๋ฃ์ผ์ |
$ curl 'http://localhost:8080/v1/banners' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"name" : "์ ๋ฐฐ๋",
"nameFontColor" : "#ffffff",
"descriptionA" : "๋ฐฐ๋ ์ค๋ช
A",
"descriptionB" : "๋ฐฐ๋ ์ค๋ช
B",
"descriptionFontColor" : "#ffffff",
"imageUrl" : "https://example.com/banner.jpg",
"textPosition" : "RT",
"isExternalUrl" : false,
"targetUrl" : null,
"mediaType" : "IMAGE",
"bannerType" : "CURATION",
"sortOrder" : 0,
"startDate" : null,
"endDate" : null
}'
POST /v1/banners HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 408
Host: localhost:8080
{
"name" : "์ ๋ฐฐ๋",
"nameFontColor" : "#ffffff",
"descriptionA" : "๋ฐฐ๋ ์ค๋ช
A",
"descriptionB" : "๋ฐฐ๋ ์ค๋ช
B",
"descriptionFontColor" : "#ffffff",
"imageUrl" : "https://example.com/banner.jpg",
"textPosition" : "RT",
"isExternalUrl" : false,
"targetUrl" : null,
"mediaType" : "IMAGE",
"bannerType" : "CURATION",
"sortOrder" : 0,
"startDate" : null,
"endDate" : null
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์์ฑ๋ ๋ฐฐ๋ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 390
{
"success" : true,
"code" : 200,
"data" : {
"code" : "BANNER_CREATED",
"message" : "๋ฐฐ๋๊ฐ ๋ฑ๋ก๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:10"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:10.370358283",
"serverPathVersion" : "v1"
}
}
11.4. ๋ฐฐ๋ ์์
-
๊ธฐ์กด ๋ฐฐ๋ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค.
PUT /admin/api/v1/banners/{bannerId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฐฐ๋ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋ฐฐ๋๋ช (ํ์) |
|
|
๋ฐฐ๋๋ช ํฐํธ ์์ (HEX) |
|
|
๋ฐฐ๋ ์ค๋ช A (์ต๋ 50์) |
|
|
๋ฐฐ๋ ์ค๋ช B (์ต๋ 50์) |
|
|
์ค๋ช ํฐํธ ์์ (HEX) |
|
|
์ด๋ฏธ์ง URL (ํ์). [์ฃผ์] URL ํ์ ๊ฒ์ฆ์ ์ํํ์ง ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์ ํจํ URL์ ์ ๋ฌํด์ผ ํฉ๋๋ค |
|
|
ํ ์คํธ ์์น (RT/CENTER/LB ๋ฑ) |
|
|
์ธ๋ถ URL ์ฌ๋ถ |
|
|
์ด๋ URL (isExternalUrl=true ์ ํ์). [์ฃผ์] URL ํ์ ๊ฒ์ฆ์ ์ํํ์ง ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์ ํจํ URL์ ์ ๋ฌํด์ผ ํฉ๋๋ค |
|
|
๋ฏธ๋์ด ์ ํ (IMAGE/VIDEO, ๋ฏธ์ ๋ ฅ ์ ๊ธฐ์กด ๊ฐ ์ ์ง). ํ๋ก ํธ์๋์์ img/video ํ๊ทธ ๋ถ๊ธฐ์ฉ |
|
|
๋ฐฐ๋ ์ ํ (ํ์: CURATION/AD/SURVEY/PARTNERSHIP/ETC) |
|
|
์ ๋ ฌ ์์ (0 ์ด์, ํ์) |
|
|
์์์ผ์ |
|
|
์ข ๋ฃ์ผ์ |
|
|
ํ์ฑํ ์ํ (ํ์) |
$ curl 'http://localhost:8080/v1/banners/1' -i -X PUT \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"name" : "์์ ๋ ๋ฐฐ๋",
"nameFontColor" : "#000000",
"descriptionA" : "์์ ๋ ์ค๋ช
A",
"descriptionB" : "์์ ๋ ์ค๋ช
B",
"descriptionFontColor" : "#000000",
"imageUrl" : "https://example.com/updated.jpg",
"textPosition" : "CENTER",
"isExternalUrl" : false,
"targetUrl" : null,
"mediaType" : "IMAGE",
"bannerType" : "CURATION",
"sortOrder" : 1,
"startDate" : null,
"endDate" : null,
"isActive" : true
}'
PUT /v1/banners/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 446
Host: localhost:8080
{
"name" : "์์ ๋ ๋ฐฐ๋",
"nameFontColor" : "#000000",
"descriptionA" : "์์ ๋ ์ค๋ช
A",
"descriptionB" : "์์ ๋ ์ค๋ช
B",
"descriptionFontColor" : "#000000",
"imageUrl" : "https://example.com/updated.jpg",
"textPosition" : "CENTER",
"isExternalUrl" : false,
"targetUrl" : null,
"mediaType" : "IMAGE",
"bannerType" : "CURATION",
"sortOrder" : 1,
"startDate" : null,
"endDate" : null,
"isActive" : true
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์์ ๋ ๋ฐฐ๋ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 390
{
"success" : true,
"code" : 200,
"data" : {
"code" : "BANNER_UPDATED",
"message" : "๋ฐฐ๋๊ฐ ์์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:10"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:10.546527318",
"serverPathVersion" : "v1"
}
}
11.5. ๋ฐฐ๋ ์ญ์
-
๋ฐฐ๋๋ฅผ ์ญ์ ํฉ๋๋ค. (๋ฌผ๋ฆฌ ์ญ์ )
DELETE /admin/api/v1/banners/{bannerId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฐฐ๋ ID |
$ curl 'http://localhost:8080/v1/banners/1' -i -X DELETE
DELETE /v1/banners/1 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ญ์ ๋ ๋ฐฐ๋ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 390
{
"success" : true,
"code" : 200,
"data" : {
"code" : "BANNER_DELETED",
"message" : "๋ฐฐ๋๊ฐ ์ญ์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:10"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:10.403282881",
"serverPathVersion" : "v1"
}
}
11.6. ๋ฐฐ๋ ํ์ฑํ ์ํ ๋ณ๊ฒฝ
-
๋ฐฐ๋์ ํ์ฑํ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
-
๋นํ์ฑํ๋ ๋ฐฐ๋๋ ํด๋ผ์ด์ธํธ์ ๋ ธ์ถ๋์ง ์์ต๋๋ค.
PATCH /admin/api/v1/banners/{bannerId}/status
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฐฐ๋ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ์ฑํ ์ํ (ํ์) |
$ curl 'http://localhost:8080/v1/banners/1/status' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"isActive" : false
}'
PATCH /v1/banners/1/status HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 24
Host: localhost:8080
{
"isActive" : false
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
๋ฐฐ๋ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 414
{
"success" : true,
"code" : 200,
"data" : {
"code" : "BANNER_STATUS_UPDATED",
"message" : "๋ฐฐ๋ ํ์ฑํ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:10"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:10.604298085",
"serverPathVersion" : "v1"
}
}
11.7. ๋ฐฐ๋ ์ ๋ ฌ ์์ ๋ณ๊ฒฝ
-
๋ฐฐ๋์ ์ ๋ ฌ ์์๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
-
์ซ์๊ฐ ์์์๋ก ๋จผ์ ๋ ธ์ถ๋ฉ๋๋ค.
-
๋์ผ ์์ ์ถฉ๋ ์ ๊ธฐ์กด ๋ฐฐ๋๋ค์ด ์๋์ผ๋ก ๋ฆฌ์ค๋๋ง๋ฉ๋๋ค.
PATCH /admin/api/v1/banners/{bannerId}/sort-order
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฐฐ๋ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์ ๋ ฌ ์์ (0 ์ด์, ํ์) |
$ curl 'http://localhost:8080/v1/banners/1/sort-order' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"sortOrder" : 5
}'
PATCH /v1/banners/1/sort-order HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 21
Host: localhost:8080
{
"sortOrder" : 5
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
๋ฐฐ๋ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 415
{
"success" : true,
"code" : 200,
"data" : {
"code" : "BANNER_SORT_ORDER_UPDATED",
"message" : "๋ฐฐ๋ ์ ๋ ฌ ์์๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-07-05 16:33:10"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:10.578281714",
"serverPathVersion" : "v1"
}
}
11.8. ๋ฐฐ๋ bulk reorder
-
์ฌ๋ฌ ๋ฐฐ๋๋ฅผ ํ ๋ฒ์ ์ ๋ ฌ ๋ชฉ๋ก์ ๋งจ ์์ผ๋ก ์ฌ๋ฐฐ์นํฉ๋๋ค.
-
๊ธฐ์กด ๋จ๊ฑด API๋ ํน์ ๋ฐฐ๋ 1๊ฐ์ `sortOrder`๋ฅผ ์ง์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
-
bulk reorder API๋ ์์ฒญํ `ids`๋ฅผ ๋ฐฐ์ด ์์๋๋ก ์์ชฝ ์ ๋ ฌ ์ฌ๋กฏ์ ๋ฐฐ์ ํฉ๋๋ค.
-
์์ฒญ ID๋ 1๊ฐ ์ด์ 100๊ฐ ์ดํ์ ๋๋ค.
-
๋นํ์ฑ ๋ฐฐ๋๋ ์ ๋ ฌ๊ฐ์ ์ ์ง๋ฉ๋๋ค. `isActive=true`๋ก ์กฐํํ๋ฉด ํ๋ฉด์๋ ๋ณด์ด์ง ์์๋ bulk reorder ๊ฒฐ๊ณผ๋ก ๋ค๋ก ๋ฐ๋ฆด ์ ์์ต๋๋ค.
PATCH /admin/api/v1/banners/bulk/reorder
{ "ids": [3, 1, 6, 5] }
๋ณ๊ฒฝ ์
์ ๋ ฌ ์ฌ๋กฏ: 1 10 20 30 40
+----+-----+-----+-----+-----+
๋ฐฐ๋ ID: | 11 | 1 | 3 | 5 | 6 |
+----+-----+-----+-----+-----+
๋ณ๊ฒฝ ํ
์ ๋ ฌ ์ฌ๋กฏ: 1 10 20 30 40
+----+-----+-----+-----+-----+
๋ฐฐ๋ ID: | 3 | 1 | 6 | 5 | 11 |
+----+-----+-----+-----+-----+
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋งจ ์ ๊ตฌ๊ฐ์ผ๋ก ์ฌ๋ฆด ๋ฐฐ๋ ID ๋ชฉ๋ก (1~100๊ฐ). ๋ฐฐ์ด ์์๊ฐ ์ต์ข ์๋ ์์์ ๋๋ค |
$ curl 'http://localhost:8080/v1/banners/bulk/reorder' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"ids" : [ 3, 1, 6, 5 ]
}'
PATCH /v1/banners/bulk/reorder HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 28
Host: localhost:8080
{
"ids" : [ 3, 1, 6, 5 ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
bulk reorder๋ ๋จ์ผ ๋์ ID๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 418
{
"success" : true,
"code" : 200,
"data" : {
"code" : "BANNER_SORT_ORDER_UPDATED",
"message" : "๋ฐฐ๋ ์ ๋ ฌ ์์๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : null,
"responseAt" : "2026-07-05 16:33:10"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-07-06T01:33:10.504580583",
"serverPathVersion" : "v1"
}
}