Skip to content
LeeSangHoon edited this page Apr 24, 2023 · 2 revisions

API 목록

API Description
GET /api/trade 교환글 목록 조회
POST /api/trade 교환글 등록
GET /api/trade/:tradeId 교환글 상세 조회
PUT /api/trade/:tradeId 교환글 수정
DELETE /api/trade/:tradeId 교환글 삭제
GET /api/trade/:tradeId/exchange 교환 가능한 소유권 조회
POST /api/trade/:tradeId/exchange 교환

교환글 목록 조회

GET /api/trade

  • 해당 검색 필터에 해당하는 소유권 목록 정보를 조회합니다.

Request Parameters

Parameter Target Type Description
pageParam query number 페이지 번호
filter query Object 검색 필터
filter.groupId query number 조회할 교환글이 등록된 대상 그룹 ID
filter.memberId query number 조회할 교환글이 등록된 대상 멤버 ID
filter.userId query number 교환글 등록자 회원 PK
filter.excludeUserId query number 조회에서 제외할 교환글 등록자 회원 PK
filter.state query "all" or "trading" or "traded" 조회할 소유권 상태

Response

{
    "_status": 200,
    "message": "거래글 목록을 조회했습니다.",
    "trades": [
        {
            "tradeId": 9,
            "state": "trading",
            "amount": 2,
            "writtenTime": "2023-04-21T17:18:04.000Z",
            "tradedTime": null,
            "voucher": {
                "voucherId": 23,
                "photocardId": 207,
                "name": "SIGNAL",
                "imageName": "207_1681899933197.png",
                "groupData": {
                    "groupId": 2,
                    "name": "TWICE"
                },
                "memberData": {
                    "memberId": 9,
                    "name": "정연"
                }
            },
            "author": {
                "userId": 4,
                "username": "user1",
                "nickname": "교환매니아",
                "imageName": "4_1681972498621.png"
            },
            "wantcards": [
                {
                    "photocardId": 3,
                    "name": "BE",
                    "imageName": "3_1681736475429.png",
                    "memberData": {
                        "memberId": 1,
                        "name": ""
                    },
                    "groupData": {
                        "groupId": 1,
                        "name": "BTS"
                    }
                },
                {
                    "photocardId": 5,
                    "name": "BUTTER",
                    "imageName": "5_1681736475431.png",
                    "memberData": {
                        "memberId": 1,
                        "name": ""
                    },
                    "groupData": {
                        "groupId": 1,
                        "name": "BTS"
                    }
                }
            ]
        }
    ],
    "paging": {
        "pageParam": 0,
        "hasNextPage": false
    }
}

교환글 등록

POST /api/trade

  • 교환글을 등록합니다.

Request Parameters

Parameter Target Type Description
voucherId body number 교환에 등록할 소유권 ID
wantPhotocardIds body number[] 받으려는 포토카드 ID 목록
amount body number 교환의 대가로 받으려는 포토카드 갯수

Response

{
    "_status": 200,
    "message": "교환글을 작성했어요."
}
{
    "_status": 400,
    "message": "사용하려는 소유권이 이용 가능한 상태가 아니에요."
}
{
    "_status": 400,
    "message": "사용하려는 소유권이 당신의 것이 아니에요."
}
{
    "_status": 400,
    "message": "받을 포토카드는 등록할 소유권과 같은 종류일 수 없어요."
}
{
    "_status": 404,
    "message": "받을 포토카드의 정보가 올바르지 않아요."
}
{
    "_status": 404,
    "message": "로그인한 사용자의 정보가 올바르지 않아요."
}
{
    "_status": 404,
    "message": "사용하려는 소유권이 존재하지 않아요."
}

교환글 상세 조회

GET /api/trade/:tradeId

  • 특정 교환글의 상세 정보를 조회합니다.

Request Parameters

Parameter Target Type Description
tradeId param number 교환글 ID

Response

{
    "_status": 200,
    "message": "교환글을 조회했어요.",
    "tradeId": 10,
    "userId": 4,
    "state": "trading",
    "amount": 1,
    "writtenTime": "2023-04-21T17:24:49.000Z",
    "tradedTime": null,
    "voucher": {
        "voucherId": 24,
        "photocardId": 30,
        "name": "BE",
        "imageName": "30_1681837915650.png",
        "groupData": {
            "groupId": 1,
            "name": "BTS"
        },
        "memberData": {
            "memberId": 2,
            "name": "슈가"
        }
    },
    "wantcards": [
        {
            "photocardId": 11,
            "name": "LOVE YOURSELF_ HER",
            "imageName": "11_1681736475532.png",
            "memberData": {
                "memberId": 1,
                "name": ""
            },
            "groupData": {
                "groupId": 1,
                "name": "BTS"
            }
        }
    ],
    "author": {
        "userId": 4,
        "username": "user1",
        "nickname": "교환매니아",
        "imageName": "4_1681972498621.png",
        "role": "user"
    }
}
{
    "_status": 404,
    "message": "조회하려는 교환글이 존재하지 않아요."
}
{
    "_status": 404,
    "message": "작성자 정보가 존재하지 않아요."
}

