Bottle Note Admin 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 /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" : "45NB0IdMDEUNFhoo6aSEJoCd4ogXTKZU",
"refreshToken" : "H3rWo6kqoHlE1okBrRMMe5Gj8b98ACQB"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:22.765819652",
"serverPathVersion" : "v1"
}
}
2.2. ํ ํฐ ๊ฐฑ์
-
๋ฆฌํ๋ ์ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ต๋๋ค.
POST /admin/api/v1/auth/refresh
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋ฆฌํ๋ ์ ํ ํฐ |
POST /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" : "ynrM8nEWwJPLLygaBSPXlHyDvvxbGQNF",
"refreshToken" : "GmfB6SOWt0iVa1ZfYQzb4OY9O6QI8Abm"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:22.791133856",
"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 /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: 380
{
"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-04-08T22:53:22.729611519",
"serverPathVersion" : "v1"
}
}
2.4. ํํด
-
์ธ์ฆ๋ ๊ด๋ฆฌ์ ๊ณ์ ์ ํํด ์ฒ๋ฆฌํฉ๋๋ค.
DELETE /admin/api/v1/auth/withdraw
์์ฒญ ํค๋
| Name | Description |
|---|---|
|
Bearer ์ก์ธ์ค ํ ํฐ |
DELETE /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-04-08T22:53:22.677793668",
"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/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 /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-04-08T13:53:18.781091333",
"serverPathVersion" : "v1"
}
}
3.2. ์ (Alcohol) ๋จ๊ฑด ์์ธ ์กฐํ
-
๊ด๋ฆฌ์์ฉ ์ ๋จ๊ฑด ์์ธ ์กฐํ API์ ๋๋ค.
-
๊ธฐ๋ณธ ์ ๋ณด, ์นดํ ๊ณ ๋ฆฌ, ์คํ, ์ง์ญ, ์ฆ๋ฅ์, ํ ์ด์คํ ํ๊ทธ, ํต๊ณ ์ ๋ณด๋ฅผ ๋ชจ๋ ํฌํจํฉ๋๋ค.
GET /admin/api/v1/alcohols/{alcoholId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ ID |
$ curl 'http://localhost:8080/alcohols/1' -i -X GET
GET /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-04-08T22:53:19.635627766",
"serverPathVersion" : "v1"
}
}
3.3. ์ (Alcohol) ์์ฑ
-
๊ด๋ฆฌ์์ฉ ์ ์์ฑ API์ ๋๋ค.
-
๋ชจ๋ ํ๋๋ ํ์๊ฐ์ ๋๋ค.
POST /admin/api/v1/alcohols
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๊ธ ์ด๋ฆ |
|
|
์๋ฌธ ์ด๋ฆ |
|
|
๋์ |
|
|
์ ํ์ (WHISKY ๋ฑ) |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน (SINGLE_MALT ๋ฑ) |
|
|
์ง์ญ ID |
|
|
์ฆ๋ฅ์ ID |
|
|
์์ฑ๋ ๋ |
|
|
์บ์คํฌ ํ์ |
|
|
์ด๋ฏธ์ง URL |
|
|
์ค๋ช |
|
|
์ฉ๋ |
|
|
ํ ์ด์คํ ํ๊ทธ ID ๋ชฉ๋ก |
AlcoholType (์ ํ์ )
| ๊ฐ | ์ค๋ช |
|---|---|
|
์์คํค |
|
๋ผ |
|
๋ณด๋์นด |
|
์ง |
|
๋ฐํฌ๋ผ |
|
๋ธ๋๋ |
|
๋งฅ์ฃผ |
|
์์ธ |
|
๊ธฐํ |
AlcoholCategoryGroup (์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน)
| ๊ฐ | ์ค๋ช |
|---|---|
|
์ฑ๊ธ๋ชฐํธ ์์คํค |
|
๋ธ๋ ๋๋ ์์คํค |
|
๋ธ๋ ๋๋ ๋ชฐํธ ์์คํค |
|
๋ฒ๋ฒ ์์คํค |
|
๋ผ์ด ์์คํค |
|
๊ธฐํ ์์คํค |
$ curl 'http://localhost:8080/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 /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: 393
{
"success" : true,
"code" : 200,
"data" : {
"code" : "ALCOHOL_CREATED",
"message" : "์์คํค๊ฐ ๋ฑ๋ก๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-04-08 13:53:19"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:19.96254606",
"serverPathVersion" : "v1"
}
}
3.4. ์ (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/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 /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-04-08 13:53:19"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:20.000960629",
"serverPathVersion" : "v1"
}
}
3.5. ์ (Alcohol) ์ญ์
-
๊ด๋ฆฌ์์ฉ ์ ์ญ์ API์ ๋๋ค.
-
์ํํธ ์ญ์ ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ์ค์ ๋ฐ์ดํฐ๋ ์ญ์ ๋์ง ์์ต๋๋ค.
-
๋ฆฌ๋ทฐ ๋๋ ํ์ ์ด ์กด์ฌํ๋ ์ ์ ์ญ์ ํ ์ ์์ต๋๋ค.
-
์ด๋ฏธ ์ญ์ ๋ ์ ์ ์ฌ์ญ์ ํ ์ ์์ต๋๋ค.
DELETE /admin/api/v1/alcohols/{alcoholId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ญ์ ํ ์ ID |
$ curl 'http://localhost:8080/alcohols/1' -i -X DELETE
DELETE /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-04-08 13:53:19"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:19.595359491",
"serverPathVersion" : "v1"
}
}
3.6. ์นดํ ๊ณ ๋ฆฌ ๋ ํผ๋ฐ์ค ์กฐํ
-
ํ์ฌ DB์ ๋ฑ๋ก๋ ๋ชจ๋ ์นดํ ๊ณ ๋ฆฌ ํ์ด(ํ๊ธ/์๋ฌธ) ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
-
์ ์์ฑ/์์ ์ ๊ธฐ์กด ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํ API์ ๋๋ค.
-
๋์ผ ํ๊ธ ์นดํ ๊ณ ๋ฆฌ๋ผ๋ ์๋ฌธ ์นดํ ๊ณ ๋ฆฌ๊ฐ ๋ค๋ฅด๋ฉด ๋ณ๋ ํญ๋ชฉ์ผ๋ก ์กฐํ๋ฉ๋๋ค.
GET /admin/api/v1/alcohols/categories/reference
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์นดํ ๊ณ ๋ฆฌ ํ์ด ๋ชฉ๋ก |
|
|
ํ๊ธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์๋ฌธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 460
{
"success" : true,
"code" : 200,
"data" : [ {
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "Single Malt"
}, {
"korCategory" : "๋ธ๋ ๋๋",
"engCategory" : "Blended"
}, {
"korCategory" : "๋ฒ๋ฒ",
"engCategory" : "Bourbon"
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:19.72385149",
"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 /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-04-08T13:53:25.277155046"
} ]
},
"cursorPageable" : {
"currentCursor" : 0,
"cursor" : 20,
"pageSize" : 20,
"hasNext" : false
}
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:25.280926197",
"serverPathVersion" : "v1"
}
}
4.2. ๋ฌธ์ ์์ธ ์กฐํ
-
ํน์ ๋ฌธ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
-
๋ฌธ์ ๋ด์ฉ, ์ด๋ฏธ์ง, ๋ต๋ณ ๋ด์ฉ ๋ฑ์ ํ์ธํ ์ ์์ต๋๋ค.
GET /admin/api/v1/helps/{helpId}
์์ฒญ ํค๋
| Name | Description |
|---|---|
|
Bearer ์ก์ธ์ค ํ ํฐ |
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฌธ์ ID |
GET /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-04-08T13:53:25.197951792",
"lastModifyAt" : "2026-04-08T13:53:25.197962542"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:25.203897138",
"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 /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: 340
{
"success" : true,
"code" : 200,
"data" : {
"helpId" : 1,
"status" : "SUCCESS",
"message" : "๋ต๋ณ์ด ๋ฑ๋ก๋์์ต๋๋ค."
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:25.25640657",
"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 /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-04-08T22:53:24.771985802",
"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/tasting-tags?keyword=&page=0&size=20&sortOrder=ASC' -i -X GET
GET /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-04-08T22:53:22.013136375",
"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/tasting-tags/1' -i -X GET
GET /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-04-08T22:53:21.940156174",
"serverPathVersion" : "v1"
}
}
6.3. ํ ์ด์คํ ํ๊ทธ ์์ฑ
-
์๋ก์ด ํ ์ด์คํ ํ๊ทธ๋ฅผ ์์ฑํฉ๋๋ค.
-
parentId๋ฅผ ์ง์ ํ์ฌ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
POST /admin/api/v1/tasting-tags
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๊ทธ ํ๊ธ๋ช (ํ์) |
|
|
ํ๊ทธ ์๋ฌธ๋ช (ํ์) |
|
|
์์ด์ฝ (Base64) |
|
|
์ค๋ช |
|
|
๋ถ๋ชจ ํ๊ทธ ID (null์ด๋ฉด ๋ฃจํธ) |
$ curl 'http://localhost:8080/tasting-tags' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"korName" : "๋ฐ๋๋ผ",
"engName" : "Vanilla",
"icon" : "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
"description" : "๋ฐ๋๋ผ ํฅ",
"parentId" : null
}'
POST /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-04-08 13:53:21"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:21.858811335",
"serverPathVersion" : "v1"
}
}
6.4. ํ ์ด์คํ ํ๊ทธ ์์
-
๊ธฐ์กด ํ ์ด์คํ ํ๊ทธ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค.
PUT /admin/api/v1/tasting-tags/{tagId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๊ทธ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๊ทธ ํ๊ธ๋ช (ํ์) |
|
|
ํ๊ทธ ์๋ฌธ๋ช (ํ์) |
|
|
์์ด์ฝ (Base64) |
|
|
์ค๋ช |
|
|
๋ถ๋ชจ ํ๊ทธ ID |
$ curl 'http://localhost:8080/tasting-tags/1' -i -X PUT \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"korName" : "๋ฐ๋๋ผ ์์ ",
"engName" : "Vanilla Updated",
"icon" : "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
"description" : "์์ ๋ ์ค๋ช
"
}'
PUT /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-04-08 13:53:22"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:22.123286378",
"serverPathVersion" : "v1"
}
}
6.5. ํ ์ด์คํ ํ๊ทธ ์ญ์
-
ํ ์ด์คํ ํ๊ทธ๋ฅผ ์ญ์ ํฉ๋๋ค.
-
์์ ํ๊ทธ๊ฐ ์๋ ๊ฒฝ์ฐ ์ญ์ ํ ์ ์์ต๋๋ค.
DELETE /admin/api/v1/tasting-tags/{tagId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๊ทธ ID |
$ curl 'http://localhost:8080/tasting-tags/1' -i -X DELETE
DELETE /tasting-tags/1 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ญ์ ๋ ํ๊ทธ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 407
{
"success" : true,
"code" : 200,
"data" : {
"code" : "TASTING_TAG_DELETED",
"message" : "ํ
์ด์คํ
ํ๊ทธ๊ฐ ์ญ์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-04-08 13:53:21"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:21.90514037",
"serverPathVersion" : "v1"
}
}
6.6. ํ ์ด์คํ ํ๊ทธ ์ฐ๊ฒฐ
-
ํ ์ด์คํ ํ๊ทธ์ ์ ์ ๋ฒํฌ๋ก ์ฐ๊ฒฐํฉ๋๋ค.
POST /admin/api/v1/tasting-tags/{tagId}/alcohols
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๊ทธ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์ฐ๊ฒฐํ ์์คํค ID ๋ชฉ๋ก |
$ curl 'http://localhost:8080/tasting-tags/1/alcohols' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"alcoholIds" : [ 1, 2, 3 ]
}'
POST /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: 403
{
"success" : true,
"code" : 200,
"data" : {
"code" : "TASTING_TAG_ALCOHOL_ADDED",
"message" : "์์คํค๊ฐ ์ฐ๊ฒฐ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-04-08 13:53:22"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:22.08892647",
"serverPathVersion" : "v1"
}
}
6.7. ํ ์ด์คํ ํ๊ทธ ์ฐ๊ฒฐ ํด์
-
ํ ์ด์คํ ํ๊ทธ์์ ์ ์ฐ๊ฒฐ์ ๋ฒํฌ๋ก ํด์ ํฉ๋๋ค.
DELETE /admin/api/v1/tasting-tags/{tagId}/alcohols
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๊ทธ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํด์ ํ ์์คํค ID ๋ชฉ๋ก |
$ curl 'http://localhost:8080/tasting-tags/1/alcohols' -i -X DELETE \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"alcoholIds" : [ 1, 2 ]
}'
DELETE /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: 412
{
"success" : true,
"code" : 200,
"data" : {
"code" : "TASTING_TAG_ALCOHOL_REMOVED",
"message" : "์์คํค ์ฐ๊ฒฐ์ด ํด์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-04-08 13:53:22"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:22.06531487",
"serverPathVersion" : "v1"
}
}
7. Reference API
7.1. ์ง์ญ ๋ชฉ๋ก ์กฐํ
-
์ ์ฒด ์ง์ญ(๊ตญ๊ฐ) ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
-
์ ์ ์์ฐ์ง ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
GET /admin/api/v1/regions
์์ฒญ
$ curl 'http://localhost:8080/regions?keyword=&page=0&size=20&sortOrder=ASC' -i -X GET
GET /regions?keyword=&page=0&size=20&sortOrder=ASC HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ง์ญ ๋ชฉ๋ก |
|
|
์ง์ญ ID |
|
|
๊ตญ๊ฐ ํ๊ธ๋ช |
|
|
๊ตญ๊ฐ ์๋ฌธ๋ช |
|
|
๋๋ฅ |
|
|
์ค๋ช |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์์ ์ง์ญ ID |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
ํ์ฌ ํ์ด์ง ๋ฒํธ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
์ ์ฒด ์์ ์ |
|
|
์ ์ฒด ํ์ด์ง ์ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1100
{
"success" : true,
"code" : 200,
"data" : [ {
"id" : 1,
"korName" : "์ค์ฝํ๋๋",
"engName" : "Scotland",
"continent" : "์ ๋ฝ",
"description" : "์ง์ญ ์ค๋ช
1",
"createdAt" : "2024-01-01T00:00:00",
"modifiedAt" : "2024-06-01T00:00:00",
"parentId" : null
}, {
"id" : 2,
"korName" : "์์ผ๋๋",
"engName" : "Ireland",
"continent" : "์ ๋ฝ",
"description" : "์ง์ญ ์ค๋ช
2",
"createdAt" : "2024-01-02T00:00:00",
"modifiedAt" : "2024-06-02T00:00:00",
"parentId" : null
}, {
"id" : 3,
"korName" : "์ผ๋ณธ",
"engName" : "Japan",
"continent" : "์์์",
"description" : "์ง์ญ ์ค๋ช
3",
"createdAt" : "2024-01-03T00:00:00",
"modifiedAt" : "2024-06-03T00:00:00",
"parentId" : null
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:21.261783701",
"size" : 3,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 3
}
}
7.2. ์ฆ๋ฅ์ ๋ชฉ๋ก ์กฐํ
-
์ ์ฒด ์ฆ๋ฅ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
-
์ ์ ์์ฐํ๋ ์ฆ๋ฅ์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
GET /admin/api/v1/distilleries
์์ฒญ
$ curl 'http://localhost:8080/distilleries?keyword=&page=0&size=20&sortOrder=ASC' -i -X GET
GET /distilleries?keyword=&page=0&size=20&sortOrder=ASC HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ฆ๋ฅ์ ๋ชฉ๋ก |
|
|
์ฆ๋ฅ์ ID |
|
|
์ฆ๋ฅ์ ํ๊ธ๋ช |
|
|
์ฆ๋ฅ์ ์๋ฌธ๋ช |
|
|
๋ก๊ณ ์ด๋ฏธ์ง URL |
|
|
์์ฑ์ผ์ |
|
|
์์ ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
ํ์ฌ ํ์ด์ง ๋ฒํธ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
์ ์ฒด ์์ ์ |
|
|
์ ์ฒด ํ์ด์ง ์ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 990
{
"success" : true,
"code" : 200,
"data" : [ {
"id" : 1,
"korName" : "๊ธ๋ ํผ๋",
"engName" : "Glenfiddich",
"logoImgUrl" : "https://example.com/logo1.png",
"createdAt" : "2024-01-01T00:00:00",
"modifiedAt" : "2024-06-01T00:00:00"
}, {
"id" : 2,
"korName" : "๋งฅ์บ๋",
"engName" : "Macallan",
"logoImgUrl" : "https://example.com/logo2.png",
"createdAt" : "2024-01-02T00:00:00",
"modifiedAt" : "2024-06-02T00:00:00"
}, {
"id" : 3,
"korName" : "์ผ๋ง์ํค",
"engName" : "Yamazaki",
"logoImgUrl" : "https://example.com/logo3.png",
"createdAt" : "2024-01-03T00:00:00",
"modifiedAt" : "2024-06-03T00:00:00"
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:20.719876052",
"size" : 3,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 3
}
}
8. Curation API
8.1. ํ๋ ์ด์ ๋ชฉ๋ก ์กฐํ
-
ํ๋ ์ด์ ๋ชฉ๋ก์ ํ์ด์ง๋ค์ด์ ์ผ๋ก ์กฐํํฉ๋๋ค.
-
ํค์๋ ๋ฐ ํ์ฑํ ์ํ๋ก ํํฐ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
GET /admin/api/v1/curations
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๊ฒ์์ด (ํ๋ ์ด์ ๋ช ) |
|
ํ์ฑํ ์ํ ํํฐ (true/false/null) |
|
ํ์ด์ง ๋ฒํธ (0๋ถํฐ ์์, ๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 20) |
$ curl 'http://localhost:8080/curations?keyword=&isActive=true&page=0&size=20' -i -X GET
GET /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: 834
{
"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-04-08T22:53:24.199658286",
"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/curations/1' -i -X GET
GET /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: 1627
{
"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-04-08T22:53:24.14768919",
"serverPathVersion" : "v1"
}
}
8.3. ํ๋ ์ด์ ์์ฑ
-
์๋ก์ด ํ๋ ์ด์ ์ ์์ฑํฉ๋๋ค.
-
์์คํค ID ๋ชฉ๋ก์ ํจ๊ป ์ง์ ํ ์ ์์ต๋๋ค.
POST /admin/api/v1/curations
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๋ ์ด์ ๋ช (ํ์) |
|
|
์ค๋ช |
|
|
์ปค๋ฒ ์ด๋ฏธ์ง URL |
|
|
๋ ธ์ถ ์์ (๊ธฐ๋ณธ๊ฐ: 0) |
|
|
ํฌํจํ ์์คํค ID ๋ชฉ๋ก |
$ curl 'http://localhost:8080/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 /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-04-08 13:53:24"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:24.083119285",
"serverPathVersion" : "v1"
}
}
8.4. ํ๋ ์ด์ ์์
-
๊ธฐ์กด ํ๋ ์ด์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค.
PUT /admin/api/v1/curations/{curationId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ๋ ์ด์ ๋ช (ํ์) |
|
|
์ค๋ช |
|
|
์ปค๋ฒ ์ด๋ฏธ์ง URL |
|
|
๋ ธ์ถ ์์ (ํ์) |
|
|
ํ์ฑํ ์ํ (ํ์) |
|
|
ํฌํจํ ์์คํค ID ๋ชฉ๋ก |
$ curl 'http://localhost:8080/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 /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-04-08 13:53:24"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:24.296623245",
"serverPathVersion" : "v1"
}
}
8.5. ํ๋ ์ด์ ์ญ์
-
ํ๋ ์ด์ ์ ์ญ์ ํฉ๋๋ค.
DELETE /admin/api/v1/curations/{curationId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
$ curl 'http://localhost:8080/curations/1' -i -X DELETE
DELETE /curations/1 HTTP/1.1
Host: localhost:8080
์๋ต ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ์ ๋ณด |
|
|
๊ฒฐ๊ณผ ์ฝ๋ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ญ์ ๋ ํ๋ ์ด์ ID |
|
|
์๋ต ์๊ฐ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 397
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_DELETED",
"message" : "ํ๋ ์ด์
์ด ์ญ์ ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-04-08 13:53:24"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:24.12348378",
"serverPathVersion" : "v1"
}
}
8.6. ํ๋ ์ด์ ํ์ฑํ ์ํ ๋ณ๊ฒฝ
-
ํ๋ ์ด์ ์ ํ์ฑํ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
-
๋นํ์ฑํ๋ ํ๋ ์ด์ ์ ํด๋ผ์ด์ธํธ์ ๋ ธ์ถ๋์ง ์์ต๋๋ค.
PATCH /admin/api/v1/curations/{curationId}/status
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ์ฑํ ์ํ (ํ์) |
$ curl 'http://localhost:8080/curations/1/status' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"isActive" : false
}'
PATCH /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: 421
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_STATUS_UPDATED",
"message" : "ํ๋ ์ด์
ํ์ฑํ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-04-08 13:53:24"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:24.36084034",
"serverPathVersion" : "v1"
}
}
8.7. ํ๋ ์ด์ ๋ ธ์ถ ์์ ๋ณ๊ฒฝ
-
ํ๋ ์ด์ ์ ๋ ธ์ถ ์์๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
-
์ซ์๊ฐ ์์์๋ก ๋จผ์ ๋ ธ์ถ๋ฉ๋๋ค.
PATCH /admin/api/v1/curations/{curationId}/display-order
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
๋ ธ์ถ ์์ (0 ์ด์, ํ์) |
$ curl 'http://localhost:8080/curations/1/display-order' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"displayOrder" : 5
}'
PATCH /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: 426
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_DISPLAY_ORDER_UPDATED",
"message" : "ํ๋ ์ด์
๋
ธ์ถ ์์๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-04-08 13:53:24"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:24.330518694",
"serverPathVersion" : "v1"
}
}
8.8. ํ๋ ์ด์ ์ ์์คํค ์ถ๊ฐ
-
ํ๋ ์ด์ ์ ์์คํค๋ฅผ ๋ฒํฌ๋ก ์ถ๊ฐํฉ๋๋ค.
POST /admin/api/v1/curations/{curationId}/alcohols
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์ถ๊ฐํ ์์คํค ID ๋ชฉ๋ก (ํ์) |
$ curl 'http://localhost:8080/curations/1/alcohols' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"alcoholIds" : [ 1, 2, 3 ]
}'
POST /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: 416
{
"success" : true,
"code" : 200,
"data" : {
"code" : "CURATION_ALCOHOL_ADDED",
"message" : "ํ๋ ์ด์
์ ์์คํค๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.",
"targetId" : 1,
"responseAt" : "2026-04-08 13:53:24"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:24.26161245",
"serverPathVersion" : "v1"
}
}
8.9. ํ๋ ์ด์ ์์ ์์คํค ์ ๊ฑฐ
-
ํ๋ ์ด์ ์์ ํน์ ์์คํค๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
DELETE /admin/api/v1/curations/{curationId}/alcohols/{alcoholId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
|
์ ๊ฑฐํ ์์คํค ID |
$ curl 'http://localhost:8080/curations/1/alcohols/5' -i -X DELETE
DELETE /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-04-08 13:53:24"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:24.24026806",
"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/users?keyword=&status=ACTIVE&sortType=CREATED_AT&sortOrder=DESC&page=0&size=20' -i -X GET
GET /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-04-08T22:53:25.596953928",
"size" : 2,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 2
}
}
10. Banner API
10.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/banners?keyword=&isActive=true&bannerType=CURATION&page=0&size=20' -i -X GET
GET /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-04-08T22:53:23.468667837",
"size" : 3,
"totalPages" : 1,
"hasNext" : false,
"page" : 0,
"serverPathVersion" : "v1",
"totalElements" : 3
}
}
10.2. ๋ฐฐ๋ ์์ธ ์กฐํ
-
ํน์ ๋ฐฐ๋์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
GET /admin/api/v1/banners/{bannerId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฐฐ๋ ID |
$ curl 'http://localhost:8080/banners/1' -i -X GET
GET /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-04-08T22:53:23.426479692",
"serverPathVersion" : "v1"
}
}
10.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/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 /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-04-08 13:53:23"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:23.359882666",
"serverPathVersion" : "v1"
}
}
10.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/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 /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-04-08 13:53:23"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:23.532852151",
"serverPathVersion" : "v1"
}
}
10.5. ๋ฐฐ๋ ์ญ์
-
๋ฐฐ๋๋ฅผ ์ญ์ ํฉ๋๋ค. (๋ฌผ๋ฆฌ ์ญ์ )
DELETE /admin/api/v1/banners/{bannerId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฐฐ๋ ID |
$ curl 'http://localhost:8080/banners/1' -i -X DELETE
DELETE /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-04-08 13:53:23"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:23.398823329",
"serverPathVersion" : "v1"
}
}
10.6. ๋ฐฐ๋ ํ์ฑํ ์ํ ๋ณ๊ฒฝ
-
๋ฐฐ๋์ ํ์ฑํ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
-
๋นํ์ฑํ๋ ๋ฐฐ๋๋ ํด๋ผ์ด์ธํธ์ ๋ ธ์ถ๋์ง ์์ต๋๋ค.
PATCH /admin/api/v1/banners/{bannerId}/status
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฐฐ๋ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
ํ์ฑํ ์ํ (ํ์) |
$ curl 'http://localhost:8080/banners/1/status' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"isActive" : false
}'
PATCH /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-04-08 13:53:23"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:23.594869493",
"serverPathVersion" : "v1"
}
}
10.7. ๋ฐฐ๋ ์ ๋ ฌ ์์ ๋ณ๊ฒฝ
-
๋ฐฐ๋์ ์ ๋ ฌ ์์๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
-
์ซ์๊ฐ ์์์๋ก ๋จผ์ ๋ ธ์ถ๋ฉ๋๋ค.
-
๋์ผ ์์ ์ถฉ๋ ์ ๊ธฐ์กด ๋ฐฐ๋๋ค์ด ์๋์ผ๋ก ๋ฆฌ์ค๋๋ง๋ฉ๋๋ค.
PATCH /admin/api/v1/banners/{bannerId}/sort-order
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ฐฐ๋ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Path | Type | Description |
|---|---|---|
|
|
์ ๋ ฌ ์์ (0 ์ด์, ํ์) |
$ curl 'http://localhost:8080/banners/1/sort-order' -i -X PATCH \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"sortOrder" : 5
}'
PATCH /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-04-08 13:53:23"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : "2026-04-08T22:53:23.565872614",
"serverPathVersion" : "v1"
}
}