μ£Όμ΄μ§ 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": "thesecon@gmail.com",
"password": "********",
"displayName": "ParkYoungWoong",
"profileImgBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAf...(μλ΅)"
}
μλ΅ λ°μ΄ν° νμ λ° μμ:
interface ResponseValue {
user: { // νμκ°μ
ν μ¬μ©μ μ 보
email: string // μ¬μ©μ μμ΄λ
displayName: string // μ¬μ©μ νμ μ΄λ¦
profileImg: string | null // μ¬μ©μ νλ‘ν μ΄λ―Έμ§(URL)
}
accessToken: string // μ¬μ©μ μ κ·Ό ν ν°
}
{
"user": {
"email": "thesecon@gmail.com",
"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": "thesecon@gmail.com",
"password": "********"
}
μλ΅ λ°μ΄ν° νμ λ° μμ:
interface ResponseValue {
user: { // νμκ°μ
ν μ¬μ©μ μ 보
email: string // μ¬μ©μ μμ΄λ
displayName: string // μ¬μ©μ νμ μ΄λ¦
profileImg: string | null // μ¬μ©μ νλ‘ν μ΄λ―Έμ§(URL)
}
accessToken: string // μ¬μ©μ μ κ·Ό ν ν°
}
{
"user": {
"email": "thesecon@gmail.com",
"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": "thesecon@gmail.com",
"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": "thesecon@gmail.com",
"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": "thesecon@gmail.com",
"displayName": "HEROPY",
"profileImg": null
},
{
"email": "neo@zillinks.com",
"displayName": "λ°μμ
",
"profileImg": "https://storage.googleapis.com/heropy-api/Z_una7lyijv074804.png"
},
{
"email": "test@test.com",
"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": "thesecon@gmail.com",
"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
}