교환글 수정

PUT /api/trade/:tradeId

  • 교환글을 수정합니다.

Request Parameters

Parameter Target Type Description
tradeId param number 교환글 ID
wantPhotocardIds body number[] 받으려는 포토카드 ID 목록
amount body number 교환의 대가로 받으려는 포토카드 갯수

Response

{
    "_status": 200,
    "message": "교환글을 수정했어요."
}
{
    "_status": 400,
    "message": "이미 교환이 완료된 교환글은 삭제할 수 없어요."
}
{
    "_status": 400,
    "message": "받을 포토카드는 등록할 소유권과 같은 종류일 수 없어요."
}
{
    "_status": 404,
    "message": "수정하려는 교환글이 존재하지 않아요."
}
{
    "_status": 404,
    "message": "로그인한 사용자의 정보가 올바르지 않아요."
}
{
    "_status": 404,
    "message": "받을 포토카드의 정보가 올바르지 않아요."
}

교환글 삭제

DELETE /api/trade/:tradeId

  • 교환글을 삭제합니다.

Request Parameters

Parameter Target Type Description
tradeId param number 교환글 ID

Response

{
    "_status": 200,
    "message": "교환글을 삭제했어요."
}
{
    "_status": 400,
    "message": "이미 교환이 완료된 교환글은 삭제할 수 없어요."
}
{
    "_status": 404,
    "message": "삭제하려는 교환글이 존재하지 않아요."
}

교환 가능한 소유권 조회

GET /api/trade/:tradeId/exchange

  • 로그인 된 사용자가 해당 교환글이 원하는 소유권 중에서 자신이 가진 소유권을 조회합니다.

Request Parameters

Parameter Target Type Description
tradeId param number 교환글 ID

Response

{
    "_status": 200,
    "message": "교환 가능한 소유권을 조회했어요.",
    "vouchers": [
        {
            "voucherId": 26,
            "state": "available",
            "createdTime": "2023-04-21T17:28:39.000Z",
            "photo": {
                "photocardId": 23,
                "name": "MAP OF THE SOUL_ 7",
                "imageName": "23_1681837800724.png",
                "groupData": {
                    "groupId": 1,
                    "name": "BTS"
                },
                "memberData": {
                    "memberId": 1,
                    "name": ""
                }
            },
            "owner": {
                "userId": 5,
                "username": "wannav",
                "nickname": "와나비",
                "imageName": "5_1681972320438.jpg"
            }
        },
        {
            "voucherId": 25,
            "state": "available",
            "createdTime": "2023-04-21T17:28:39.000Z",
            "photo": {
                "photocardId": 25,
                "name": "MAP OF THE SOUL_ 7",
                "imageName": "25_1681837800744.png",
                "groupData": {
                    "groupId": 1,
                    "name": "BTS"
                },
                "memberData": {
                    "memberId": 1,
                    "name": ""
                }
            },
            "owner": {
                "userId": 5,
                "username": "wannav",
                "nickname": "와나비",
                "imageName": "5_1681972320438.jpg"
            }
        }
    ]
}
{
    "_status": 400,
    "message": "이미 교환이 완료된 교환글이에요."
}
{
    "_status": 400,
    "message": "보유하고 있는 조건에 맞는 소유권이 부족해요."
}
{
    "_status": 403,
    "message": "자신이 작성한 교환글이에요."
}
{
    "_status": 404,
    "message": "해당 교환글이 존재하지 않아요."
}

교환

POST /api/trade/:tradeId/exchange

  • 사용자가 자신의 소유권을 사용해서 특정 교환글을 등록한 작성자의 소유권과 교환합니다.

Request Parameters

Parameter Target Type Description
tradeId param number 교환글 ID
voucherIds body number[] 사용할 소유권 ID 목록

Response

{
    "_status": 200,
    "message": "교환이 완료되었어요."
}
{
    "_status": 400,
    "message": "이미 교환이 완료된 교환글이에요."
}
{
    "_status": 400,
    "message": "교환글의 작성자가 소유권의 실 소유주가 아니에요."
}
{
    "_status": 400,
    "message": "사용하려는 소유권이 교환 가능한 상태가 아니에요."
}
{
    "_status": 403,
    "message": "자신이 작성한 교환글을 대상으로는 교환을 시도할 수 없어요."
}
{
    "_status": 403,
    "message": "사용할 소유권을 ${amount}개 선택해주세요."
}
{
    "_status": 403,
    "message": "사용하려는 소유권이 당신의 것이 아니에요."
}
{
    "_status": 404,
    "message": "해당 교환글이 존재하지 않아요."
}
{
    "_status": 404,
    "message": "교환글의 소유권이 존재하지 않아요."
}
{
    "_status": 404,
    "message": "사용하려는 소유권이 존재하지 않아요."
}