# Architecture

## 역할

- 고객: QR URL로 진입해 주문/광고/결제 진행
- 매장 관리자: 주문 처리, 메뉴/테이블/결제 설정 관리
- 플랫폼 관리자: 매장, 광고, 통계, 로그 관리

## 요청 흐름

1. 고객이 테이블 QR을 스캔합니다.
2. `/s/{slug}/t/{token}`에서 매장/테이블/메뉴/광고를 로드합니다.
3. 고객이 장바구니를 구성합니다.
4. 고객은 `광고 시청하고 서비스받기` 또는 `그냥 주문하기`를 선택합니다.
5. 광고 선택 시 10초 시청 완료 이벤트가 `ad_events`에 기록됩니다.
6. 주문 API는 서버 DB의 메뉴/옵션 가격으로 금액을 재계산합니다.
7. 비결제형 매장은 주문이 바로 매장 주문 보드로 들어갑니다.
8. 결제형 매장은 주문 생성 후 PG 결제 페이지로 이동합니다.
9. 결제 승인 후 `orders.payment_status=approved`, `orders.status=paid`로 변경됩니다.

## 주요 테이블

- `stores`: 매장과 서비스/결제/광고 설정
- `users`: 관리자/직원 계정
- `restaurant_tables`: 테이블별 QR 토큰
- `categories`, `menu_items`, `menu_option_groups`, `menu_options`: 메뉴 구조
- `orders`, `order_items`: 주문 원장
- `payments`: PG 거래 기록
- `ads`, `ad_events`: 광고 캠페인과 노출/완료/클릭/보상 이벤트
- `audit_logs`, `system_logs`: 보안/운영 로그
