Ch.1 AI 활용 비즈니스 프로젝트

반응형
반응형

국비지원 첫 팀 프로젝트

팀원: 박용훈, 김대연, 김수현, 백승규

 

API 명세서 | Notion

Made with Notion, the all-in-one connected workspace with publishing capabilities.

teamsparta.notion.site

 

기능 설명 컨트롤러 권한 Http 메서드 Path header Request Response 담당자 텍스트
1. 사용자(User) API 1.1 회원가입 auth-controller ALL POST /api/users/register   {
"username": "john_doe",
"email": "mailto:john@example.com",
"password": "securepassword",
"name": "John Doe",
"phone": "01012345678",
"role": "CUSTOMER"
}
{
"id": 1,
"username": "john_doe",
"email": "mailto:john@example.com",
"name": "John Doe",
"phone": "01012345678",
"role": "CUSTOMER",
"created_at": "2025-02-12T12:00:00Z"
}
   
1. 사용자(User) API 1.2 로그인 auth-controller ALL POST /api/users/login   {
"userId": "mailto:john@example.com",
"password": "securepassword"
}
{
"token": "jwt-token"
}
   
1. 사용자(User) API 1.3 로그아웃 user-controller ALL POST /api/users/logout Authorization: Bearer {token}   {
"success”: true
}
   
1. 사용자(User) API 1.4 내정보 조회 user-controller CUSTOMER, OWNER GET /api/users/me Authorization: Bearer {token}   {
"id": 1,
"username": "john_doe",
"email": "mailto:john@example.com",
"name": "John Doe",
"phone": "01012345678",
"role": "CUSTOMER",
"created_at": "2025-02-12T12:00:00Z"
}
   
1. 사용자(User) API 1.5 내 정보 수정 user-controller CUSTOMER, OWNER PUT /api/users/me Authorization: Bearer {token} {
"name": "John Updated",
"phone": "01087654321"
}
{
"id": 1,
"username": "john_doe",
"email": "mailto:john@example.com",
"name": "John Updated",
"phone": "01087654321",
"updated_at": "2025-02-12T14:00:00Z"
}
   
1. 사용자(User) API 1.6 사용자 탈퇴 user-controller CUSTOMER, OWNER DELETE /api/users/me Authorization: Bearer {token}

{
"message": "계정이 삭제되었습니다."
}
   
1. 사용자(User) API 1.7 비밀번호 변경 API user-controller CUSTOMER, OWNER POST /api/users/me/password Authorization: Bearer {token} {
"user_id": 1,
"current_password": "oldpassword123",
"new_password": "newpassword456"
}
{
"message": "비밀번호가 성공적으로 변경되었습니다."
}

   
1. 사용자(User) API 1.8 사용자 목록 조회 admin-controller MASTER GET /api/admin/users Authorization: Bearer {token}   {
  "total_count": 120,
  "page": 1,
  "size": 10,
  "users": [
    {
      "id": 1,
      "username": "john_doe",
      "email": "john@example.com",
      "role": "CUSTOMER",
      "created_at": "2025-02-12T12:00:00Z"
    }
  ]
}
   
1. 사용자(User) API 1.8 특정 사용자 상세 조회 admin-controller MASTER GET /api/admin/users/{user_id} Authorization: Bearer {token}

  { "id": 1, "username": "admin", "email": "admin@example.com", "role": "MASTER" }    
1. 사용자(User) API 1.9 특정 사용자 강제 탈퇴 admin-controller MASTER DELETE /api/admin/users/{user_id} Authorization: Bearer {token}

  { "message": "사용자가 삭제되었습니다." }    
1. 사용자(User) API 2.0 사용자 권한 변경 admin-controller MASTER PATCH /api/users/{userId}/role Authorization: Bearer {token} {
"role": "OWNER"
}
{
"message": "User role updated successfully",
"userId": 12345,
"newRole": "OWNER"
}
   
2. 배송지(Address) API 2.1 배송지 추가 delivery-controller CUSTOMER POST /api/users/addresses Authorization: Bearer {token} {
"address_name": "집",
"recipient_name": "John Doe",
"address": "서울특별시 강남구 역삼동",
"zip_code": "06123",
"is_default": true
}
{
"id": "uuid",
"user_id": 1,
"address_name": "집",
"recipient_name": "John Doe",
"address": "서울특별시 강남구 역삼동",
"zip_code": "06123",
"is_default": true,
"created_at": "2025-02-12T12:34:56Z"
}
   
2. 배송지(Address) API 2.2 배송지 조회 delivery-controller CUSTOMER GET /api/users/addresses Authorization: Bearer {token}   [
{
"id": "uuid",
"address_name": "집",
"recipient_name": "John Doe",
"address": "서울특별시 강남구 역삼동",
"zip_code": "06123",
"is_default": true
}
]
   
2. 배송지(Address) API 2.3 배송지 정보 수정 delivery-controller CUSTOMER PUT /api/users/addresses/{userId} Authorization: Bearer {token} {
"address_name": "집",
"recipient_name": "Jane Doe",
"address": "서울특별시 강남구 삼성동",
"zip_code": "06233",
"is_default": false
}
{
"id": "uuid",
"address_name": "집",
"recipient_name": "Jane Doe",
"address": "서울특별시 강남구 삼성동",
"zip_code": "06233",
"is_default": false
}
   
2. 배송지(Address) API 2.4 배송지 삭제 delivery-controller CUSTOMER DELETE /api/users/addresses/{userId} Authorization: Bearer {token}   {
"id": "uuid",
"is_default": true
}
   
