nhnacademy-be3-CookShoong / issue-manage

0 stars 0 forks source link

API 규약 정립 #144

Open eora21 opened 1 year ago

eora21 commented 1 year ago

참고

REST API URL 규칙 REST API URI 규칙 REST API 모범 사례

정립

Client Server 주소와 내부 주소 모두 작성한다. https://docs.google.com/spreadsheets/d/1YlCS-fWBnQJK4sv7zS8kQDkIjJx6MhPvTHv_MZ7tQ30/edit?usp=sharing

eora21 commented 1 year ago

지금까지 그린 UI를 보며 작성해봅시다.

10kseok commented 1 year ago

View

랜딩페이지
GET /

로그인화면
GET /login

회원가입화면
GET /signup

API Spec

회원

로그인 요청

POST /login

Request

{
    "loginId": "user1",
    "password": "e12oj25905uteiofhjfhskjfh23r239823rh3",
    "csrf_token": "wfw424rwrwrwfseda"
}

Response (200)

{
    "statusCode" : "ACTIVE",
    "authority": "USER",
    "accountId": 1
}

회원가입 요청

일반 회원
POST /accounts/customer

사업자 회원
POST /accounts/business

Request

{
    "loginId": "user1",
    "password": "e12oj25905uteiofhjfhskjfh23r239823rh3",
    "csrf_token": "wfw424rwrwrwfseda",
    "name": "나유저",
    "nickname": "유저아님",
    "email": "aa@aa.com",
    "birthday": 1998-09-20,
    "phoneNumber": "01012345678"
}

Response (201)

empty

회원의 모든 주소록 조회

GET /accounts/{accountId}/address-book

Response (200)

[
    {   
        "addressId": 1,
        "alias": "자취방",
        "mainPlace": "광주광역시 ~~",
        "detailPlace": "102동 1004호",
        "latitude": 123.213532535431,
        "longitude": 43.872132535431
    }, 
    {   
        "addressId": 2,
        "alias": "본가",
        "mainPlace": "서울특별시 ~~",
        "detailPlace": "107동 1004호",
        "latitude": 133.213532535431,
        "longitude": 63.872132535431
    },
    ...
]

회원등록주소 추가

POST /accounts/{accountId}/address-book

Request

{
    "alias": "자취방",
    "mainPlace": "광주광역시 ~~",
    "detailPlace": "102동 1004호",
    "latitude": 123.213532535431,
    "longitude": 43.872132535431
}

Response (201)

empty

회원등록주소 삭제

DELETE /accounts/{accountId}/address-book/{addressId}

Response (204)

empty

회원 상태 변경

PATCH /accounts/{accountId}/status

Request

{
    "statusCode": "ACTIVE"
}

Response (200)

{
    "accountId": 1,
    "statusCode": "ACTIVE",
    "description": "활성"
}

매장

매장 등록

POST /stores

Request

{
    "businessLicenseNumber": "0123456789",
    "representativeName": "나사장",
    "openingDate": 2023-07-02,
    "name": "맛집옆그집",
    "phoneNumber": "354020001111",
    "address": "광주광역시 ~~ 무슨무슨길 19",
    "businessLicense": "multipart-formdata",
    "description": "우리는 ~매장입니다."
}

Response (200)

[
    {
        "categoryCode": "CHK",
        "description": "치킨"
    }, 
    {
        "categoryCode": "CWE",
        "description": "예압"
    }
]

매장관리를 위한 매장 리스트 조회

GET /accounts/{accountId}/stores

Response (200)

[
    {
        "storeId": 1,
        "name": "치킨집"
    }, 
    {
        "storeId": 2,
        "name": "피자집"
    }
]

해당 매장관리를 위한 매장정보 조회

GET /accounts/{accountId}/stores/{storeId}

Response (200)

{
    "name": "치킨집",
    "image": "d12k4j45-r23fdgfgs-23tregwer-2332r422.png",
    "description": "여기 맛집임",
    "categoryDescription": ["피자", "치킨"],
    "defaultEarningRate": 1.5,
    "storeBusinessHours": ["월 16:00~22:00", "월 23:00~24:00",  "화 00:00~04:00", "화 16:00~22:00"]  
}

