# 테이블오더 서비스 요구사항 정의서

## 1. 프로젝트 개요

### 1.1 서비스 비전
디지털 주문 시스템을 통해 고객에게는 편리한 주문 경험을, 매장 운영자에게는 효율적인 운영 환경을 제공하는 차세대 테이블오더 플랫폼

### 1.2 핵심 가치 제안

**고객 관점**
- 대기 시간 없는 즉시 주문
- 직관적이고 사용하기 쉬운 인터페이스

**매장 운영자 관점**
- 인건비 절감 및 운영 효율성 증대
- 실시간 주문 관리 및 모니터링

**시장 차별화**
- 다양한 업종에 적용 가능한 유연한 구조
- 직관적인 관리자 도구

---

## 2. 서비스 구성

### 2.1 주요 구성 요소
- **고객용 인터페이스**: 테이블에서 고객이 사용하는 주문 화면 (브라우저에서 동작하는 웹UI 방식)
- **관리자용 인터페이스**: 매장 운영자가 사용하는 관리 화면 
- **서버 시스템**: 주문 처리 및 데이터 관리
- **데이터 저장소**: 매장, 메뉴, 주문 정보 저장

---

## 3. 핵심 기능 요구사항

### 3.1 고객용 기능 (Customer Features)

#### 3.1.1 테이블 태블릿 자동 로그인 및 세션 관리
**목적**: 고객이 별도 로그인 절차 없이 즉시 주문할 수 있도록 자동 인증

**기능 요구사항**:
- **초기 설정 (관리자가 1회 수행)**:
  - 매장 식별자 입력
  - 테이블 번호 입력
  - 테이블 비밀번호 입력
  - 최종 로그인 정보 로컬 저장
- **자동 로그인**:
  - 1회 로그인 성공 후, 저장된 정보로 자동 로그인

#### 3.1.2 메뉴 조회 및 탐색
**목적**: 고객이 매장의 메뉴를 쉽게 탐색하고 선택할 수 있도록 지원

**기능 요구사항**:
- **기본 화면**: 메뉴 화면이 기본 화면으로 항상 표시
- 카테고리별 메뉴 분류 및 표시
- 메뉴 상세 정보 표시
  - 메뉴명
  - 가격
  - 메뉴 설명
  - 메뉴 이미지
- 카테고리 간 빠른 이동

**UI/UX 요구사항**:
- 카드 형태의 메뉴 레이아웃
- 터치 친화적인 버튼 크기 (최소 44x44px)
- 명확한 시각적 계층 구조

#### 3.1.3 장바구니 관리
**목적**: 주문 전 선택한 메뉴를 임시 저장하고 수정할 수 있는 기능

**기능 요구사항**:
- 메뉴 추가/삭제
- 수량 조절 (증가/감소)
- 총 금액 실시간 계산
- 장바구니 비우기
- 로컬 저장 (페이지 새로고침 시에도 유지)

**데이터 관리**:
- 클라이언트 측 임시 저장 (페이지 새로고침 시에도 유지)
- 서버 전송은 주문 확정 시에만 수행

#### 3.1.4 주문 생성
**목적**: 장바구니의 메뉴를 실제 주문으로 전환

**기능 요구사항**:
- 주문 내역 최종 확인
- 주문 확정 버튼
- **주문 성공 플로우**:
  - 주문 번호 표시
  - 장바구니 자동 비우기
  - 메뉴 화면으로 자동 리다이렉트
- 주문 실패 시 에러 메시지 표시 및 장바구니 유지

**주문 정보 포함 항목**:
- 매장 식별 정보
- 테이블 식별 정보
- 주문 메뉴 목록 (메뉴명, 수량, 단가)
- 총 주문 금액
- 세션 ID (테이블 세션 추적용)

#### 3.1.5 주문 내역 조회
**목적**: 현재 테이블의 주문 이력을 확인

**기능 요구사항**:
- 주문 시간 순 정렬
- 주문별 상세 정보 표시
  - 주문 번호
  - 주문 시각
  - 주문 메뉴 및 수량
  - 주문 금액
  - 주문 상태 (대기중/준비중/완료)
- 주문 상태 실시간 업데이트 (선택사항)

**데이터 필터링**:
- **현재 테이블 세션 주문만 표시** (이전 식사 세션 제외)
- 매장 이용 완료 처리된 주문은 제외
- 페이지네이션 또는 무한 스크롤


### 3.2 관리자용 기능 (Admin Features)

#### 3.2.1 매장 인증
**목적**: 관리자가 자신의 매장 관리 시스템에 접근