3. 매장(Store) API 3.1 매장 등록 요청 store-controller OWNER POST /api/stores Authorization: Bearer {token} {
"name": "맛있는 치킨",
"location_category_id": "uuid",
"address": "서울 강남구",
"phone": "0212345678",
"image_url": "https://example.com/image.jpg"
}
{
"id": "uuid",
"name": "맛있는 치킨",
"address": "서울 강남구",
"phone": "0212345678",
"image_url": "https://example.com/image.jpg",
"status": "PENDING",
"message": "매장 등록 요청이 접수되었습니다."
}
  매장 등록 플로우 관련해서 질문(튜터)
3. 매장(Store) API 3.2 전체 매장 목록 조회(사용자용) store-controller ALL GET /api/stores Authorization: Bearer {token}   [
 {
  "id": "uuid",
  "name": "맛있는 치킨",
  "address": "서울 강남구",
  "phone": "0212345678",
  "image_url":       "https://example.com/image.jpg",
  "status": "OPEN"
 }
]
  - 폐업은 조회 불가능( customer일경우)
3. 매장(Store) API 3.3 매장 상세 조회 store-controller ALL GET /api/stores/{store_id}     {
"id": "uuid",
"name": "맛있는 치킨",
"address": "서울 강남구",
"phone": "0212345678",
"image_url": "https://example.com/image.jpg",
"status": "OPEN",
"menus": [
{
"id": "uuid",
"name": "후라이드 치킨",
"price": 18000,
"description": "바삭하고 맛있는 후라이드 치킨",
"is_hidden": false
},
{
"id": "uuid",
"name": "양념 치킨",
"price": 19000,
"description": "매콤달콤한 양념 치킨",
"is_hidden": false
}
],
"reviews": [
{
"id": "uuid",
"user_id": 1,
"rating": 5,
"comment": "너무 맛있어요!",
"created_at": "2025-02-12T12:34:56Z"
},
{
"id": "uuid",
"user_id": 2,
"rating": 4,
"comment": "양념이 살짝 부족했어요.",
"created_at": "2025-02-10T14:20:30Z"
}
]
}
   
3. 매장(Store) API 3.4 매장 삭제 요청( 점주) store-controller OWNER DELETE /api/stores/{store_id}