메뉴관리를 위한 메뉴그룹 리스트 조회

GET /stores/{storeId}/management/{accountId}/menu-group

Response (200)

[
    {   
        "menuGroupId": 1,
        "name": "신메뉴",
        "menu": ["불고기 피자", "하와이안 피자"]
    },
    {   
        "menuGroupId": 2,
        "name": "대표메뉴",
        "menu": ["소고기 피자", "돼지고기 피자"]
    },
    ...
]

메뉴관리를 위한 메뉴그룹 등록

POST /stores/{storeId}/management/{accountId}/menu-group

Request

{
    "name": "1인 메뉴",
    "description": "혼자 먹기 좋은 메뉴" 
}

Response (201)

empty

메뉴관리를 위한 메뉴그룹 수정

PATCH /stores/{storeId}/management/{accountId}/menu-group/{menuGroupId}

Request

{
    "name": "1인 메뉴",
    "description": "혼자 먹다 둘이 죽어도 좋은 메뉴"
}

Response (200)

empty

메뉴관리를 위한 메뉴그룹 삭제

DELETE /stores/{storeId}/management/{accountId}/menu-group/{menuGroupId}

Response (204)

empty

메뉴관리를 위한 옵션그룹 리스트 조회

GET /stores/{storeId}/management/{accountId}/option-group

Response (200)

[
    {
        "optionGroupId": 1,
        "name": "맵기",
        "options": ["순한맛", "보통맛", "매운맛"]
    },
    {
        "optionGroupId": 2,
        "name": "추가메뉴",
        "options": ["환타", "사이다", "콜라"]
    }
]

매뉴관리를 위한 옵션그룹 등록, 수정

PUT /stores/{storeId}/management/{accountId}/option-group?id={optionGroupId}

Request

{
    "name": "사이즈",
    "minSelectCount": 1,
    "maxSelectCount": 2,
    "options": [
        {
            "name": "S",
            "price": 1000    
        },
        {
            "name": "M",
            "price": 2000    
        },
        {
            "name": "L",
            "price": 3000    
        }
    ]
}

Response (201)

empty

메뉴관리를 위한 옵션그룹 삭제

DELETE /stores/{storeId}/management/{accountId}/option-group/{optionGroupId}

Response (204)

empty

메뉴관리를 위한 메뉴 리스트 조회

GET /stores/{storeId}/management/{accountId}/menu-group/{menuGroupId}/menu

Response (200)

[
    {
        "menuId": 1,
        "name": "불고기피자"
    },
    {
        "menuId": 2,
        "name": "하와이안피자"
    },
    ...
]

메뉴관리를 위한 메뉴 생성

POST /stores/{storeId}/management/{accountId}/menu-group/{menuGroupId}/menu

Request

{
    "name": "어깨 피자",
    "price": 23000,
    "description": "지친 사회인들을 위한 피자",
    "image": "multipart-formdata",
    "cookingTime": 33,
    "earningRate": 1.5,
    "optionGroups": [1, 2, 3]
}

Response (201)

empty

메뉴관리를 위한 메뉴 수정

PATCH /stores/{storeId}/management/{accountId}/menu-group/{menuGroupId}/menu/{menuId}

Request

{
    "name": "어깨 쫌 피자",
    "price": 24000,
    "description": "지친 사회인들을 위한 피자",
    "cookingTime": 33,
    "earningRate": 1.5,
    "optionGroups": [1, 2, 3],
    "isSoldOut": 0
}

Response (200)

empty

메뉴관리를 위한 메뉴 삭제

DELETE /stores/{storeId}/management/{accountId}/menu-group/{menuGroupId}/menu/{menuId}

Response (204)

empty

매장관리를 위한 매장정보 조회

GET /stores/{storeId}/management/{accountId}

Response (200)

{
    "name": "치킨집",
    "image": "d12k4j45-r23fdgfgs-23tregwer-2332r422.png",
    "description": "여기 맛집임",
    "categoryDescription": ["피자", "치킨"],
    "defaultEarningRate": 1.5,
    "storeBusinessHours": ["월 16:00~22:00", "월 23:00~24:00",  "화 00:00~04:00", "화 16:00~22:00"]  
}

