์ฃผ์ด์ง API๋ฅผ ๋ถ์ํด ์ด๋ค ํ๋ก์ ํธ๋ฅผ ์งํ/์์ฑํ ๊ฒ์ธ์ง ํ ๋จ์๋ก ์์ ๋กญ๊ฒ ๊ฒฐ์ ํ๊ณ ๋ง๋ค์ด๋ณด์ธ์.
TypeScript๋ฅผ ํ์๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๊ณผ์ ์ํ ๋ฐ ๋ฆฌ๋ทฐ ๊ธฐ๊ฐ์ ๋ณ๋ ๊ณต์ง๋ฅผ ์ฐธ๊ณ ํ์ธ์!
KDT๊ธฐ์๋ฒํธ_์ด๋ฆ
E.g, KDT0_ParkYoungWoong
- ํ์ฌ ์ ์ฅ์๋ฅผ ๋ก์ปฌ์ ํด๋ก (Clone)ํฉ๋๋ค.
- ์์ ์ ๋ณธ๋ช
์ผ๋ก ๋ธ๋์น๋ฅผ ์์ฑํฉ๋๋ค.(๊ตฌ๋ถ ๊ฐ๋ฅํ๋๋ก ๋ณธ๋ช
์ ๊ผญ ํ์ค์นผ์ผ์ด์ค๋ก ํ์ํ์ธ์,
git branch KDTX_ParkYoungWoong
) - ์์ ์ ๋ณธ๋ช ๋ธ๋์น์์ ๊ณผ์ ๋ฅผ ์ํํฉ๋๋ค.
- ๊ณผ์ ์ํ์ด ์๋ฃ๋๋ฉด, ์์ ์ ๋ณธ๋ช
๋ธ๋์น๋ฅผ ์๊ฒฉ ์ ์ฅ์์ ํธ์(Push)ํฉ๋๋ค.(
main
๋ธ๋์น์ ํธ์ํ์ง ์๋๋ก ๊ผญ ์ฃผ์ํ์ธ์,git push origin KDTX_ParkYoungWoong
) - ์ ์ฅ์์์
main
๋ธ๋์น๋ฅผ ๋์์ผ๋ก Pull Request ์์ฑํ๋ฉด, ๊ณผ์ ์ ์ถ์ด ์๋ฃ๋ฉ๋๋ค!(E.g,main
<==KDTX_ParkYoungWoong
)
main
ํน์ ๋ค๋ฅธ ์ฌ๋์ ๋ธ๋์น๋ก ์ ๋ ๋ณํฉํ์ง ์๋๋ก ์ฃผ์ํ์ธ์!- Pull Request์์ ๋ณด์ด๋ ์ค๋ช ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ดํดํ๊ธฐ ์ฝ๋๋ก ๊ผผ๊ผผํ๊ฒ ์์ฑํ์ธ์!
- Pull Request์์ ๊ณผ์ ์ ์ถ ํ ์ ๋ ๋ณํฉ(Merge)ํ์ง ์๋๋ก ์ฃผ์ํ์ธ์!
- ๊ณผ์ ์ํ ๋ฐ ์ ์ถ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ๋ฐ๋ก ๋ด๋น ๋ฉํ ๋ ๊ฐ์ฌ์์ ์๊ธฐํ์ธ์!
๋ชจ๋ API ์์ฒญ(Request) headers
์ ์๋ ์ ๋ณด๊ฐ ๊ผญ ํฌํจ๋ผ์ผ ํฉ๋๋ค!
username
์ KDT5_TeamX
์ ๊ฐ์ด ๋ณธ๋ช
ํน์ ํ ์ด๋ฆ์ ํฌํจํด์ผ ํฉ๋๋ค!
ํ์ธํ ์ ์๋ ์ฌ์ฉ์๋ ํ์ DB ์ ๋ณด๋ ์์๋ก ์ญ์ ๋ ์ ์์ต๋๋ค!
{
"content-type": "application/json",
"apikey": "KDT5_nREmPe9B",
"username": "KDT5_TeamX"
}
'์ธ์ฆ' ๊ด๋ จ API๋ ๋ชจ๋ ์ผ๋ฐ ์ฌ์ฉ์ ์ ์ฉ์ ๋๋ค.
์ฌ์ฉ์๊ฐ username
์ ์ข
์๋์ด ํ์๊ฐ์
ํฉ๋๋ค.
- ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๋ ์ํธํํด ์ ์ฅํฉ๋๋ค.(๊ด๋ฆฌ์๋ ํ์ธํ ์ ์์ต๋๋ค!)
- ํ๋กํ ์ด๋ฏธ์ง๋ 1MB ์ดํ์ฌ์ผ ํฉ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/auth/signup
\ -X 'POST'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
email: string // ์ฌ์ฉ์ ์์ด๋ (ํ์!)
password: string // ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ, 8์ ์ด์ (ํ์!)
displayName: string // ์ฌ์ฉ์ ์ด๋ฆ, 20์ ์ดํ (ํ์!)
profileImgBase64?: string // ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง(base64) - jpg, jpeg, webp, png, gif, svg
}
{
"email": "[email protected]",
"password": "********",
"displayName": "ParkYoungWoong",
"profileImgBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAf...(์๋ต)"
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface ResponseValue {
user: { // ํ์๊ฐ์
ํ ์ฌ์ฉ์ ์ ๋ณด
email: string // ์ฌ์ฉ์ ์์ด๋
displayName: string // ์ฌ์ฉ์ ํ์ ์ด๋ฆ
profileImg: string | null // ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง(URL)
}
accessToken: string // ์ฌ์ฉ์ ์ ๊ทผ ํ ํฐ
}
{
"user": {
"email": "[email protected]",
"displayName": "ParkYoungWoong",
"profileImg": "https://storage.googleapis.com/heropy-api/vjbtIrh5dGv163442.png"
},
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IlM3WDhpQ...(์๋ต)"
}
- ๋ฐ๊ธ๋
accessToken
์ 24์๊ฐ ํ ๋ง๋ฃ๋ฉ๋๋ค.(๋ง๋ฃ ํ ๋ค์ ๋ก๊ทธ์ธ ํ์)
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/auth/login
\ -X 'POST'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
email: string // ์ฌ์ฉ์ ์์ด๋ (ํ์!)
password: string // ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ (ํ์!)
}
{
"email": "[email protected]",
"password": "********"
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface ResponseValue {
user: { // ํ์๊ฐ์
ํ ์ฌ์ฉ์ ์ ๋ณด
email: string // ์ฌ์ฉ์ ์์ด๋
displayName: string // ์ฌ์ฉ์ ํ์ ์ด๋ฆ
profileImg: string | null // ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง(URL)
}
accessToken: string // ์ฌ์ฉ์ ์ ๊ทผ ํ ํฐ
}
{
"user": {
"email": "[email protected]",
"displayName": "ParkYoungWoong",
"profileImg": "https://storage.googleapis.com/heropy-api/vAKjlJ-Gx5v163442.png"
},
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjlQS3I...(์๋ต)"
}
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/auth/me
\ -X 'POST'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
- ์์
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface ResponseValue {
email: string // ์ฌ์ฉ์ ์์ด๋
displayName: string // ์ฌ์ฉ์ ํ์ ์ด๋ฆ
profileImg: string | null // ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง(URL)
}
{
"email": "[email protected]",
"displayName": "ParkYoungWoong",
"profileImg": "https://storage.googleapis.com/heropy-api/vAKjlJ-Gx5v163442.png"
}
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/auth/logout
\ -X 'POST'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
- ์์
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = true // ๋ก๊ทธ์์ ์ฒ๋ฆฌ ์ํ
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/auth/user
\ -X 'PUT'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
displayName?: string // ์๋ก์ด ํ์ ์ด๋ฆ
profileImgBase64?: string // ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง(base64) - jpg, jpeg, webp, png, gif, svg
oldPassword?: string // ๊ธฐ์กด ๋น๋ฐ๋ฒํธ
newPassword?: string // ์๋ก์ด ๋น๋ฐ๋ฒํธ
}
{
"oldPassword": "********",
"newPassword": "**********"
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface ResponseValue {
email: string // ์ฌ์ฉ์ ์์ด๋
displayName: string // ์ฌ์ฉ์ ํ์ ์ด๋ฆ
profileImg: string | null // ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง(URL)
}
{
"email": "[email protected]",
"displayName": "ParkYoungWoong",
"profileImg": "https://storage.googleapis.com/heropy-api/vAKjlJ-Gx5v163442.png"
}
- ๊ด๋ฆฌ์ ์ ์ฉ API์ ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/auth/users
\ -X 'GET'
\ -H 'masterKey: true'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
- ์์
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = User[]
interface User {
email: string // ์ฌ์ฉ์ ์์ด๋
displayName: string // ์ฌ์ฉ์ ํ์ ์ด๋ฆ
profileImg: string // ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง URL
}
[
{
"email": "[email protected]",
"displayName": "HEROPY",
"profileImg": null
},
{
"email": "[email protected]",
"displayName": "๋ฐ์์
",
"profileImg": "https://storage.googleapis.com/heropy-api/Z_una7lyijv074804.png"
},
{
"email": "[email protected]",
"displayName": "๊ด๋ฆฌ์",
"profileImg": "https://storage.googleapis.com/heropy-api/ZXcXjwsB7nv121507.png"
}
]
'๊ณ์ข' ๊ด๋ จ API๋ ๋ชจ๋ ์ผ๋ฐ ์ฌ์ฉ์ ์ ์ฉ์ ๋๋ค.
- ์ํ ๋น ํ๋์ ๊ณ์ข๋ง ํ์ฉ๋ฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ๊ณ์ข๋ฅผ ์ถ๊ฐํ๋ฉด, ํด๋น ์ํ ์ ๋ณด
disabled
์์ฑ์ดtrue
๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. - ์ํ ์ ๋ณด
digits
์์ฑ์ ์ซ์๋ฅผ ๋ชจ๋ ๋ํ๋ฉด ๊ฐ ์ํ์ ์ ํจํ ๊ณ์ข๋ฒํธ ๊ธธ์ด๊ฐ ๋ฉ๋๋ค. [3, 2, 4, 3]
=> 123-12-1234-123
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/account/banks
\ -X 'GET'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
- ์์
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = Bank[] // ์ ํ ๊ฐ๋ฅํ ์ํ ์ ๋ณด ๋ชฉ๋ก
interface Bank { // ์ ํ ๊ฐ๋ฅํ ์ํ ์ ๋ณด
name: string // ์ํ ์ด๋ฆ
code: string // ์ํ ์ฝ๋
digits: number[] // ์ํ ๊ณ์ข ์๋ฆฟ์
disabled: boolean // ์ฌ์ฉ์๊ฐ ์ถ๊ฐํ ๊ณ์ข ์ฌ๋ถ
}
[
{
"name": "KB๊ตญ๋ฏผ์ํ",
"code": "004",
"digits": [3, 2, 4, 3],
"disabled": false
},
{
"name": "์ ํ์ํ",
"code": "088",
"digits": [3, 3, 6],
"disabled": true
},
{
"name": "์ฐ๋ฆฌ์ํ",
"code": "020",
"digits": [4, 3, 6],
"disabled": true
},
{
"name": "ํ๋์ํ",
"code": "081",
"digits": [3, 6, 5],
"disabled": false
},
{
"name": "์ผ์ด๋ฑ
ํฌ",
"code": "089",
"digits": [3, 3, 6],
"disabled": false
},
{
"name": "์นด์นด์ค๋ฑ
ํฌ",
"code": "090",
"digits": [4, 2, 7],
"disabled": false
},
{
"name": "NH๋ํ์ํ",
"code": "011",
"digits": [3, 4, 4, 2],
"disabled": false
}
]
- ๊ณ์ข๋ฒํธ๋ ์ผ๋ถ๋ง ๋
ธ์ถ๋ฉ๋๋ค. E.g.
"123-XXXX-XXXX-XX"
- ์์ก์ ๋จ์๋ '์ํ(๏ฟฆ)'์ ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/account
\ -X 'GET'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
- ์์
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface ResponseValue {
totalBalance: number // ์ฌ์ฉ์ ๊ณ์ข ์์ก ์ดํฉ
accounts: Bank[] // ์ฌ์ฉ์ ๊ณ์ข ์ ๋ณด ๋ชฉ๋ก
}
interface Bank { // ์ฌ์ฉ์ ๊ณ์ข ์ ๋ณด
id: string // ๊ณ์ข ID
bankName: string // ์ํ ์ด๋ฆ
bankCode: string // ์ํ ์ฝ๋
accountNumber: string // ๊ณ์ข ๋ฒํธ
balance: number // ๊ณ์ข ์์ก
}
{
"totalBalance": 5999900,
"accounts": [
{
"id": "jQMfKla8vOIFELA3mAXv",
"bankName": "NH๋ํ์ํ",
"bankCode": "011",
"accountNumber": "356-XXXX-XXXX-XX",
"balance": 2999900
},
{
"id": "wiPgsXvMAmcLw8AuRHIi",
"bankName": "KB๊ตญ๋ฏผ์ํ",
"bankCode": "004",
"accountNumber": "123-XX-XXXX-XXX",
"balance": 3000000
}
]
}
- ์ฐ๊ฒฐ๋ ๊ณ์ข ์์ก์๋ ์๋์ผ๋ก ๊ธฐ๋ณธ '3๋ฐฑ๋ง์'์ด ์ถ๊ฐ๋ฉ๋๋ค.
- ์์ฒญํ๋ ๊ณ์ข๋ฒํธ์ ์ ํ๋ฒํธ์๋
-
๊ตฌ๋ถ์ด ์์ด์ผ ํฉ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/account
\ -X 'POST'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
bankCode: string // ์ฐ๊ฒฐํ ์ํ ์ฝ๋ (ํ์!)
accountNumber: string // ์ฐ๊ฒฐํ ๊ณ์ข๋ฒํธ (ํ์!)
phoneNumber: string // ์ฌ์ฉ์ ์ ํ๋ฒํธ (ํ์!)
signature: boolean // ์ฌ์ฉ์ ์๋ช
(ํ์!)
}
{
"bankCode": "088",
"accountNumber": "123456789012",
"phoneNumber": "01012345678",
"signature": true
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface ResponseValue { // ์ฐ๊ฒฐ๋ ๊ณ์ข ์ ๋ณด
id: string // ๊ณ์ข ID
bankName: string // ์ํ ์ด๋ฆ
bankCode: string // ์ํ ์ฝ๋
accountNumber: string // ๊ณ์ข ๋ฒํธ
balance: number // ๊ณ์ข ์์ก
}
{
"id": "1qRFC6Ey5VkSu6nyj5Ba",
"bankName": "์ ํ์ํ",
"bankCode": "088",
"accountNumber": "123-XXX-XXXXXX",
"balance": 3000000
}
- ํด์งํ ๊ณ์ข๋ ๋ค์ ์ฐ๊ฒฐํด๋ ์์ก์ด ๋ฐ์๋์ง ์์ต๋๋ค.(๊ธฐ๋ณธ ๊ธ์ก์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค)
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/account
\ -X 'DELETE'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
accountId: string // ๊ณ์ข ID (ํ์!)
signature: boolean // ์ฌ์ฉ์ ์๋ช
(ํ์!)
}
{
"accountId": "jQMfKla8vOIFELA3mAXv",
"signature": true
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = true // ๊ณ์ข ํด์ง ์ฒ๋ฆฌ ์ํ
'์ ํ' ๊ด๋ จ API๋ ๊ด๋ฆฌ์ ์ ์ฉ๊ณผ ์ผ๋ฐ ์ฌ์ฉ์ ์ ์ฉ์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
๊ณต์ฉ API๋ ์์ผ๋ ์ฃผ์ํ์ธ์!
- ๊ด๋ฆฌ์ ์ ์ฉ API์ ๋๋ค.
- ์์ธ ์ ๋ณด๊ฐ ์๋ ๊ธฐ๋ณธ ์ ๋ณด์ ์ ํ ์ค๋ช ์ 100์๊น์ง๋ง ํฌํจ๋ฉ๋๋ค.
- ์์ธ ์ ๋ณด๊ฐ ์๋ ๊ธฐ๋ณธ ์ ๋ณด์ ์ ํ ์์ธ ์ฌ์ง์ ํฌํจ๋์ง ์์ต๋๋ค.
- ์ ํ ํ ์ธ์จ(
discountRate
)์ ์ ํ ๊ฐ๊ฒฉ๊ณผ ์ง์ ๊ด๊ณ๊ฐ ์๋ ๋จ์ ๋ฉ๋ชจ ์์ฑ์ ๋๋ค. - ์ ํ ํ ์ธ์จ์ด ์๋ ๊ฒฝ์ฐ,
0
์ผ๋ก ํ์๋ฉ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products
\ -X 'GET'
\ -H 'masterKey: true'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
- ์์
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = Product[] // ๊ด๋ฆฌํ๋ ๋ชจ๋ ์ ํ์ ๋ชฉ๋ก
interface Product { // ์ ํ ์ ๋ณด
id: string // ์ ํ ID
title: string // ์ ํ ์ด๋ฆ
price: number // ์ ํ ๊ฐ๊ฒฉ
description: string // ์ ํ ์ค๋ช
(์ต๋ 100์)
tags: string[] // ์ ํ ํ๊ทธ
thumbnail: string | null // ์ ํ ์ธ๋ค์ผ ์ด๋ฏธ์ง(URL)
isSoldOut: boolean // ์ ํ ๋งค์ง ์ฌ๋ถ
discountRate: number // ์ ํ ํ ์ธ์จ
}
[
{
"id": "cFmeC7aY5KjZbBAdJE9y",
"title": "์ผ์ฑ์ ์ ์ค๋งํธ๋ชจ๋ํฐ M7 S43AM700",
"price": 639000,
"description": "107.9cm(43์ธ์น) / ์์ด๋(16:9) / ํ๋ฉด / VA / 3840 x 2160(4K UHD) / ํฝ์
ํผ์น: 0.2451mm / 8ms(GTG) / 300cd / 5,00",
"tags": [
"๊ฐ์ ",
"๋ชจ๋ํฐ",
"์ปดํจํฐ"
],
"thumbnail": "https://storage.googleapis.com/heropy-api/vBAK4MQdH5v195712.png",
"isSoldOut": false,
"discountRate": 20
},
{
"id": "nbqtQvEivYwEXTDet7YM",
"title": "MacBook Pro 16",
"price": 3360000,
"description": "์ญ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ MacBook Pro๊ฐ ๋ฑ์ฅํ์ต๋๋ค. ์ต์ด์ ํ๋ก์ฉ Apple Silicon์ธ M1 Pro ๋๋ M1 Max ์นฉ์ ํ์ฌํด ์์ด๊ฐ์ด ๋น ๋ฅธ ์๋๋ ๋ฌผ๋ก , ํ๊ธฐ์ ์ธ ์ฑ",
"tags": [
"๊ฐ์ ",
"๋
ธํธ๋ถ",
"์ปดํจํฐ"
],
"thumbnail": "https://storage.googleapis.com/heropy-api/vIKMk_jy4Yv195256.png",
"isSoldOut": false,
"discountRate": 0
}
]
- ๊ด๋ฆฌ์ ์ ์ฉ API์ ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/transactions/all
\ -X 'GET'
\ -H 'masterKey: true'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
- ์์
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type RequestValue = TransactionDetail[] // ๋ชจ๋ ๊ฑฐ๋ ๋ด์ญ์ ๋ชฉ๋ก
interface TransactionDetail { // ๊ฑฐ๋ ๋ด์ญ ์ ๋ณด
detailId: string // ๊ฑฐ๋ ๋ด์ญ ID
user: { // ๊ฑฐ๋ํ ์ฌ์ฉ์ ์ ๋ณด
email: string
displayName: string
profileImg: string | null
}
account: { // ๊ฑฐ๋ํ ์ฌ์ฉ์์ ๊ณ์ข ์ ๋ณด
bankName: string
bankCode: string
accountNumber: string
}
product: { // ๊ฑฐ๋ํ ์ ํ ์ ๋ณด
productId: string
title: string
price: number
description: string
tags: string[]
thumbnail: string | null
discountRate: number
}
reservation: Reservation | null // ๊ฑฐ๋ํ ์ ํ์ ์์ฝ ์ ๋ณด
timePaid: string // ์ ํ์ ๊ฑฐ๋ํ ์๊ฐ
isCanceled: boolean // ๊ฑฐ๋ ์ทจ์ ์ฌ๋ถ
done: boolean // ๊ฑฐ๋ ์๋ฃ ์ฌ๋ถ
}
interface Reservation {
start: string // ์์ฝ ์์ ์๊ฐ
end: string // ์์ฝ ์ข
๋ฃ ์๊ฐ
isCanceled: boolean // ์์ฝ ์ทจ์ ์ฌ๋ถ
isExpired: boolean // ์์ฝ ๋ง๋ฃ ์ฌ๋ถ
}
[
{
"detailId": "dMhfxyrAupQP18OYmywy",
"user": {
"email": "[email protected]",
"displayName": "ParkYoungWoong",
"profileImg": "https://storage.googleapis.com/heropy-api/vsLRqTlPO5v200111.png"
},
"account": {
"bankName": "KB๊ตญ๋ฏผ์ํ",
"bankCode": "004",
"accountNumber": "123-XX-XXXX-XXX"
},
"product": {
"productId": "cFmeC7aY5KjZbBAdJE9y",
"title": "์ผ์ฑ์ ์ ์ค๋งํธ๋ชจ๋ํฐ M7 S43AM700",
"price": 639000,
"description": "107.9cm(43์ธ์น) / ์์ด๋(16:9) / ํ๋ฉด / VA / 3840 x 2160(4K UHD) / ํฝ์
ํผ์น: 0.2451mm / 8ms(GTG) / 300cd / 5,00",
"tags": [
"๊ฐ์ ",
"๋ชจ๋ํฐ",
"์ปดํจํฐ"
],
"thumbnail": "https://storage.googleapis.com/heropy-api/vBAK4MQdH5v195712.png",
"discountRate": 0
},
"reservation": null,
"timePaid": "2021-11-07T20:01:49.100Z",
"isCanceled": false,
"done": false
}
]
์์ฝ ์ ๋ณด(reservation
)๊ฐ ์๋ ๊ฒฝ์ฐ:
[
{
"reservation": {
"start": "2021-11-12T06:00:00.000Z",
"end": "2021-11-12T07:00:00.000Z",
"isCanceled": false,
"isExpired": true
}
}
]
- ๊ด๋ฆฌ์ ์ ์ฉ API์ ๋๋ค.
- ๊ฑฐ๋ ๋ด์ญ์ ์ทจ์ํ๋ฉด, ์์ฝ๋ ๊ฐ์ด ์ทจ์๋ฉ๋๋ค.
- ๊ฑฐ๋ ๋ด์ญ์ ์ทจ์ ํด์ ํ๋ฉด, ์์ฝ๋ ๊ฐ์ด ์ทจ์๊ฐ ํด์ ๋ฉ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/transactions/:detailId
\ -X 'PUT'
\ -H 'masterKey: true'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
isCanceled?: boolean // ๊ฑฐ๋ ์ทจ์ ์ฌ๋ถ (์ฌ์ฉ์์ '์ ํ ๊ฑฐ๋(๊ตฌ๋งค) ์ทจ์' ์ํ์ ๊ฐ์ต๋๋ค)
done?: boolean // ๊ฑฐ๋ ์๋ฃ ์ฌ๋ถ (์ฌ์ฉ์์ '์ ํ ๊ฑฐ๋(๊ตฌ๋งค) ํ์ ' ์ํ์ ๊ฐ์ต๋๋ค)
}
{
"isCanceled": true
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = true // ๊ฑฐ๋ ๋ด์ญ ์๋ฃ/์ทจ์ ๋ฐ ํด์ ์ฒ๋ฆฌ ์ํ
- ๊ด๋ฆฌ์ ์ ์ฉ API์ ๋๋ค.
- ํ์ผ(์ฌ์ง)์ Base64๋ก ์์ฒญํด์ผ ํฉ๋๋ค.
- ์ ํ ์ธ๋ค์ผ ์ฌ์ง์ 1MB ์ดํ์ฌ์ผ ํฉ๋๋ค.
- ์ ํ ์์ธ ์ฌ์ง์ 4MB ์ดํ์ฌ์ผ ํฉ๋๋ค.
- ์ ํ ํ ์ธ์จ(
discountRate
)์ ์ ํ ๊ฐ๊ฒฉ๊ณผ ์ง์ ๊ด๊ณ๊ฐ ์๋ ๋จ์ ๋ฉ๋ชจ ์์ฑ์ ๋๋ค. - ์ ํ ํ ์ธ์จ์
0
~99
์ฌ์ด ์ซ์๋ฅผ ์ ๋ ฅํ์ธ์. ๋ง์ฝ ํ ์ธ์จ์ด '20%'์ธ ๊ฒฝ์ฐ,20
์ผ๋ก ์ ๋ ฅํด์ผ ํฉ๋๋ค. - ์ ํ ํ ์ธ์จ์ ์
๋ ฅํ์ง ์์ผ๋ฉด,
0
์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
// ํ ์ธ ์ ๊ฐ๊ฒฉ์ ๊ณ์ฐ!
const priceBeforeDiscount = price * 100 / (100 - discountRate)
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products
\ -X 'POST'
\ -H 'masterKey: true'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
title: string // ์ ํ ์ด๋ฆ (ํ์!)
price: number // ์ ํ ๊ฐ๊ฒฉ (ํ์!)
description: string // ์ ํ ์์ธ ์ค๋ช
(ํ์!)
tags?: string[] // ์ ํ ํ๊ทธ
thumbnailBase64?: string // ์ ํ ์ธ๋ค์ผ(๋ํ) ์ฌ์ง(base64) - jpg, jpeg, webp, png, gif, svg
photoBase64?: string // ์ ํ ์์ธ ์ฌ์ง(base64) - jpg, jpeg, webp, png, gif, svg
discountRate?: number // ์ ํ ํ ์ธ์จ
}
{
"title": "MacBook Pro 16",
"price": 3360000,
"description": "์ญ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ MacBook Pro๊ฐ ๋ฑ์ฅํ์ต๋๋ค. ์ต์ด์ ํ๋ก์ฉ Apple Silicon์ธ M1 Pro ๋๋ M1 Max ์นฉ์ ํ์ฌํด ์์ด๊ฐ์ด ๋น ๋ฅธ ์๋๋ ๋ฌผ๋ก , ํ๊ธฐ์ ์ธ ์ฑ๋ฅ๊ณผ ๋๋ผ์ด ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ ์๊ฐ์ ์๋ํ์ฃ . ์ฌ๊ธฐ์ ์์ ์ ์ฌ๋ก์ก๋ Liquid Retina XDR ๋์คํ๋ ์ด, Mac ๋
ธํธ๋ถ ์ฌ์ ์ต๊ณ ์ ์นด๋ฉ๋ผ ๋ฐ ์ค๋์ค ๊ทธ๋ฆฌ๊ณ ๋ํ ๋์ ์์ด ๋ค์ํ ํฌํธ๊น์ง. ๊ธฐ์กด ๊ทธ ์ด๋ค ์นดํ
๊ณ ๋ฆฌ์๋ ์ํ์ง ์๋ ๋
ธํธ๋ถ. ์๋ก์ด MacBook Pro๋ ๊ทธ์ผ๋ง๋ก ์ผ์์
๋๋ค.",
"tags": [
"๊ฐ์ ",
"๋
ธํธ๋ถ",
"์ปดํจํฐ"
],
"thumbnailBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...(์๋ต)"
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface ResponseValue { // ์ถ๊ฐํ ์ ํ์ ์์ธ ๋ด์ฉ
id: string // ์ ํ ID
title: string // ์ ํ ์ด๋ฆ
price: number // ์ ํ ๊ฐ๊ฒฉ
description: string // ์ ํ ์์ธ ์ค๋ช
tags: string[] // ์ ํ ํ๊ทธ
thumbnail: string | null // ์ ํ ์ธ๋ค์ผ ์ด๋ฏธ์ง(URL)
photo: string | null // ์ ํ ์์ธ ์ด๋ฏธ์ง(URL)
isSoldOut: boolean // ์ ํ ๋งค์ง ์ฌ๋ถ
discountRate: number // ์ ํ ํ ์ธ์จ
}
{
"id": "nbqtQvEivYwEXTDet7YM",
"title": "MacBook Pro 16",
"price": 3360000,
"description": "์ญ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ MacBook Pro๊ฐ ๋ฑ์ฅํ์ต๋๋ค. ์ต์ด์ ํ๋ก์ฉ Apple Silicon์ธ M1 Pro ๋๋ M1 Max ์นฉ์ ํ์ฌํด ์์ด๊ฐ์ด ๋น ๋ฅธ ์๋๋ ๋ฌผ๋ก , ํ๊ธฐ์ ์ธ ์ฑ๋ฅ๊ณผ ๋๋ผ์ด ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ ์๊ฐ์ ์๋ํ์ฃ . ์ฌ๊ธฐ์ ์์ ์ ์ฌ๋ก์ก๋ Liquid Retina XDR ๋์คํ๋ ์ด, Mac ๋
ธํธ๋ถ ์ฌ์ ์ต๊ณ ์ ์นด๋ฉ๋ผ ๋ฐ ์ค๋์ค ๊ทธ๋ฆฌ๊ณ ๋ํ ๋์ ์์ด ๋ค์ํ ํฌํธ๊น์ง. ๊ธฐ์กด ๊ทธ ์ด๋ค ์นดํ
๊ณ ๋ฆฌ์๋ ์ํ์ง ์๋ ๋
ธํธ๋ถ. ์๋ก์ด MacBook Pro๋ ๊ทธ์ผ๋ง๋ก ์ผ์์
๋๋ค.",
"tags": [
"๊ฐ์ ",
"๋
ธํธ๋ถ",
"์ปดํจํฐ"
],
"thumbnail": "https://storage.googleapis.com/heropy-api/vIKMk_jy4Yv195256.png",
"photo": "https://storage.googleapis.com/heropy-api/voihKb3NLGcv195257.png",
"isSoldOut": false,
"discountRate": 0
}
- ๊ด๋ฆฌ์ ์ ์ฉ API์ ๋๋ค.
- ์ฌ์ฉ์์ ๊ตฌ๋งค ๋ด์ญ ํ์ธ์ ์ํด, ์ ํ์ ์ค์ ๋ก๋ ์ญ์ ํ์ง ์๊ณ ๋งค์ง(Sold Out) ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
- ๋งค์ง์ ๋ค์ ํด์ ํ ์ ์์ต๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/:productId
\ -X 'PUT'
\ -H 'masterKey: true'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
title?: string // ์ ํ ์ด๋ฆ
price?: number // ์ ํ ๊ฐ๊ฒฉ
description?: string // ์ ํ ์์ธ ์ค๋ช
tags?: string[] // ์ ํ ํ๊ทธ
thumbnailBase64?: string // ์ ํ ์ธ๋ค์ผ(๋ํ) ์ฌ์ง(base64) - jpg, jpeg, webp, png, gif, svg
photoBase64?: string // ์ ํ ์์ธ ์ฌ์ง(base64) - jpg, jpeg, webp, png, gif, svg
isSoldOut?: boolean // ์ ํ ๋งค์ง ์ฌ๋ถ
discountRate?: number // ์ ํ ํ ์ธ์จ
}
{
"price": 1500
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface ResponseValue { // ์์ ํ ์ ํ์ ์์ธ ๋ด์ฉ
id: string // ์ ํ ID
title: string // ์ ํ ์ด๋ฆ
price: number // ์ ํ ๊ฐ๊ฒฉ
description: string // ์ ํ ์์ธ ์ค๋ช
tags: string[] // ์ ํ ํ๊ทธ
thumbnail: string | null // ์ ํ ์ธ๋ค์ผ ์ด๋ฏธ์ง(URL)
photo: string | null // ์ ํ ์์ธ ์ด๋ฏธ์ง(URL)
isSoldOut: boolean // ์ ํ ๋งค์ง ์ฌ๋ถ
discountRate: number // ์ ํ ํ ์ธ์จ
}
{
"id": "nbqtQvEivYwEXTDet7YM",
"title": "MacBook Pro 16",
"price": 1500,
"description": "์ญ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ MacBook Pro๊ฐ ๋ฑ์ฅํ์ต๋๋ค. ์ต์ด์ ํ๋ก์ฉ Apple Silicon์ธ M1 Pro ๋๋ M1 Max ์นฉ์ ํ์ฌํด ์์ด๊ฐ์ด ๋น ๋ฅธ ์๋๋ ๋ฌผ๋ก , ํ๊ธฐ์ ์ธ ์ฑ๋ฅ๊ณผ ๋๋ผ์ด ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ ์๊ฐ์ ์๋ํ์ฃ . ์ฌ๊ธฐ์ ์์ ์ ์ฌ๋ก์ก๋ Liquid Retina XDR ๋์คํ๋ ์ด, Mac ๋
ธํธ๋ถ ์ฌ์ ์ต๊ณ ์ ์นด๋ฉ๋ผ ๋ฐ ์ค๋์ค ๊ทธ๋ฆฌ๊ณ ๋ํ ๋์ ์์ด ๋ค์ํ ํฌํธ๊น์ง. ๊ธฐ์กด ๊ทธ ์ด๋ค ์นดํ
๊ณ ๋ฆฌ์๋ ์ํ์ง ์๋ ๋
ธํธ๋ถ. ์๋ก์ด MacBook Pro๋ ๊ทธ์ผ๋ง๋ก ์ผ์์
๋๋ค.",
"tags": [
"๊ฐ์ ",
"๋
ธํธ๋ถ",
"์ปดํจํฐ"
],
"thumbnail": "https://storage.googleapis.com/heropy-api/vIKMk_jy4Yv195256.png",
"photo": "https://storage.googleapis.com/heropy-api/voihKb3NLGcv195257.png",
"isSoldOut": false,
"discountRate": 0
}
- ๊ด๋ฆฌ์ ์ ์ฉ API์ ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/:productId
\ -X 'DELETE'
\ -H 'masterKey: true'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
- ์์
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = true // ์ ํ ์ญ์ ์ฒ๋ฆฌ ์ํ
- ๊ณต์ฉ API์ ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/:productId
\ -X 'GET'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
- ์์
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface ResponseValue { // ์ ํ์ ์์ธ ๋ด์ฉ
id: string // ์ ํ ID
title: string // ์ ํ ์ด๋ฆ
price: number // ์ ํ ๊ฐ๊ฒฉ
description: string // ์ ํ ์์ธ ์ค๋ช
tags: string[] // ์ ํ ํ๊ทธ
thumbnail: string | null // ์ ํ ์ธ๋ค์ผ ์ด๋ฏธ์ง(URL)
photo: string | null // ์ ํ ์์ธ ์ด๋ฏธ์ง(URL)
isSoldOut: boolean // ์ ํ ๋งค์ง ์ฌ๋ถ
reservations: Reservation[] // ์ ํ์ ๋ชจ๋ ์์ฝ ์ ๋ณด ๋ชฉ๋ก
discountRate: number // ์ ํ ํ ์ธ์จ
}
interface Reservation {
start: string // ์์ฝ ์์ ์๊ฐ
end: string // ์์ฝ ์ข
๋ฃ ์๊ฐ
isCanceled: boolean // ์์ฝ ์ทจ์ ์ฌ๋ถ
isExpired: boolean // ์์ฝ ๋ง๋ฃ ์ฌ๋ถ
}
{
"id": "nbqtQvEivYwEXTDet7YM",
"title": "MacBook Pro 16",
"price": 3360000,
"description": "์ญ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ MacBook Pro๊ฐ ๋ฑ์ฅํ์ต๋๋ค. ์ต์ด์ ํ๋ก์ฉ Apple Silicon์ธ M1 Pro ๋๋ M1 Max ์นฉ์ ํ์ฌํด ์์ด๊ฐ์ด ๋น ๋ฅธ ์๋๋ ๋ฌผ๋ก , ํ๊ธฐ์ ์ธ ์ฑ๋ฅ๊ณผ ๋๋ผ์ด ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ ์๊ฐ์ ์๋ํ์ฃ . ์ฌ๊ธฐ์ ์์ ์ ์ฌ๋ก์ก๋ Liquid Retina XDR ๋์คํ๋ ์ด, Mac ๋
ธํธ๋ถ ์ฌ์ ์ต๊ณ ์ ์นด๋ฉ๋ผ ๋ฐ ์ค๋์ค ๊ทธ๋ฆฌ๊ณ ๋ํ ๋์ ์์ด ๋ค์ํ ํฌํธ๊น์ง. ๊ธฐ์กด ๊ทธ ์ด๋ค ์นดํ
๊ณ ๋ฆฌ์๋ ์ํ์ง ์๋ ๋
ธํธ๋ถ. ์๋ก์ด MacBook Pro๋ ๊ทธ์ผ๋ง๋ก ์ผ์์
๋๋ค.",
"tags": [
"๊ฐ์ ",
"๋
ธํธ๋ถ",
"์ปดํจํฐ"
],
"thumbnail": "https://storage.googleapis.com/heropy-api/vIKMk_jy4Yv195256.png",
"photo": "https://storage.googleapis.com/heropy-api/voihKb3NLGcv195257.png",
"isSoldOut": false,
"reservations": [],
"discountRate": 0
}
์์ฝ ์ ๋ณด(reservation
)๊ฐ ์๋ ๊ฒฝ์ฐ:
{
"reservations": [
{
"reservation": {
"start": "2021-11-12T06:00:00.000Z",
"end": "2021-11-12T07:00:00.000Z",
"isCanceled": false,
"isExpired": true
}
}
]
}
- ์ฌ์ฉ์ ์ ์ฉ API์ ๋๋ค.
- ์ ํ ์ด๋ฆ๊ณผ ํ๊ทธ๋ฅผ ๋์์ ๊ฒ์ํ ์ ์๊ณ , 'And'(๊ฒ์ํ ์ด๋ฆ๊ณผ ํ๊ทธ ๋ชจ๋ ํฌํจ๋ ์ ํ) ์กฐ๊ฑด์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ ํ ์ด๋ฆ๊ณผ ํ๊ทธ ๋ชจ๋ ํฌํจํ์ง ์์ผ๋ฉด, ๋ชจ๋ ์ ํ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ ํ์ ๊ธฐ๋ณธ ์ ๋ณด๋ง ๋ฐํํฉ๋๋ค.
- ๋งค์ง๋ ์ ํ์ ๊ฒ์๋์ง ์์ต๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/search
\ -X 'POST'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
searchText?: string // ๊ฒ์ํ ์ ํ ์ด๋ฆ
searchTags?: string[] // ๊ฒ์ํ ์ ํ ํ๊ทธ
}
{
"searchText": "์ผ์ฑ์ ์",
"searchTags": ["๊ฐ์ "]
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = Product[] // ๊ด๋ฆฌํ๋ ๋ชจ๋ ์ ํ์ ๋ชฉ๋ก
interface Product { // ์ ํ ์ ๋ณด
id: string // ์ ํ ID
title: string // ์ ํ ์ด๋ฆ
price: number // ์ ํ ๊ฐ๊ฒฉ
description: string // ์ ํ ์ค๋ช
(์ต๋ 100์)
tags: string[] // ์ ํ ํ๊ทธ
thumbnail: string | null // ์ ํ ์ธ๋ค์ผ ์ด๋ฏธ์ง(URL)
discountRate: number // ์ ํ ํ ์ธ์จ
}
[
{
"id": "cFmeC7aY5KjZbBAdJE9y",
"title": "์ผ์ฑ์ ์ ์ค๋งํธ๋ชจ๋ํฐ M7 S43AM700",
"price": 639000,
"description": "107.9cm(43์ธ์น) / ์์ด๋(16:9) / ํ๋ฉด / VA / 3840 x 2160(4K UHD) / ํฝ์
ํผ์น: 0.2451mm / 8ms(GTG) / 300cd / 5,00",
"tags": [
"๊ฐ์ ",
"๋ชจ๋ํฐ",
"์ปดํจํฐ"
],
"thumbnail": "https://storage.googleapis.com/heropy-api/vBAK4MQdH5v195712.png",
"discountRate": 0
}
]
- ์ฌ์ฉ์ ์ ์ฉ API์ ๋๋ค.
- ๊ฑฐ๋(๊ตฌ๋งค) ์ ์ฒญ์ ์ฐ๊ฒฐ๋ ๊ณ์ข์์ ๊ฒฐ์ ๋ฉ๋๋ค.
- ๊ฒฐ์ ํ ๊ณ์ข(ID)๋ฅผ ๊ผญ ์ ํํด์ผ ํฉ๋๋ค.(
๊ณ์ข ๋ชฉ๋ก ๋ฐ ์์ก ์กฐํ
API๋ฅผ ์ฌ์ฉํ์ธ์) - ์ ํํ ๊ณ์ข์ ์์ก๋ณด๋ค ๊ฒฐ์ ๊ธ์ก์ด ํฌ๋ฉด ๊ฒฐ์ ๊ฐ ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค.(์๋ฌ ๋ฐํ)
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/buy
\ -X 'POST'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
productId: string // ๊ฑฐ๋ํ ์ ํ ID (ํ์!)
accountId: string // ๊ฒฐ์ ํ ์ฌ์ฉ์ ๊ณ์ข ID (ํ์!)
reservation?: { // ์์ฝ ์ ๋ณด(์์ฝ ์์คํ
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ง ํ์)
start: string // ์์ฝ ์์ ์๊ฐ(ISO)
end: string // ์์ฝ ์ข
๋ฃ ์๊ฐ(ISO)
}
}
const isoString = new Date().toISOString()
{
"productId": "nbqtQvEivYwEXTDet7YM",
"accountId": "Mq2KKHk8vlmr6Xkg58Fa",
"reservation": {
"start": "2021-11-12T06:00:00.000Z",
"end": "2021-11-12T07:00:00.000Z"
}
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = true // ๊ฑฐ๋ ์ ์ฒญ ์ฒ๋ฆฌ ์ฌ๋ถ
- ์ฌ์ฉ์ ์ ์ฉ API์ ๋๋ค.
- '๊ฑฐ๋ ์ทจ์'์ ๊ฒฐ์ ํ ์ฌ์ฉ์ ๊ณ์ข๋ก ๊ธ์ก์ด ํ๋ถ๋ฉ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/cancel
\ -X 'POST'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
detailId: string // ์ทจ์ํ ์ ํ์ ๊ฑฐ๋ ๋ด์ญ ID
}
{
"detailId": "dMhfxyrAupQP18OYmywy"
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = true // ๊ฑฐ๋ ์ทจ์ ์ฒ๋ฆฌ ์ฌ๋ถ
- ์ฌ์ฉ์ ์ ์ฉ API์ ๋๋ค.
- '๊ฑฐ๋(๊ตฌ๋งค) ํ์ ' ํ์๋ '๊ฑฐ๋ ์ทจ์'๋ฅผ ํ ์ ์์ต๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/ok
\ -X 'POST'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
detailId: string // ๊ฑฐ๋(๊ตฌ๋งค) ํ์ ํ ์ ํ์ ๊ฑฐ๋ ๋ด์ญ ID
}
{
"detailId": "dMhfxyrAupQP18OYmywy"
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type ResponseValue = true // ๊ฑฐ๋(๊ตฌ๋งค) ํ์ ์ฒ๋ฆฌ ์ฌ๋ถ
- ์ฌ์ฉ์ ์ ์ฉ API์ ๋๋ค.
- ๊ฑฐ๋ ๋ด์ญ์ ๊ธฐ๋ณธ ์ ๋ณด๋ง ํฌํจ๋ฉ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/transactions/details
\ -X 'GET'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
- ์์
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
type RequestValue = TransactionDetail[] // ๋ชจ๋ ๊ฑฐ๋ ๋ด์ญ์ ๋ชฉ๋ก
interface TransactionDetail { // ๊ฑฐ๋ ๋ด์ญ ์ ๋ณด
detailId: string // ๊ฑฐ๋ ๋ด์ญ ID
product: { // ๊ฑฐ๋ํ ์ ํ ์ ๋ณด
productId: string
title: string
price: number
description: string
tags: string[]
thumbnail: string | null
discountRate: number // ์ ํ ํ ์ธ์จ
}
reservation: Reservation | null // ๊ฑฐ๋ํ ์ ํ์ ์์ฝ ์ ๋ณด
timePaid: string // ์ ํ์ ๊ฑฐ๋ํ ์๊ฐ
isCanceled: boolean // ๊ฑฐ๋ ์ทจ์ ์ฌ๋ถ
done: boolean // ๊ฑฐ๋ ์๋ฃ ์ฌ๋ถ
}
interface Reservation {
start: string // ์์ฝ ์์ ์๊ฐ
end: string // ์์ฝ ์ข
๋ฃ ์๊ฐ
isCanceled: boolean // ์์ฝ ์ทจ์ ์ฌ๋ถ
isExpired: boolean // ์์ฝ ๋ง๋ฃ ์ฌ๋ถ
}
[
{
"detailId": "9jAoagzrZBkSWI5NctEB",
"product": {
"productId": "nbqtQvEivYwEXTDet7YM",
"title": "MacBook Pro 16",
"price": 3360000,
"description": "์ญ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ MacBook Pro๊ฐ ๋ฑ์ฅํ์ต๋๋ค. ์ต์ด์ ํ๋ก์ฉ Apple Silicon์ธ M1 Pro ๋๋ M1 Max ์นฉ์ ํ์ฌํด ์์ด๊ฐ์ด ๋น ๋ฅธ ์๋๋ ๋ฌผ๋ก , ํ๊ธฐ์ ์ธ ์ฑ",
"tags": [
"๊ฐ์ ",
"๋
ธํธ๋ถ",
"์ปดํจํฐ"
],
"thumbnail": "https://storage.googleapis.com/heropy-api/vIKMk_jy4Yv195256.png",
"discountRate": 0
},
"reservation": null,
"timePaid": "2021-11-07T20:17:32.112Z",
"isCanceled": true,
"done": false
},
{
"detailId": "dMhfxyrAupQP18OYmywy",
"product": {
"productId": "cFmeC7aY5KjZbBAdJE9y",
"title": "์ผ์ฑ์ ์ ์ค๋งํธ๋ชจ๋ํฐ M7 S43AM700",
"price": 639000,
"description": "107.9cm(43์ธ์น) / ์์ด๋(16:9) / ํ๋ฉด / VA / 3840 x 2160(4K UHD) / ํฝ์
ํผ์น: 0.2451mm / 8ms(GTG) / 300cd / 5,00",
"tags": [
"๊ฐ์ ",
"๋ชจ๋ํฐ",
"์ปดํจํฐ"
],
"thumbnail": "https://storage.googleapis.com/heropy-api/vBAK4MQdH5v195712.png",
"discountRate": 0
},
"reservation": {
"start": "2021-11-12T06:00:00.000Z",
"end": "2021-11-12T07:00:00.000Z",
"isCanceled": false,
"isExpired": true
},
"timePaid": "2021-11-07T20:01:49.100Z",
"isCanceled": false,
"done": true
}
]
- ์ฌ์ฉ์ ์ ์ฉ API์ ๋๋ค.
curl https://asia-northeast3-heropy-api.cloudfunctions.net/api/products/transactions/detail
\ -X 'POST'
\ -H 'Authorization: Bearer <accessToken>'
์์ฒญ ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface RequestBody {
detailId: string // ์์ธ ๋ด์ฉ์ ํ์ธํ ๊ฑฐ๋(๊ตฌ๋งค) ๋ด์ญ ID
}
{
"detailId": "dMhfxyrAupQP18OYmywy"
}
์๋ต ๋ฐ์ดํฐ ํ์ ๋ฐ ์์:
interface TransactionDetail { // ์์ธ ๊ฑฐ๋ ์ ๋ณด
detailId: string // ๊ฑฐ๋ ๋ด์ญ ID
account: { // ๊ฑฐ๋ํ ์ฌ์ฉ์์ ๊ณ์ข ์ ๋ณด
bankName: string
bankCode: string
accountNumber: string
}
product: { // ๊ฑฐ๋ํ ์ ํ ์ ๋ณด
productId: string
title: string
price: number
description: string
tags: string[]
thumbnail: string | null
photo: string | null
discountRate: number // ์ ํ ํ ์ธ์จ
}
reservation: Reservation | null // ๊ฑฐ๋ํ ์ ํ์ ์์ฝ ์ ๋ณด
timePaid: string // ์ ํ์ ๊ฑฐ๋ํ ์๊ฐ
isCanceled: boolean // ๊ฑฐ๋ ์ทจ์ ์ฌ๋ถ
done: boolean // ๊ฑฐ๋ ์๋ฃ ์ฌ๋ถ
}
interface Reservation {
start: string // ์์ฝ ์์ ์๊ฐ
end: string // ์์ฝ ์ข
๋ฃ ์๊ฐ
isCanceled: boolean // ์์ฝ ์ทจ์ ์ฌ๋ถ
isExpired: boolean // ์์ฝ ๋ง๋ฃ ์ฌ๋ถ
}
{
"detailId": "dMhfxyrAupQP18OYmywy",
"account": {
"bankName": "KB๊ตญ๋ฏผ์ํ",
"bankCode": "004",
"accountNumber": "123-XX-XXXX-XXX"
},
"product": {
"productId": "cFmeC7aY5KjZbBAdJE9y",
"title": "์ผ์ฑ์ ์ ์ค๋งํธ๋ชจ๋ํฐ M7 S43AM700",
"price": 639000,
"description": "107.9cm(43์ธ์น) / ์์ด๋(16:9) / ํ๋ฉด / VA / 3840 x 2160(4K UHD) / ํฝ์
ํผ์น: 0.2451mm / 8ms(GTG) / 300cd / 5,000:1 / ์ต๋ ์ฃผ์ฌ์จ: 60Hz / HDMI 2.0 / USB Type-C / ํ๋ฆฌ์ปค ํ๋ฆฌ / ๋ธ๋ฃจ๋ผ์ดํธ ์ฐจ๋จ / ๊ฒ์๋ชจ๋ ์ง์ / ์คํผ์ปค / ๋ฆฌ๋ชจ์ปจ / USBํ๋ธ / Wi-Fi(๋ฌด์ ) / ์ค๋งํธTV / ๋ธ๋ฃจํฌ์ค / ํธํธ(์ํ) / 200 x 200mm / HDR / HDR10 / 10.6kg ๊ธฐํ์ ์ฐจ์ธ๋ ๊ฒ์ ๋ผ์ดํ PS5 ๋งค๋ ฅ๋ถ์ ๊ด๋ จ๊ธฐ์ฌ ํ์๋, 43์ธ์น 4K UHD ์ค๋งํธ ๋ชจ๋ํฐ โ์ผ์ฑ์ ์ M7 S43AM700โ ์ถ์ ๋ฐ ํ ์ธ ํ์ฌ ์ฌ์ฉ๊ธฐ ์ผ์ฑ ์ค๋งํธ๋ชจ๋ํฐ m7 s43am700",
"tags": [
"๊ฐ์ ",
"๋ชจ๋ํฐ",
"์ปดํจํฐ"
],
"thumbnail": "https://storage.googleapis.com/heropy-api/vBAK4MQdH5v195712.png",
"photo": "https://storage.googleapis.com/heropy-api/vVLP-ox_zSDv195712.jpg",
"discountRate": 0
},
"reservation": null,
"timePaid": "2021-11-07T20:01:49.100Z",
"isCanceled": false,
"done": true
}