**기능 요구사항**:
- 매장 식별자 입력
- 사용자명 및 비밀번호 입력
- **세션 관리**:
  - 16시간 세션 유지
  - JWT 토큰 기반 인증
  - 브라우저 새로고침 시 세션 유지
  - 16시간 후 자동 로그아웃

**보안 요구사항**:
- 비밀번호 안전한 저장 (bcrypt 해싱)
- 로그인 시도 제한
- 세션 기반 인증

#### 3.2.2 실시간 주문 모니터링
**목적**: 들어오는 주문을 실시간으로 확인하고 관리

**기능 요구사항**:
- **주문 목록 실시간 업데이트** (Server-Sent Events 사용)
- **그리드/대시보드 레이아웃**:
  - 테이블별 카드 형태 표시
  - 각 테이블 카드에 총 주문액 표시
  - 최신 주문 n개 미리보기
- 주문별 상세 정보 표시
  - 테이블 번호
  - 주문 번호
  - 주문 시각
  - 주문 메뉴 및 수량 (축약)
  - 총 금액
- **주문 카드 클릭 시**: 전체 메뉴 목록 상세 보기
- 주문 상태 변경 (대기중/준비중/완료)
- 신규 주문 시각적 강조 (색상 변경, 애니메이션)

**업데이트 방식**:
- Server-Sent Events (SSE) 기반 실시간 통신
- 2초 이내 주문 표시

**UI 요구사항**:
- 그리드 형태의 테이블별 레이아웃
- 최신 주문 강조 표시
- 테이블별 필터링 기능


#### 3.2.3 테이블 관리
**목적**: 테이블별 주문 상태 관리 및 세션 라이프사이클 관리

**기능 요구사항**:

**1. 테이블 태블릿 초기 설정**:
- 테이블 번호 및 테이블 비밀번호 설정
- 16시간 세션 생성
- 설정 정보 저장 및 자동 로그인 활성화

**2. 주문 삭제 (직권 수정)**:
- 특정 주문 삭제 버튼
- 확인 팝업 표시
- 주문 즉시 삭제
- 테이블 총 주문액 재계산
- 성공/실패 피드백

**3. 테이블 세션 처리**:
- 테이블 세션 시작(세션의 첫 주문) 및 종료 관리(테이블 이용 완료)
- 확인 팝업 표시
- 테이블 세션 종료(이용 완료) 시, 해당 세션의 주문 내역을 과거 이력으로 이동
- 테이블 세션 종료(이용 완료) 시, 테이블 현재 주문 목록 및 총 주문액 0으로 리셋
- 새 고객이 이전 주문 내역 없이 시작 가능
- 성공/실패 피드백

**4. 과거 주문 내역 조회**:
- "과거 내역" 버튼
- 테이블별 과거 주문 목록 표시 (시간 역순)
- 각 주문 정보: 주문 번호, 시각, 메뉴 목록, 총 금액, 매장 이용 완료 시각
- 날짜 필터링 기능
- "닫기" 버튼으로 대시보드 복귀

**데이터 관리**:
- 주문 이력 데이터베이스 저장 (OrderHistory 테이블)
- 세션 ID로 주문 그룹화
- 완료 시각 기록

#### 3.2.4 메뉴 관리
**목적**: 메뉴 정보를 동적으로 관리

**기능 요구사항**:
- 메뉴 조회 (카테고리별)
- 메뉴 등록
  - 메뉴명
  - 가격
  - 설명
  - 카테고리
  - 이미지 URL
- 메뉴 수정
- 메뉴 삭제
- 메뉴 노출 순서 조정

**데이터 검증**:
- 필수 필드 검증
- 가격 범위 검증

---

## 4. MVP 개발 범위

### 핵심 기능 (필수)
**목표**: 기본적인 주문 프로세스 구현

**고객용**:
- 테이블 태블릿 자동 로그인 및 세션 관리
- 메뉴 조회
- 장바구니 관리
- 주문 생성 (5초 표시 후 자동 리다이렉트)
- 주문 내역 조회 (현재 세션만)

**관리자용**:
- 매장 인증 (16시간 세션)
- 실시간 주문 모니터링 (그리드 레이아웃, SSE)
- 테이블 관리 (초기 설정, 주문 삭제, 매장 이용 완료, 과거 내역 조회)

---

## 부록

### A. 용어 정의
- **MVP**: Minimum Viable Product (최소 기능 제품)
- **API**: Application Programming Interface (애플리케이션 프로그래밍 인터페이스)
- **UI/UX**: User Interface / User Experience (사용자 인터페이스 / 사용자 경험)
- **테이블 세션**: 특정 테이블에 고객이 앉아서 첫 주문 시작한 후 부터 해당 테이블 이용 완료 처리까지의 시간. 세션 종료 후 다른 고객의 첫 주문 시작 시, 새로운 세션 시작.