카테고리 조회

GET /categories

Response (200)

[
    {
        "categoryCode": "CHK",
        "description": "치킨"
    }, 
    {
        "categoryCode": "CWE",
        "description": "예압"
    },
    ...
]

3km이내 모든 매장 검색

GET /stores

Response (200)

[
    {
        "storeId": 1,
        "name": "네네치킨",
        "image": "rw3205523-12wadsad-213sf234-234esdff32.png",
        "rating": 4.5,
        "categories" : [
            {
                "categoryCode": "CHK",
                "description": "치킨"
            }, 
            {
                "categoryCode": "CWE",
                "description": "예압"
            }
        ],
        "storeStatusCode": "OPN"
    }, 
    {
        "storeId": 2,
        "name": "윙치킨",
        "image": "rw3205523-12wadsad-213sf234-234esdff32.png",
        "rating": 3.5,
        "categories" : [
            {
                "categoryCode": "CHK",
                "description": "치킨"
            }
        ],
        "storeStatusCode": "CLS"
    },
    ...
]

특정 매장 메뉴 조회

GET /stores/{storeId}/menu

Response (200)

{
    "name": "윙치킨",
    "image": "rw3205523-12wadsad-213sf234-234esdff32.png",
    "rating": 3.5,
    "menu": [ 
        {
            "신메뉴": [
                {
                    "name": "불고기피자",
                    "price": 17000,
                    "description": "존맛탱피자",
                    "image": "rw3205523-12wadsad-213sf234-234esdff32.png",
                    "cookingTime": 23,
                    "earningRate": 1.5,
                    "isSoldOut": 0
                },
                {
                    "name": "하와이안피자",
                    "price": 19000,
                    "description": "어깨피자 허리피자",
                    "image": "12wadsad-rw3205523-213sf234-234esdff32.png",
                    "cookingTime": 12,
                    "earningRate": 1.0,
                    "isSoldOut": 1
                }
            ]
        },
        {
            "인기메뉴": [
                {
                    "name": "불고기피자",
                    "price": 17000,
                    "description": "존맛탱피자",
                    "image": "rw3205523-12wadsad-213sf234-234esdff32.png",
                    "cookingTime": 23,
                    "earningRate": 1.5,
                    "isSoldOut": 0
                },
                {
                    "name": "하와이안피자",
                    "price": 19000,
                    "description": "어깨피자 허리피자",
                    "image": "12wadsad-rw3205523-213sf234-234esdff32.png",
                    "cookingTime": 12,
                    "earningRate": 1.0,
                    "isSoldOut": 0
                }
            ]
        },
        ...
    ]
}

특정 매장 정보 조회

GET /stores/{storeId}/info

Response (200)

{
    "name": "윙치킨",
    "description": "피자가 맛있는 치킨집",
    "image": "rw3205523-12wadsad-213sf234-234esdff32.png",
    "rating": 3.5,
    "address": "광주광역시 ~~ 무슨무슨길 19",
    "phoneNumber": "354020001111",
    "businessLisenseNumber": "12352113124",
    "representativeName": "나사장"
}

특정 매장 리뷰 조회

GET /stores/{storeId}/reviews

Response (200)

{
    "name": "윙치킨",
    "image": "rw3205523-12wadsad-213sf234-234esdff32.png",
    "rating": 3.5,
    "reviews": [
        {
            "nickname": "투쩝원다노",
            "menu": "하와이안 피자, 불고기 피자",
            "contents": "꽤나 맛있음",
            "image": "234esdff32-12wadsad-213sf234-rw3205523.png",
            "rating": 4
        },
        {
            "nickname": "다노",
            "menu": "불고기 피자",
            "contents": "꽤나 맛없음",
            "image": "213sf234-12wadsad-213sf234-rw3205523.png",
            "rating": 1
        }
    ]
}
10kseok commented 1 year ago

https://docs.google.com/spreadsheets/d/1YlCS-fWBnQJK4sv7zS8kQDkIjJx6MhPvTHv_MZ7tQ30/edit#gid=0