Authorization: Bearer {token}

  {
"id": "uuid",
"status": "DELETION_REQUESTED",
"message": "매장 삭제 요청이 접수되었습니다."
}

   
3. 매장(Store) API 3.5 매장 정보 수정 요청(업주용) store-controller OWNER POST /api/stores/{store_id} Authorization: Bearer {token} {
"name": "새로운 치킨집",
"address": "서울 서초구",
"phone": "0212345679",
"image_url": "https://example.com/new_image.jpg"
}
{
"id": "uuid",
"status": "UPDATE_REQUESTED",
"message": "매장 정보 수정 요청이 접수되었습니다."
}

   
3. 매장(Store) API 3.6 전체 매장 목록 조회((관리자용) admin-controller MASTER GET /api/admin/stores Authorization: Bearer {token}   [
{
"id": "uuid",
"name": "매장1",
"status": "PENDING"
},
{
"id": "uuid",
"name": "매장2",
"status": "OPEN"
}
]
   
3. 매장(Store) API 3.7 특정 매장 강제 삭제(관리자) admin-controller MASTER DELETE /api/admin/stores/{store_id} Authorization: Bearer {token}   { "message": "매장이 강제 삭제되었습니다." }    
3. 매장(Store) API 3.8 매장 등록 ,삭제승인(관리자용) admin-controller MASTER PUT /api/admin/stores/{store_id}/approve Authorization: Bearer {token}   {
"id": "uuid",
"status": "OPEN",
"message": "승인되었습니다."
}|



  - 폐업된 매장까지 모두
3. 매장(Store) API 3.9 매장 정보 수정 (관리자용) admin-controller MASTER PUT /api/admin/stores/{store_id}/update Authorization: Bearer {token}   {
"id": "uuid",
"status": "UPDATED",
"message": "매장 정보 수정이 승인되었습니다."
}

   
3. 매장(Store) API 3.10 매장 정보 등록(관리자용) admin-controller MASTER POST /api/stores          
4. 주문(Order) API 4.1 주문 생성 요청 order-controller CUSTOMER, MANAGER, OWNER POST /api/orders Authorization: Bearer {token} {
"store_id": "uuid",
"address_id": "uuid",
"total_price": 25000,
"description": "문 앞에 두고 가주세요."
}
{
"id": "uuid",
"status": "PENDING",
"total_price": 25000,
"description": "문 앞에 두고 가주세요.",
"message": "주문이 접수되었습니다. 점주가 주문을 확인할 때까지 기다려주세요."
}
  주문 유형: 온라인 주문과 대면 주문(가게에서 직접 주문) 모두 지원
대면 주문 처리: 가게 사장님이 직접 대면 주문을 접수





4. 주문(Order) API 4.2 주문 접수 (점주) order-controller MANAGER, OWNER PUT /api/orders/{order_id}/accept Authorization: Bearer {token}   {
"id": "uuid",
"status": "CONFIRMED",
”order_type” : “DELIVERY”
"message": "주문이 접수되었습니다. 조리가 시작됩니다."
}

   
4. 주문(Order) API 4.3 주문 상태 변경 (점주) order-controller MANAGER, OWNER PUT /api/orders/{order_id}/status Authorization: Bearer {token} {
"status": "DELIVERING"
}

{
"id": "uuid",
"status": "DELIVERING",
”order_type” : “DELIVERY”
"message": "주문이 배달 중입니다."
}
{
"id": "uuid",
"status": "COMPLETED",
”order_type” : “TAKEOUT”
"message": "포장주문이 완료되었습니다."
}

   
4. 주문(Order) API 4.4 주문 목록 조회(사용자용) order-controller CUSTOMER GET /api/orders/{userId} Authorization: Bearer {token}   [
{
"id": "uuid",
"store_id": "uuid",
"status": "PENDING",
"total_price": 25000,
"ordered_at": "2025-02-12T12:34:56Z"
},
{
"id": "uuid",
"store_id": "uuid",
"status": "COMPLETED",
"total_price": 18000,
"ordered_at": "2025-02-10T15:20:00Z"
}
]
   
4. 주문(Order) API 4.5 주문 목록 조회( 업주용) order-controller MANAGER, OWNER GET /api/orders/{storeId} Authorization: Bearer {token}   [
{
"id": "uuid",
"store_id": "uuid",
"status": "PENDING",
"total_price": 25000,
"ordered_at": "2025-02-12T12:34:56Z"
},
{
"id": "uuid",
"store_id": "uuid",
"status": "CONFIRMED",
"total_price": 18000,
"ordered_at": "2025-02-10T15:20:00Z"
}
]
   
4. 주문(Order) API 4.6  주문 상세 조회
- 고객: 본인이 주문한 내역만 조회 가능
- 점주: 자신의 매장에 들어온 주문만 조회 가능
- 관리자: 모든 주문 조회 가능
order-controller ALL GET /api/orders/{orderId} Authorization: Bearer {token}   {
"id": "uuid",
"user_id": 1,
"store_id": "uuid",
"store_name": "맛있는 치킨",
"user_name": "김철수",
"status": "PENDING",
"total_price": 25000,
"description": "문 앞에 두고 가주세요.",
"ordered_at": "2025-02-12T12:34:56Z",
"items": [
{
"menu_id": "uuid",
"menu_name": "후라이드 치킨",
"quantity": 1,
"price": 18000
},
{
"menu_id": "uuid",
"menu_name": "콜라 1.25L",
"quantity": 1,
"price": 2500
}
],
"payment": {
"payment_id": "uuid",
"amount": 25000,
"method": "KAKAO_PAY",
"status": "PAID"
}
}
   
4. 주문(Order) API 4.7 주문 취소 요청 (고객 & 점주)
* 제약사항: 
주문 상태가 PENDING일 때만 가능
order-controller CUSTOMER, MANAGER, OWNER PUT /api/orders/{order_id}/cancel Authorization: Bearer {token}   {
"id": "uuid",
"order_status": "CANCELLED",
"payment_status": "REFUNDED",
"message": "주문이 취소되고 결제가 환불되었습니다."
}



  주문 취소: 주문 생성 후 5분 이내에만 취소 가능하도록 제한
4. 주문(Order) API 4.8 전체 주문 목록 조회(관리자용) admin-controller MASTER GET /api/admin/orders Authorization: Bearer {token}   [
{
"id": "uuid",
"status": "PENDING"
},
{
"id": "uuid",
"status": "COMPLETED"
}
]

   
4. 주문(Order) API 4.9 주문 상태 강제 변경 (관리자) admin-controller MASTER PUT /api/admin/orders/{order_id}/status Authorization: Bearer {token}   { "message": "주문 상태가 변경되었습니다." }    
5. 결제(Payment) API 5.1 결제 요청 order-controller CUSTOMER POST /api/payments Authorization: Bearer {token} {
"order_id": "uuid",
"amount": 25000,
"method": "KAKAO_PAY"
}
{
"id": "uuid",
"status": "PENDING",
"amount": 25000,
"method": "KAKAO_PAY"
}
  주문과 별개로 결제가 필요한 순간이 있는가?(튜터)


1. 결제 API 자체는 필요없을 수 있다.2. 다만, 주문 API 호출 시에 결제 이력 테이블에 데이터가 저장되어야 함.3. 결제 수단을 관리하는 API가 있어야 할 수도 있음.
5. 결제(Payment) API 5.2  환불 요청


* 제약사항: 
주문 상태가 CONFIRMED 또는 COMPLETED일 때만 가능
order-controller CUSTOMER PUT /api/orders/{order_id}/refund Authorization: Bearer {token}   {
"id": "uuid",
"order_status": "REFUNDED",
"payment_status": "REFUNDED",
"message": "주문이 환불 요청되었습니다."
}

   
5. 결제(Payment) API 5.3 결제 취소 (결제만 취소)
(예: 시스템 오류, 잘못된 결제 등)
* 제약사항: 
결제 상태가 PAID일 때만 가능
order-controller CUSTOMER PUT /api/payments/{payment_id}/cancel Authorization: Bearer {token}

  {
"id": "uuid",
"payment_status": "CANCELLED",
"message": "결제 취소요청되었습니다."
}

   
5. 결제(Payment) API 5.4 전체 결제 목록 조회 admin-controller MASTER GET /api/admin/payments Authorization: Bearer {token}

  [{ "id": "uuid", "status": "PAID" }, {...}]    
5. 결제(Payment) API 5.5 특정 결제 상세 조회 admin-controller MASTER GET /api/admin/payments/{payment_id} Authorization: Bearer {token}

  { "id": "uuid", "status": "PAID", "amount": 25000 }    
5. 결제(Payment) API 5.6 사용자 환불 요청 승인(관리자) admin-controller MASTER PUT /api/admin/payments/{payment_id}/refund Authorization: Bearer {token}

{ "status": "REFUNDED" } { "message": “ 환불처리 승인하였습니다." }    
6. 리뷰(Review) API 6.1 리뷰 작성 review-controller CUSTOMER POST /api/reviews Authorization: Bearer {token} {
"order_id": "uuid",
"store_id": "uuid",
"rating": 5,
"comment": "맛있어요!"
}
{
"id": "uuid",
"rating": 5,
"comment": "맛있어요!"
}
   
6. 리뷰(Review) API 6.2 매장 리뷰 조회 review-controller ALL GET /api/reviews?store_id=uuid Authorization: Bearer {token}   [
{
"id": "uuid",
"rating": 5,
"comment": "맛있어요!"
}
]
   
6. 리뷰(Review) API 6.3 사용자 리뷰 조회 review-controller CUSTOMER GET /api/reviews?user_id=uuid Authorization: Bearer {token}   [
{
"id": "uuid",
"rating": 5,
"comment": "맛있어요!"
}
]
   
6. 리뷰(Review) API 6.4 리뷰 수정 review-controller CUSTOMER PUT /api/reviews/{review_id} Authorization: Bearer {token} {
"order_id": "uuid",
"store_id": "uuid",
"rating": 5,
"comment": "맛있어요!"
}
{
"id": "uuid",
"rating": 5,
"comment": "맛있어요!"
}
   
6. 리뷰(Review) API 6.5 리뷰 삭제(사용자용) review-controller CUSTOMER DELETE /api/reviews/{review_id} Authorization: Bearer {token}   { "message": "리뷰가 삭제되었습니다." }    
6. 리뷰(Review) API 6.6 전체 리뷰 목록 조회 admin-controller MASTER GET /api/admin/reviews Authorization: Bearer {token}   [{ "id": "uuid", "rating": 5, "comment": "맛있어요!" }, {...}]    
6. 리뷰(Review) API 6.7 특정 리뷰 삭제 admin-controller MASTER DELETE /api/admin/reviews/{review_id} Authorization: Bearer {token}   { "message": "리뷰가 삭제되었습니다." }    
7. 메뉴(Menu) API 7.1 메뉴 등록 menu-controller MANAGER, OWNER POST /api/menus Authorization: Bearer {token} {
"store_id": "uuid",
"name": "후라이드 치킨",
"price": 18000,
"description": "바삭하고 맛있는 후라이드 치킨",
"is_hidden": false
}
{
"id": "uuid",
"store_id": "uuid",
"name": "후라이드 치킨",
"price": 18000,
"description": "바삭하고 맛있는 후라이드 치킨",
"is_hidden": false
}
   
7. 메뉴(Menu) API 7.2 특정 매장의 메뉴 목록 조회 menu-controller MANAGER, OWNER GET /api/menus?store_id=uuid     [
{
"id": "uuid",
"name": "후라이드 치킨",
"price": 18000,
"description": "바삭하고 맛있는 후라이드 치킨",
"is_hidden": false
},
{
"id": "uuid",
"name": "양념 치킨",
"price": 19000,
"description": "매콤달콤한 양념 치킨",
"is_hidden": false
}
]
   
7. 메뉴(Menu) API 7.3 메뉴 상세 조회 menu-controller MANAGER, OWNER GET /api/menus/{menu_id}     {
"id": "uuid",
"store_id": "uuid",
"name": "후라이드 치킨",
"price": 18000,
"description": "바삭하고 맛있는 후라이드 치킨",
"is_hidden": false
}
   
7. 메뉴(Menu) API 7.4 메뉴 수정 menu-controller MANAGER, OWNER PUT /api/menus/{menu_id} Authorization: Bearer {token} {
"name": "크리스피 치킨",
"price": 18500,
"description": "더 바삭한 크리스피 치킨",
"is_hidden": false
}
{
"id": "uuid",
"store_id": "uuid",
"name": "크리스피 치킨",
"price": 18500,
"description": "더 바삭한 크리스피 치킨",
"is_hidden": false
}
   
7. 메뉴(Menu) API 7.5 메뉴 삭제 menu-controller MANAGER, OWNER DELETE  /api/menus/{menu_id} Authorization: Bearer {token}   {
"message": "메뉴가 삭제되었습니다."
}
   
8. 메뉴 옵션(Menu Option) API 8.1 메뉴 옵션 추가 menu-controller MANAGER, OWNER POST /api/menus/{menu_id}/options Header
Authorization: Bearer {token}
{
"name": "엑스트라 치즈",
"price": 2000
}
{
"id": "uuid",
"menu_id": "uuid",
"name": "엑스트라 치즈",
"price": 2000
}
   
8. 메뉴 옵션(Menu Option) API 8.2 메뉴 옵션 조회 menu-controller MANAGER, OWNER GET /api/menus/{menu_id}/options     [
{
"id": "uuid",
"name": "엑스트라 치즈",
"price": 2000
},
{
"id": "uuid",
"name": "L 사이즈",
"price": 3000
}
]
   
8. 메뉴 옵션(Menu Option) API 8.3 메뉴 옵션 수정 menu-controller MANAGER, OWNER PUT /api/menus/options/{option_id} Header
Authorization: Bearer {token}
{
"name": "치즈 추가",
"price": 2500
}
{
"id": "uuid",
"menu_id": "uuid",
"name": "치즈 추가",
"price": 2500
}
   
8. 메뉴 옵션(Menu Option) API 8.4 메뉴 옵션 삭제 menu-controller MANAGER, OWNER DELETE /api/menus/options/{option_id} Header
Authorization: Bearer {token}
  {
"message": "메뉴 옵션이 삭제되었습니다."
}

   
9. AI 질의응답(AI Interaction) API 9.1 AI 질의 생성 ai-controller MANAGER, OWNER POST /api/ai/interactions Header
Authorization: Bearer {token}
{
"query_text": "후라이드 치킨에 대한 자세한 설명을 생성해줘"
}

{
"id": "uuid",
"user_id": 1,
"query_text": "후라이드 치킨에 대한 자세한 설명을 생성해줘",
"response_text": "후라이드 치킨은 바삭한 튀김옷과 부드러운 속살이 조화를 이루는 인기 메뉴입니다.",
"created_at": "2025-02-12T12:34:56Z"
}
   
9. AI 질의응답(AI Interaction) API 9.2 AI 질의 목록 조회 ai-controller MANAGER, OWNER GET /api/ai/interactions Header
Authorization: Bearer {token}

  [
{
"id": "uuid",
"user_id": 1,
"query_text": "후라이드 치킨에 대한 자세한 설명을 생성해줘",
"response_text": "후라이드 치킨은 바삭한 튀김옷과 부드러운 속살이 조화를 이루는 인기 메뉴입니다.",
"created_at": "2025-02-12T12:34:56Z"
},
{
"id": "uuid",
"user_id": 1,
"query_text": "양념 치킨과 후라이드 치킨의 차이점은?",
"response_text": "양념 치킨은 매콤달콤한 소스를 입힌 반면, 후라이드 치킨은 튀김옷의 바삭함이 특징입니다.",
"created_at": "2025-02-10T14:20:30Z"
}
]
   
9. AI 질의응답(AI Interaction) API 9.3 특정 AI 질의 상세 조회 ai-controller MANAGER, OWNER GET /api/ai/interactions/{interaction_id} Header
Authorization: Bearer {token}

  {
"id": "uuid",
"user_id": 1,
"query_text": "후라이드 치킨에 대한 자세한 설명을 생성해줘",
"response_text": "후라이드 치킨은 바삭한 튀김옷과 부드러운 속살이 조화를 이루는 인기 메뉴입니다.",
"created_at": "2025-02-12T12:34:56Z"
}
   
9. AI 질의응답(AI Interaction) API 9.4 특정 AI 질의 삭제 ai-controller MANAGER, OWNER DELETE /api/ai/interactions/{interaction_id} Header
Authorization: Bearer {token}
  {
"message": "AI 질의 기록이 삭제되었습니다."
}
   
                     
                     
                     
 

테이블 명세서 | Notion

1. p_users 테이블 필드 정의

teamsparta.notion.site

(마크다운이 정상적으로 복붙이 되지 않아 링크로 대체합니다.)

테이블 명세서

1. p_users 테이블 필드 정의

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

user_id 🗝️ INTEGER   기본 키, 자동 증가 ID
userid VARCHAR(255)     로그인 ID (고유)
email VARCHAR(255)     이메일 주소
password VARCHAR(255)     해시된 비밀번호
name VARCHAR(100)     사용자 실명
phone VARCHAR(20)     고유한 핸드폰 번호
role VARCHAR(50)     사용자 역할‘CUSTOMER’, ‘OWNER’, ‘MANAGER’, ‘MASTER’
created_at TIMESTAMP     생성 일시
created_by VARCHAR(100)     생성자
updated_at TIMESTAMP     수정 일시
updated_by VARCHAR(100)     수정자
deleted_at TIMESTAMP     삭제 일시
deleted_by VARCHAR(100)     삭제자
Table p_users {
    id INTEGER [primary key, increment] // PK (자동 증가 ID)
    username VARCHAR(255) [unique, not null] // name
    email VARCHAR(255) [unique, not null] // 이메일 (로그인 ID)
    password VARCHAR(255) [not null] // 암호 (해싱 저장)
    name VARCHAR(100) [not null] // 사용자 이름
    phone VARCHAR(20) [unique, not null] // 휴대폰 번호
    role VARCHAR(50) [not null, note: "CUSTOMER, OWNER, MANAGER, MASTER"] // 역할 구분 (고객, 점주, 관리자)
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_users (사용자) 테이블 관계도 요약

  • p_user_addresses (배송지 정보): 1:N 관계 (사용자는 여러 개의 배송지를 가질 수 있음)
  • p_orders (주문): 1:N 관계 (사용자는 여러 개의 주문을 할 수 있음)
  • p_stores (매장): 1:N 관계 (점주는 여러 개의 매장을 소유할 수 있음)
  • p_reviews (리뷰): 1:N 관계 (사용자는 여러 개의 리뷰를 작성할 수 있음)
  • p_ai_interactions (AI 질의응답 기록): 1:N 관계 (사용자는 여러 개의 AI 상호작용을 할 수 있음)
  • p_payments (결제): 1:N 관계 (사용자는 여러 개의 결제를 수행할 수 있음)

2. p_user_addresses 테이블 필드 정의

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   배송지 ID (PK)
user_id INTEGER     배송지 소유자 ID (FK)
address_name VARCHAR(255)       주소명 (예: “집”, “회사”, “친구 집”)
recipient_name VARCHAR(100)       수령인 이름
address VARCHAR(255)       상세 주소
zip_code VARCHAR(10)       우편번호
is_default BOOLEAN       ✅ (기본값 false) 기본 배송지 여부 (true이면 기본 설정)
created_at TIMESTAMP       배송지 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자

 

  • p_users (사용자 테이블): 1:N 관계 (각 사용자는 여러 개의 배송지를 가질 수 있음)
  • p_orders (주문 테이블): 1:N 관계 (각 주문은 특정 배송지를 참조할 수 있음)

3. p_location_categories (지역 카테고리) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   지역 카테고리 ID (PK)
type VARCHAR(255)     지역 타입 (예: 시, 구, 동)
name VARCHAR(255)     지역 이름 (예: 서울, 강남구)
parent_id UUID   ✅ (자기참조)   부모 지역 ID (최상위 지역은 NULL)
created_at TIMESTAMP       지역 카테고리 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
// 지역 카테고리 (지역 계층 구조를 위한 테이블, 예: 서울 > 강남구)
Table p_location_categories {
    id UUID [primary key, default: "uuid_generate_v4()"] // PK
    type VARCHAR(255) [unique, not null] // 지역 타입 (예: 시,구,동)
    name VARCHAR(255) [unique, not null] // 지역 이름 (예: 서울, 강남구)
    parent_id UUID [ref: > p_location_categories.id] // 부모 지역 FK (NULL 가능, 최상위 지역)
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_location_categories (지역 카테고리) 테이블 관계도 요약

  • p_location_categories (자기참조): 1:N 관계 (각 지역은 하위 지역을 가질 수 있음)
  • p_stores (매장): 1:N 관계 (각 매장은 특정 지역에 속함)

4. p_industry_categories (업종 카테고리) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   업종 카테고리 ID (PK)
name VARCHAR(255)     업종명 (예: 치킨, 피자, 한식)
created_at TIMESTAMP       업종 카테고리 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
//p_stores (1)  ---  (N) p_store_industry_categories (N)  ---  (1) p_industry_categories
// 업종 카테고리 (매장 업종을 구분, 예: 치킨, 한식, 카페 등)
Table p_industry_categories {
    id UUID [primary key, default: "uuid_generate_v4()"]
    name VARCHAR(255) [unique, not null] // 업종명 (예: 치킨, 피자, 한식)
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_industry_categories (업종 카테고리) 테이블 관계도 요약

  • p_store_industry_categories (매장-업종 관계): N:M 관계 (각 매장은 여러 업종을 가질 수 있음)
  • p_stores (매장): N:M 관계 (각 매장은 여러 업종을 가질 수 있으며, 하나의 업종은 여러 매장에 적용될 수 있음)

5. p_stores (매장) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   매장 ID (PK)
user_id INTEGER     점주 ID (FK)
location_category_id UUID     지역 카테고리 ID (FK)
name VARCHAR(255)       매장 이름
address VARCHAR(255)       매장 주소
phone VARCHAR(20)     매장 전화번호 (고유)
image_url VARCHAR(255)       매장 대표 이미지 URL
status VARCHAR(50)       매장 상태 (OPEN, CLOSED, SUSPENDED)
created_at TIMESTAMP       매장 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
// 매장 테이블 (점주가 운영하는 매장 정보 저장)
Table p_stores {
    id UUID [primary key, default: "uuid_generate_v4()"]
    user_id INTEGER [not null, ref: > p_users.id] // 점주 FK
    location_category_id UUID [not null, ref: > p_location_categories.id] // 지역 FK
    name VARCHAR(255) [not null] // 매장 이름
    address VARCHAR(255) [not null] // 매장 주소
    phone VARCHAR(20) [not null] // 매장 전화번호
    image_url VARCHAR(255) [not null] // 이미지 URL
    status VARCHAR(50) [not null, note: "OPEN, CLOSED, SUSPENDED"] // 매장 상태 (운영 중, 폐점, 정지)
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_stores (매장) 테이블 관계도 요약

  • p_users (사용자): N:1 관계 (점주는 여러 개의 매장을 운영할 수 있음)
  • p_location_categories (지역 카테고리): N:1 관계 (각 매장은 특정 지역에 속함)
  • p_store_industry_categories (매장-업종 관계): N:M 관계 (각 매장은 여러 업종을 가질 수 있음)
  • p_menus (메뉴): 1:N 관계 (하나의 매장은 여러 개의 메뉴를 제공할 수 있음)
  • p_orders (주문): 1:N 관계 (각 매장에서는 여러 주문이 발생할 수 있음)
  • p_reviews (리뷰): 1:N 관계 (여러 사용자가 매장에 대한 리뷰를 남길 수 있음)

6. p_store_industry_categories (매장 - 업종 관계) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

store_id UUID ✅ (복합)   매장 ID (FK)
industry_category_id UUID ✅ (복합)   업종 카테고리 ID (FK)
// 매장 - 업종 다대다 관계 테이블
Table p_store_industry_categories {
    store_id UUID [not null, ref: > p_stores.id] // 매장 FK
    industry_category_id UUID [not null, ref: > p_industry_categories.id] // 업종 FK
    primary key (store_id, industry_category_id)
}

p_store_industry_categories (매장 - 업종 관계) 테이블 관계도 요약

  • p_stores (매장): N:M 관계 (하나의 매장은 여러 업종을 가질 수 있음)
  • p_industry_categories (업종 카테고리): N:M 관계 (하나의 업종은 여러 매장에 적용될 수 있음)

7. p_menus (메뉴) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   메뉴 ID (PK)
store_id UUID     해당 매장 ID (FK)
name VARCHAR(255)       메뉴 이름
price DECIMAL(10,2)       메뉴 가격
description TEXT       메뉴 설명
is_hidden BOOLEAN       ✅ (기본값 false) 숨김 여부 (true = 숨김, false = 노출)
created_at TIMESTAMP       메뉴 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
// 메뉴 테이블 (매장 메뉴 정보)
Table p_menus {
    id UUID [primary key, default: "uuid_generate_v4()"]
    store_id UUID [not null, ref: > p_stores.id] // 매장 FK
    name VARCHAR(255) [not null] // 메뉴 이름
    price DECIMAL(10, 2) [not null] // 가격
    description TEXT // 메뉴 설명
    is_hidden BOOLEAN [default: false] // 숨김 여부 (true = 숨김, false = 노출)    
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_menus (메뉴) 테이블 관계도 요약

  • p_stores (매장): N:1 관계 (각 매장은 여러 개의 메뉴를 가질 수 있음)
  • p_menu_images (메뉴 이미지): 1:N 관계 (각 메뉴는 여러 개의 이미지를 가질 수 있음)
  • p_menu_options (메뉴 옵션): 1:N 관계 (각 메뉴는 여러 개의 옵션을 가질 수 있음)
  • p_order_items (주문 상세): 1:N 관계 (각 메뉴는 여러 주문에 포함될 수 있음)

8. p_menu_options (메뉴 옵션) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   메뉴 옵션 ID (PK)
menu_id UUID     해당 메뉴 ID (FK)
name VARCHAR(255)       옵션명 (예: “L 사이즈”, “엑스트라 치즈”)
price DECIMAL(10,2)       옵션 가격
created_at TIMESTAMP       옵션 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
// 메뉴별 옵션 (예: "L 사이즈", "엑스트라 치즈")
Table p_menu_options {
    id UUID [primary key, default: "uuid_generate_v4()"]
    menu_id UUID [not null, ref: > p_menus.id] // 메뉴 FK
    name VARCHAR(255) [not null] // 옵션명
    price DECIMAL(10, 2) [not null] // 옵션 가격
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_menu_options (메뉴 옵션) 테이블 관계도 요약

  • p_menus (메뉴): N:1 관계 (각 메뉴는 여러 개의 옵션을 가질 수 있음)

9. p_menu_images (메뉴 이미지) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   메뉴 이미지 ID (PK)
menu_id UUID     해당 메뉴 ID (FK)
image_url VARCHAR(255)       이미지 URL
order_index INT       ✅ (기본값 0) 이미지 순서
created_at TIMESTAMP       이미지 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
// 메뉴 이미지 테이블 (각 메뉴의 다중 이미지 저장)
Table p_menu_images {
    id UUID [primary key, default: "uuid_generate_v4()"]
    menu_id UUID [not null, ref: > p_menus.id] // 메뉴 FK
    image_url VARCHAR(255) [not null] // 이미지 URL
    order_index INT [default: 0] // 이미지 순서
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_menu_images (메뉴 이미지) 테이블 관계도 요약

  • p_menus (메뉴): N:1 관계 (각 메뉴는 여러 개의 이미지를 가질 수 있음)

10. p_orders (주문) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   주문 ID (PK)
user_id INTEGER     주문한 사용자 ID (FK)
store_id UUID     주문이 발생한 매장 ID (FK)
address_id UUID     주문 배송지 ID (FK)
total_price DECIMAL(10,2)       총 주문 금액
status VARCHAR(50)       주문 상태 (PENDING, CONFIRMED, CANCELLED, DELIVERING, COMPLETED)
description TEXT       주문자 요구사항
ordered_at TIMESTAMP       주문 접수 일시
created_at TIMESTAMP       주문 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
// 주문 테이블
Table p_orders {
    id UUID [primary key, default: "uuid_generate_v4()"]
    user_id INTEGER [not null, ref: > p_users.id] // 주문자 FK
    store_id UUID [not null, ref: > p_stores.id] // 매장 FK
    address_id UUID [not null, ref: > p_stores.id] // 주소 FK
    total_price DECIMAL(10, 2) [not null] // 총 주문 금액
    status VARCHAR(50) [not null, note: "PENDING, CONFIRMED, CANCELLED, DELIVERING, COMPLETED"] // 주문 상태
    description TEXT // 주문자 요구사항
    ordered_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_orders (주문) 테이블 관계도 요약

  • p_users (사용자): N:1 관계 (사용자는 여러 개의 주문을 할 수 있음)
  • p_stores (매장): N:1 관계 (주문은 특정 매장에서 발생)
  • p_user_addresses (배송지): N:1 관계 (각 주문은 특정 배송지로 설정됨)
  • p_order_items (주문 상세): 1:N 관계 (하나의 주문에는 여러 개의 메뉴 포함 가능)
  • p_payments (결제): 1:1 관계 (각 주문은 하나의 결제와 연결됨)
  • p_reviews (리뷰): 1:1 관계 (주문 1건당 리뷰 1개 가능)

11. p_order_items (주문 상세) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   주문 상세 ID (PK)
order_id UUID     해당 주문 ID (FK)
menu_id UUID     주문한 메뉴 ID (FK)
quantity INT       주문한 메뉴 수량 (1 이상)
price DECIMAL(10,2)       개별 메뉴 가격
created_at TIMESTAMP       주문 상세 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
// 주문 상세 테이블 (각 주문 내 개별 메뉴 정보 저장)
Table p_order_items {
    id UUID [primary key, default: "uuid_generate_v4()"]
    order_id UUID [not null, ref: > p_orders.id] // 주문 FK
    menu_id UUID [not null, ref: > p_menus.id] // 메뉴 FK
    quantity INT [not null, note: "Must be greater than 0"] // 수량
    price DECIMAL(10, 2) [not null] // 개별 가격
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_order_items (주문 상세) 테이블 관계도 요약

  • p_orders (주문): N:1 관계 (하나의 주문에는 여러 개의 주문 상세가 포함될 수 있음)
  • p_menus (메뉴): N:1 관계 (여러 주문 상세가 동일한 메뉴를 포함할 수 있음)

12. p_payments (결제) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   결제 ID (PK)
order_id UUID     결제가 발생한 주문 ID (FK)
user_id INTEGER     결제한 사용자 ID (FK)
amount DECIMAL(10,2)       결제 금액
status VARCHAR(50)       결제 상태 (PENDING, PAID, FAILED, REFUNDED)
method VARCHAR(50)       결제 방식 (CREDIT_CARD, KAKAO_PAY, NAVER_PAY, BANK_TRANSFER)
created_at TIMESTAMP       결제 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
// 결제 테이블 (주문에 대한 결제 정보 저장)
Table p_payments {
    id UUID [primary key, default: "uuid_generate_v4()"]
    order_id UUID [not null, ref: > p_orders.id] // 주문 FK
    user_id INTEGER [not null, ref: > p_users.id] // 고객 FK
    amount DECIMAL(10, 2) [not null] // 결제 금액
    status VARCHAR(50) [not null, note: "PENDING, PAID, FAILED, REFUNDED"] // 결제 상태
    method VARCHAR(50) [not null, note: "CREDIT_CARD, KAKAO_PAY, NAVER_PAY, BANK_TRANSFER"] // 결제 방식
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_payments (결제) 테이블 관계도 요약

  • p_orders (주문 테이블): 1:1 관계 (각 주문은 하나의 결제 정보를 가질 수 있음)
  • p_users (사용자 테이블): N:1 관계 (각 사용자는 여러 개의 결제를 수행할 수 있음)

13. p_ai_interactions (AI 질의 응답 기록) 테이블 명세서

필드 이름데이터 타입PRIMARY KEYFOREIGN KEYUNIQUENULL 허용설명

id UUID   AI 질의 응답 기록 ID (PK)
user_id INTEGER     AI 질의 응답을 요청한 사용자 ID (FK)
query_text TEXT       사용자 질문 내용
response_text TEXT       AI 응답 내용
created_at TIMESTAMP       질의 응답 생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
//업주가 메뉴 설명시 사용하는 AI  질의 응답 기록
Table p_ai_interactions {
    id UUID [primary key, default: "uuid_generate_v4()"]
    user_id INTEGER [not null, ref: > p_users.id]
    query_text TEXT [not null]
    response_text TEXT [not null]
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    deleted_by VARCHAR(100)
}

p_ai_interactions (AI 질의 응답 기록) 테이블 관계도 요약

  • p_orders (주문 테이블): 1:1 관계 (각 주문은 하나의 결제 정보를 가질 수 있음)
  • p_users (사용자 테이블): N:1 관계 (사용자는 여러 개의 AI 질의 응답을 수행할 수 있음)

14. p_reviews 테이블 필드 정의

컬럼명타입PKFKNULL 허용UNIQUE설명

id UUID     리뷰 ID (Primary Key)
order_id UUID     주문 ID (Foreign Key, p_orders.id)
user_id INTEGER     작성자 ID (Foreign Key, p_users.id)
store_id UUID     매장 ID (Foreign Key, p_stores.id)
rating INTEGER       별점 (1~5 범위)
comment TEXT       리뷰 내용 (선택 사항)
created_at TIMESTAMP       생성 일시
created_by VARCHAR(100)       생성자
updated_at TIMESTAMP       수정 일시
updated_by VARCHAR(100)       수정자
deleted_at TIMESTAMP       삭제 일시
deleted_by VARCHAR(100)       삭제자
// 리뷰 테이블 (고객이 매장에 남기는 리뷰)
Table p_reviews {
    id UUID [primary key, default: "uuid_generate_v4()"] // 리뷰 ID (PK)
    order_id UUID [not null, ref: > p_orders.id] // 주문 FK (리뷰는 특정 주문을 기반으로 작성됨)
    user_id INTEGER [not null, ref: > p_users.id] // 작성자 FK (고객)
    store_id UUID [not null, ref: > p_stores.id] // 리뷰 대상 매장 FK
    rating INT [not null, note: "1~5 범위의 별점"] // 별점 (CHECK 제약조건은 SQL에서 설정)
    comment TEXT // 리뷰 내용 (선택 사항)
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP
    deleted_by VARCHAR(100)
}

p_reviews (리뷰) 테이블 관계도 요약

  • p_users (사용자 테이블): N:1 관계 (하나의 사용자는 여러 개의 리뷰를 작성할 수 있음)
  • p_orders (주문 테이블): 1:1 관계 (하나의 주문에는 하나의 리뷰만 작성 가능)
  • p_stores (매장 테이블): N:1 관계 (여러 사용자가 동일한 매장에 대한 리뷰를 남길 수 있음)
// 사용자 배송지 정보 테이블 (유저가 여러 개의 배송지를 저장할 수 있음)
Table p_user_addresses {
    id UUID [primary key, default: "uuid_generate_v4()"] // 배송지 ID (PK)
    user_id INTEGER [not null, ref: > p_users.id] // 유저 FK (배송지 소유자)
    address_name VARCHAR(255) [not null] // 주소명 (예: "집", "회사", "친구 집")
    recipient_name VARCHAR(100) [not null] // 수령인 이름
    address VARCHAR(255) [not null] // 상세 주소
    zip_code VARCHAR(10) [not null] // 우편번호
    is_default BOOLEAN [default: false] // 기본 배송지 여부 (true이면 기본 설정)
    created_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    created_by VARCHAR(100)
    updated_at TIMESTAMP [default: "CURRENT_TIMESTAMP"]
    updated_by VARCHAR(100)
    deleted_at TIMESTAMP
    deleted_by VARCHAR(100)
}
    • erd


  • 인프라 설계서

반응형

'국비지원 (스파르타)' 카테고리의 다른 글

2.18 어드민 API추가  (0) 2025.02.18
2.17 싱글톤 공부  (1) 2025.02.17
UUID generate deprecated  (0) 2025.02.14
2-13 팀 프로젝트  (0) 2025.02.13
JPA에서 N+1 이슈는 과연 문제일까?  (0) 2025.02.11

댓글

Designed by JB FACTORY