프로젝트명
- Gourmate
프로젝트 인원
- 이소현, 김지수, 연제민, 이서영
1. API 명세서
도메인 | 기능 | Method | URL | 권한 | request | response | 추가 설명 |
유저 | 회원가입 | POST | /users/signup | ALL | { ”username”: “이름”, ”email”: “이메일”, ”password”: “비밀번호”, ”role”: “owner” } |
{ ”userId”: 1, ”username”: “이름”, ”email”: “이메일” ”role”: “owner” } |
|
유저 | 로그인 | POST | /users/login | ALL | { ”username”: “이름”, ”password”: “비밀번호” } |
{ ”accessToken”: “액세스 토큰”, ”refreshToken”: “리프레시 토큰” } |
|
유저 | 회원조회 | GET | /users/{userId} | ALL | - | { ”userId”: 1, ”username”: “이름”, ”email”: “이메일” ”role”: “owner” } |
|
유저 | 회원목록조회 | GET | /users?username=name&sortBy=createdAt&isAsc=true&page=1&size=10 | MANAGER | - | [ { ”userId”: 1, ”username”: “이름”, ”email”: “이메일” ”role”: “owner” }, … ] |
|
유저 | 회원정보수정 | PUT | /users/{userId} | ALL | { ”username”: “이름”, ”email”: “이메일”, ”password”: “비밀번호” ”role”: “owner” } |
{ ”userId”: 1, ”username”: “이름”, ”email”: “이메일” ”role”: “owner” } |
|
유저 | 회원탈퇴 | DELETE | /users/{userId} | ALL | - | - | |
유저 | 주소등록 | POST | /users/{userId}/addresses | CUSTOMER | { ”address”: “배송지” } |
{ ”addressId” 1, ”address”: “배송지” } |
|
유저 | 주소조회 | GET | /users/{userId}/addresses | CUSTOMER | - | { ”addressId” 1, ”address”: “배송지” } |
|
유저 | 주소수정 | PUT | /users/{userId}/addresses/{addressId} | CUSTOMER | { ”address”: “배송지” } |
{ ”addressId” 1, ”address”: “배송지” } |
|
유저 | 주소삭제 | DELETE | /users/{userId}/addresses/{addressId} | CUSTOMER | - | - | |
주문 | 주문등록 | POST | /orders | CUSTOMER | { ”address”: “배송지”, ”request”: “요청사항”, ”storeId”: 1, ”type”: “현장주문”, ”items”: [ { “menuId: 1, “quantity: 2, “price”: 100 }, … ] |
{ ”orderId”: 1, ”paymentId: 1, ”totalPrice”: 10000, ”address”: “배송지”, ”request”: “요청사항”, ”storeId”: 1, ”type”: “현장주문”, ”items”: [ { “menuId: 1, “quantity: 2 “price”: 100 }, … ] |
결제 요청 결과에 따른 상태값 - 결제 실패 - 결제 완료 |
주문 | 주문상세조회 | GET | /orders/{orderId} | ALL | - | { ”orderId”: 1, ”orderStatus”: “배달완료”, ”paymentId: 1, ”totalPrice”: 10000, ”address”: “배송지”, ”request”: “요청사항”, ”storeId”: 1, ”type”: “현장주문”, ”items”: [ { “menuId: 1, “quantity: 2 “price”: 100 }, … ] |
[질문] 목록에서 가져온걸사용해도 될것 같은데 어떤가요? |
주문 | 주문목록조회 | GET | /orders?query=query&sortBy=createdAt&isAsc=true&page=1&size=10 | ALL | - | “orderList”: [ { ”orderId”: 1, ”orderStatus”: “배달완료”, ”paymentId: 1, ”total_price”: 10000, ”address”: “배송지”, ”request”: “요청사항”, ”storeId”: 1, ”type”: “현장주문”, ”items”: [ { “menuId: 1, “quantity: 2 “price”: 100 }, … ], …, ], "pageable": {…} |
query: 메뉴이름, 가게이름 |
주문 | 주문취소 | PUT | /orders/{orderId} | ALL | - | - | 환불 요청 결과에 따른 상태값 - 환불 실패 - 환불 완료 가게에서 수락에 따른 상태값 - 주문 취소대기 - 주문 취소완료 |
주문 | 주문내역삭제 | DELETE | /orders/{orderId} | CUSTOMER, MANAGER | - | - | |
주문 | 결제요청 | POST | /orders/{orderId}/payments | CUSTOMER, MANAGER | - | { ”pg_info”: “~”, ”price”: 11111 } |
PG사 결제연동 |
주문 | 환불요청 | PUT | /orders/{orderId}/payments | CUSTOMER, MANAGER | - | - | PG사 결제연동 |
가게 | 가게등록 | POST | /stores | MANAGER | { "categoryId" : 1, "storeName" : "storeName”, "location" : "location” } |
{ ”storeId” : 1, "userId" : 1, "categoryId" : 1, "storeName" : "storeName”, "location" : "location”, ”averageRating” : null } |
|
가게 | 가게조회 | GET | /stores/{storeId} | ALL | - | { ”storeId” : 1, "userId" : 1, "categoryId" : 1, "storeName" : "storeName”, "location" : "location”, ”averageRating” : 4.8 } |
|
가게 | 가게목록조회 | GET | /stores?query=query&categoryId=1&sortBy=createdAt&isAsc=true&page=1&size=10 | ALL | - | "storeList": [ { "storeId" : 1, "categoryId" : 1, "name" : 1 }, { "storeId" : 1, "categoryId" : 1, "name" : 1 }, … ], "pageable": { … }, } |
query: 메뉴이름, 가게이름 |
가게 | 가게정보수정 | PUT | /stores/{storeId} | MANAGER | { "categoryId" : 1, "storeName" : "storeName", "location" : "location” } |
{ "storeId" : 1, "categoryId" : 1, "storeName" : "storeName”, "location" : "location” } |
|
가게 | 가게삭제 | DELETE | /stores/{storeId} | MANAGER | - | - | |
가게 | 리뷰조회 | GET | /stores/{storeId}/reviews?sortBy=createdAt&isAsc=true&page=1&size=10 | ALL | - | "reviewList": [ { "storeId” : 1, "reviewId” : 1, "rating" : 4, "content" : "content” }, { "storeId” : 1, "reviewId” : 2, "rating" : 4, "content" : "content” }, … ], "pageable": { … }, } |
|
상품 | 상품등록 | POST | /menu | OWNER | { "storeId” : 1, "menuName" : "menuName", "description" : "description”, "price" : 15000, ”isExcluded” : false } |
{ "storeId” : 1, "menuId” : 1, "menuName" : "menuName", "description" : "description”, "price" : 15000, ”isExcluded” : false } |
|
상품 | 상품상세조회 | GET | /menu/{menuId} | ALL | - | { "menuId” : 1, "menuName" : "menuName", "description" : "description”, "price" : 15000, ”isExcluded” : false } |
|
상품 | 상품목록조회 | GET | /menu | ALL | - | "menuList": [ { "menuId” : 1, "menuName" : "menuName", "price" : 15000 }, { "menuId” : 1, "menuName" : "menuName", "price" : 15000 }, … ] |
|
상품 | 상품정보수정 | PUT | /menu/{menuId} | OWNER | { "storeId” : 1, "menuName" : "menuName", "description" : "description”, "price" : 15000, "isExcluded" : true } |
{ "storeId” : 1, "menuId” : 1, "menuName" : "menuName", "description" : "description”, "price" : 15000, "isExcluded" : true } |
|
상품 | 상품삭제 | DELETE | /menu/{menuId} | OWNER | - | - | |
리뷰 | 리뷰등록 | POST | /reviews | CUSTOMER | { "ordeId” : 1, "storeId” : 1, "rating" : 4, "content" : "content” } |
{ "ordeId" : 1, "storeId" : 1, "reviewId" : 1, "rating" : 4, "content" : "content” } |
|
리뷰 | 리뷰조회 | GET | /reviews/{reviewId} | ALL | - | { "ordeId" : 1, "storeId" : 1, "reviewId" : 1, "rating" : 4, "content" : "content” } |
|
리뷰 | 리뷰목록조회 | GET | /reviews | CUSTOMER | - | “reviewList”: [ { "ordeId" : 1, "storeId" : 1, "reviewId" : 1, "rating" : 4, "content" : "content” }, … ] |
|
리뷰 | 리뷰수정 | PUT | /reviews/{reviewId} | CUSTOMER | { "ordeId” : 1, "storeId” : 1, "rating" : 4, "content" : "content” } |
{ "ordeId" : 1, "storeId" : 1, "reviewId" : 1, "rating" : 4, "content" : "content” } |
|
리뷰 | 리뷰삭제 | DELETE | /reviews/{reviewId} | CUSTOMER | - | - | |
카테고리 | 카테고리생성 | POST | /categories | MANAGER | { "categoryName" : "한식” } |
{ "categoryId" : 1, "categoryName" : "한식” } |
|
카테고리 | 카테고리목록조회 | GET | /categories | ALL | - | "categoryList": [ { "categoryId" : 1, "categoryName" : "한식" }, { "categoryId" : 2, "categoryName" : "중식" }, … ] |
|
카테고리 | 카테고리수정 | PUT | /categories/{categoryId} | MANAGER | { "content" : "치킨" } |
{ "categoryId" : 2, "categoryName" : "치킨" } |
|
카테고리 | 카테고리삭제 | DELETE | /categories/{categoryId} | MANAGER | - | - | |
AI_API | ai 요청 | POST | /ai-api | MANAGER, OWNER | { "text" : "~~50자 이내로 추천해줘" } |
{ "text" : "" } |
2. 테이블 명세서
1. 사용자 테이블(p_users)
필드 이름 | 데이터 타입 | NULL | 설명 |
user_id | bigint | NOT NULL | 사용자 ID, PK |
username | VARCHAR | NOT NULL | 사용자 이름 |
password | VARCHAR | NOT NULL | 비밀번호 |
VARCHAR | NOT NULL | 이메일 | |
role | VARCHAR | NOT NULL | 사용자 역할 (CUSTOMER, OWNER, MANAGER, MASTER) |
created_at | TIMESTAMP | 생성 시간 | |
created_by | bigint | 생성자 | |
updated_at | TIMESTAMP | 수정 시간 | |
updated_by | bigint | 수정자 | |
deleted_at | TIMESTAMP | 삭제 시간 | |
deleted_by | bigint | 삭제자 |
2. 가게 테이블(p_stores)
필드 이름 | 데이터 타입 | NULL | 설명 |
store_id | UUID | NOT NULL | 가게 ID, PK |
user_id | bigint | NOT NULL | 사용자 ID, FK |
category_id | UUID | NOT NULL | 카테고리 ID, FK |
store_name | VARCHAR | NOT NULL | 가게 이름 |
location | VARCHAR | 지역 | |
average_rating | DECIMAL | 평점 | |
created_at | TIMESTAMP | 생성 시간 | |
created_by | bigint | 생성자 | |
updated_at | TIMESTAMP | 수정 시간 | |
updated_by | bigint | 수정자 | |
deleted_at | TIMESTAMP | 삭제 시간 | |
deleted_by | bigint | 삭제자 |
3. 주소 테이블(p_addresses)
필드 이름 | 데이터 타입 | NULL | 설명 |
address_id | UUID | NOT NULL | 주소 ID, PK |
user_id | bigint | NOT NULL | 사용자 ID, FK |
address | VARCHAR | NOT NULL | 주소 |
address_request | VARCHAR | 요청사항 | |
created_at | TIMESTAMP | 생성 시간 | |
created_by | bigint | 생성자 | |
updated_at | TIMESTAMP | 수정 시간 | |
updated_by | bigint | 수정자 | |
deleted_at | TIMESTAMP | 삭제 시간 | |
deleted_by | bigint | 삭제자 |
4. 리뷰 테이블(p_reviews)
필드 이름 | 데이터 타입 | NULL | 설명 |
review_id | UUID | NOT NULL | 리뷰 ID, PK |
user_id | bigint | NOT NULL | 사용자 ID, FK |
order_id | UUID | NOT NULL | 주문 ID, FK |
store_id | UUID | NOT NULL | 가게 ID, FK |
rating | INT | NOT NULL | 별점 |
review_content | TEXT | 리뷰 내용 | |
created_at | TIMESTAMP | 생성 시간 | |
created_by | bigint | 생성자 | |
updated_at | TIMESTAMP | 수정 시간 | |
updated_by | bigint | 수정자 | |
deleted_at | TIMESTAMP | 삭제 시간 | |
deleted_by | bigint | 삭제자 |
5. 카테고리 테이블(p_categories)
필드 이름 | 데이터 타입 | NULL | 설명 |
category_id | UUID | NOT NULL | 카테고리 ID, PK |
category_name | VARCHAR(100) | NOT NULL | 카테고리 이름 |
created_at | TIMESTAMP | 생성 시간 | |
created_by | bigint | 생성자 | |
updated_at | TIMESTAMP | 수정 시간 | |
updated_by | bigint | 수정자 | |
deleted_at | TIMESTAMP | 삭제 시간 | |
deleted_by | bigint | 삭제자 |
6. 메뉴 테이블(p_menu)
필드 이름 | 데이터 타입 | NULL 여부 | 설명 |
menu_id | UUID | NOT NULL | 메뉴 id, PK |
store_id | UUID | NOT NULL | 가게 id, FK |
menu_name | VARCHAR(20) | NOT NULL | 메뉴 이름 |
description | VARCHAR(255) | 메뉴 설명 | |
price | int | NOT NULL | 메뉴 가격 |
is_excluded | BOOLEAN | NOT NULL | 메뉴 숨김 여부, false |
created_at | TIMESTAMP | 생성 시간 | |
created_by | bigint | 생성 아이디 | |
updated_at | TIMESTAMP | 수정 시간 | |
updated_by | bigint | 수정 아이디 | |
deleted_at | TIMESTAMP | 삭제 시간 | |
deleted_by | bigint | 삭제 아이디 |
7. 주문 테이블(p_orders)
필드 이름 | 데이터 타입 | NULL | 설명 |
order_id | UUID | NOT NULL | 주문 id, PK |
user_id | bigint | NOT NULL | 사용자 id, FK |
store_id | UUID | NOT NULL | 가게 id, FK |
address | VARCHAR(255) | NOT NULL | 배송지 |
order_request | VARCHAR(255) | NOT NULL | 요청 사항 |
order_type | VARCHAR(20) | NOT NULL | 주문 유형 (ONLINE, OFFLINE) |
order_status | VARCHAR(20) | NOT NULL | 주문 상태 (PENDING, CONFIRMED, CANCELLED) |
total_price | int | NOT NULL | 총 가격 |
created_at | TIMESTAMP | 생성일 | |
created_by | bigint | 생성 아이디 | |
updated_at | TIMESTAMP | 수정일 | |
updated_by | bigint | 수정 아이디 | |
deleted_at | TIMESTAMP | 삭제일 | |
deleted_by | bigint | 삭제 아이디 |
8. 주문항목 테이블(p_order_items)
필드 이름 | 데이터 타입 | NULL | 설명 |
order_item_id | UUID | NOT NULL | 주문 항목 id, PK |
order_id | UUID | NOT NULL | 주문 id, FK |
menu_id | UUID | NOT NULL | 메뉴 id, FK |
quantity | int | NOT NULL | 주문 수량 |
created_at | TIMESTAMP | 생성일 | |
created_by | bigint | 생성 아이디 | |
updated_at | TIMESTAMP | 수정일 | |
updated_by | bigint | 수정 아이디 | |
deleted_at | TIMESTAMP | 삭제일 | |
deleted_by | bigint | 삭제 아이디 |
9. 결제 테이블(p_payments)
필드 이름 | 데이터 타입 | NULL | 설명 |
payment_id | UUID | NOT NULL | 결제 id, PK |
order_id | UUID | NOT NULL | 주문 id, FK |
amount | int | NOT NULL | 결제 금액 |
payment_status | VARCHAR(20) | NOT NULL | 결제 상태 (SUCCESS, FAIL) |
pg_info | VARCHAR(20) | NOT NULL | PG사 결제내역 |
created_at | TIMESTAMP | 생성일 | |
created_by | bigint | 생성 아이디 |
10. AI 테이블(p_ai_api)
필드 이름 | 데이터 타입 | NULL | 설명 |
ai_api_id | UUID | NOT NULL | api 요청 id, PK |
user_id | bigint | NOT NULL | 사용자 id, FK |
response | VARCHAR(255) | NOT NULL | 대답 |
created_at | TIMESTAMP | 생성일 | |
created_by | bigint | 생성 아이디 |
3. ERD 명세서
4. 인프라 설계서